PymateIO-Delaying: Difference between revisions
Jump to navigation
Jump to search
NEVER USE BLOCKING INSTRUCTION in the mainloop
The sleep(), sleep_ms() are BLOCKING INSTRUCTIONS.
They should never be used in your script, neither in the mainloop
| Line 19: | Line 19: | ||
== Practical example == | == Practical example == | ||
As practical example, we will read DS18B20 OneWire sensor connected on the Pymate Expansion port. | |||
The problem with the DS18B20 is required pause of 750ms between the temperature request and values reading. | |||
=== Wiring DS18B20 === | |||
[[File:PymateIO-DS18B20-Wiring.jpg]] | |||
{{PYMATE-TRAILER}} | {{PYMATE-TRAILER}} | ||
Revision as of 19:52, 29 June 2026
Abstract
The "Cycle Timing" tutorial state the following:
NEVER USE BLOCKING INSTRUCTION in the mainloop
Blocking instruction locks the script execution in a waiting state... whereas critical operation may requires quick reaction from the script.
The sleep(), sleep_ms() are BLOCKING INSTRUCTIONS.
They should never be used in your script, neither in the mainloop
The solution for this is:
- use the EventTimer class
- set the delay on the EventTimer when the source event occurs.
- check the EventTimer.done at every mainloop cycle.
- Once done, it is time to executed the delayed code.
Remark: the done will assert True only once for every set()!
Practical example
As practical example, we will read DS18B20 OneWire sensor connected on the Pymate Expansion port.
The problem with the DS18B20 is required pause of 750ms between the temperature request and values reading.
Wiring DS18B20
PymateIO all right reserved © 2026 - Written by MCHobby for PymateIO
