---+ Python modules and timing Python libraries are arranged as modules, containing a number of functions and/or classes. These modules must be _imported_ before being used. You can either import the complete module, or you can import individual functions or classes to be used. As an example, let's study the _time_ module. In !MicrroPython the module is called utime (for micro-time) and it contains functions allowing us to delay execution for a certain amount of time. * sleep(t) sets the program to sleep for t seconds * sleep_ms(t) sets the program to sleep for t ms If, in our program which prints "Hello World!" we want to have the text printed only every second we could program this as follows: <verbatim>import utime # import time would work as well for i in range(5): print("Hello World") utime.sleep(1) # delay execution be 1 s, utime.sleep_ms(1000) would do the same. sleep_ms is not available in CPython</verbatim> The other option is to import just the function to be used: <verbatim>from utime import sleep_ms for i in range(5): print("Hello World!") sleep_ms(1000) # note that utime in front of the sleep call has been omitted</verbatim> In i similar way, you may use the functions of the math library: In order to calculate sin(30 degrees) you need access to the _sin_ function. The _sin_ function however takes its parameter in radians such that you need the function _radians_, converting values from degrees to radians, in addition. This is how you would go about: <verbatim>from math import sin,radians print(sin(radians(30)))</verbatim> ---++ Writing your own functions It is easily possible to write your own functions and to create your own modules. Imagine you want to create a sin function which takes angles in degrees, instead of radians. Let's call the function _sin_deg(degrees)._ It will take its parameter degrees, convert the value to radians and return the sin result, which was calculated with the sin function from the math library. You can define a function with the keyword <i>def. </i>The function body is again indented, like we saw in case of the conditions or the loops: <verbatim>from math import sin,radians def sin_deg(degrees): rad = radians(degrees) return sin(rad)</verbatim> We can call this function as follows: <verbatim>angle = 30 # use 30 degrees as parameter value result = sin_deg(angle) # calculates the sin of "angle" degrees using our own sin_deg function print("sin(",angle,") = ",result)</verbatim> ---++ Plotting a function <img alt="damped_osc.png" height="46" src="%ATTACHURL%/damped_osc.png" title="damped_osc.png" width="166" /><br />is the formula for a damped oscillator. In order to plot its shape, we can first define a function which calculates its value for a given x. After that, we call this function for as many points as we want to plot, and we print the x and damped_osc(x) values. <verbatim>from math import exp,sin def damped_osc(x): # calculates the damped # oscillator function return exp(-1/10)*sin(x) for i in range(500): # calculate 500 values print(i/10,damped_osc(i/10) # and print them</verbatim> When running the program, we can redirect the printed data to a file. On the PC, using CPython (python3) this is done as follows: <verbatim>python3 damped_osc.py > damped_osc.dat.</verbatim> We can however also run the code on the ESP32 and redirect the output to a file on the PC: <verbatim>ampy run damped_osc.py > damped_osc.dat</verbatim> Once we have the data in a file, we call gnuplot: <verbatim>gnuplot plot "damped_osc.dat" with lines </verbatim> <img alt="damped_osc_plot.png" height="598" src="%ATTACHURL%/damped_osc_plot.png" title="damped_osc_plot.png" width="662" /> <verbatim> </verbatim> Let's try these [[ExerciseSheets#SecondSession]]<br />Thereafter, we will learn how to access hardware in [[Hardware Access GPIO]]<br /><br /> -- %USERSIG{UliRaich - 2022-10-15}% ---++ Comments %COMMENT%
Attachments
Attachments
Topic attachments
I
Attachment
History
Action
Size
Date
Who
Comment
png
damped_osc.png
r1
manage
3.3 K
2022-10-23 - 19:20
UliRaich
png
damped_osc_plot.png
r1
manage
38.5 K
2022-10-23 - 19:33
UliRaich
This topic: AFNOG
>
ASP2022
>
MinimalLectures
>
ModulesAndTiming
Topic revision: r5 - 2024-03-28 - UliRaich
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback