How can I make my LED flashing while executing the rest of the code?
I want to make some LEDs flash while my program executes the rest of the code.
Raspberry Pi Stack Exchange is a question and answer site for users and developers of hardware and software for Raspberry Pi. It only takes a minute to sign up.Sign up to join this community
I assume you are talking about the "on-board", or "built-in" LEDs, and not an "add-on" LED being controlled from a GPIO pin. If that's the case, you might try incorporating the following into your code:
For the PWR (power) LED, you can turn it off like this:
echo 0 | sudo tee /sys/class/leds/led1/brightness
turn it on like this:
echo 1 | sudo tee /sys/class/leds/led1/brightness
It seems you are looking to execute two parts of your script at the same time. One part is controlling the flashing of the LEDs, and the other part is executing the rest of the code. This can be done with multi threading or multi processing in Python. Look at Python 3 threading — Thread-based parallelism and Python 3 multiprocessing — Process-based parallelism.
It is possible to do what you want without involving either multi threading or multiple separate processes. There are merits to all these other methods of course.
Ok so how do you do it? Well you need to instrument your code to update the blink. It works a bit like implementing a progress bar or logging. So, imagine you have this code.
for item in some_big_list: process()
Need to become:
for item in some_big_list: process() update_progress()
Now its true that this can become tedious, but its not necessarily all that hard. Obviously update_progress() could check a timer from a wall clock, to blink only x seconds if called more frequently or just let it toggle every time it enters.
The benefit of this scheme is that if your main program hangs so does the flashing.
I STRONGLY suggest you don't do threading unless you're coding often or plan to put a lot of time into learning about the potential pitfalls and how to avoid them ... it's pretty much the fastest way to get a program with unreliable behaviour if you don't know what you're doing.
I would suggest you have a separate script that does the flashing; which you can then control from your other script... It's very much like threading, but because the memory isn't shared you're not going to find yourself having to debug issues you can't reproduce.