In the USING BUTTONS WITH GPIO project, we were able to get button input from a GPIO. In the GENERAL PURPOSE INPUT/OUTPUT project, we were able to control an LED using GPIO. In this project, we're going to put those concepts together to read a button input using one GPIO and use that information toggle an LED using another GPIO.
Step #1: Wire the button and LED to GPIOs
For the hardware in this project, we’re going to wire
two completely independent circuits:
The
first circuit will consist of a button wired
to a GPIO (like we did in USING BUTTONS WITH GPIO
);
The
second circuit will consist of an LED wired
to a separate GPIO (like we did in GENERAL PURPOSE
INPUT/OUTPUT)
Here is what the breadboard should
look like with the two
circuits wired. If
you have any
questions about how to wire either of these two circuits, refer back to
the projects referenced above.
You’ll notice that our button is
wired to GPIO18 and our LED
is wired to GPIO14.
Step #2: Write the code.
Now that we have the circuits built
and ready to go, it’s
time to write our software. For
this
project, our software is going to do two things:
Read
the state of the button (pressed or
released) using a GPIO as input
If
the button is pressed, turn on the LED using
a GPIO as output, and if the button is not pressed, turn off the LED
using the
GPIO as output
Here is the code that will accomplish this:
Let's to through the code line-by-line and take a look at what it's doing:
On Line 1, we import the module we will need to initialize the button (called Button())
On Line 2, we import the module we will need to initialize the LED (called Output())
On Line 4, we initialize our button. We call the Button() function, which returns a "Button object" to our my_button variable. We talked about that a bit in VARIABLES & ASSIGNMENTS, but the important thing to understand is that we can now use my_button to call other GPIO functions that can control our button
On Line 5, we initialize our LED. We call the Output() function, which returns a "GPIO Output object" to our my_led variable. Again, we talked about that a bit in VARIABLES & ASSIGNMENTS, but the important thing to understand is that we can now use my_led to call other GPIO functions that can control our LED
On Line 7, we check the state of the button using the is_pressed() function. This function will return True if the button is pressed (this is done by reading the voltage at the GPIO, like we discussed in USING BUTTONS WITH GPIO), and will return False if the button is released
On Line 8, if the return from our if statement is True (the button is pressed), we light the LED using the on() function
On Lines 9 and 10, if the return from our if statement is False (the button is released), we turn off the LED using the off() function
Notice
that with this code, the button status is only read one time when the
program is run. So, if you want the LED to illuminate, you need
to be holding the button when you run the code. If you’re not
holding down the button at the
time the program is run, the code will see that the button is released
and the LED will not illuminate.
Step #3: Improve the code.
To make this program more useful, we can put the code that reads the button into a loop so that it will continually read the button state and update the LED every time it changes. To do this, we simply put the last four lines of the code (the lines that test the state of the button and turn the LED on or off) in a while True: loop, like this:
Give it a try. The flashlight will continue to work until you manually stop the program.