Python Forum
gpiozero button turn off LED that is already on
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
gpiozero button turn off LED that is already on
#1
I have a Raspberry Pi on my desk. It is wired to an LED and a button. My phone sends an SSH to the Pi when it gets a text message. The SSH runs this script to turn the LED on:

1
2
3
4
5
6
7
from gpiozero import LED
import time
from time import sleep
 
pink = LED(20)
pink.on()
sleep(900)
The "sleep(900)" keeps the LED on for 15 minutes. I also have a function on my phone that sends an SSH to the same Pi to run this script, effectively cancelling the LED.

1
2
3
4
5
6
from gpiozero import LED
import time
from time import sleep
 
pink = LED(20)
pink.off()
What I want is to press a button connected to GPIO17 that either turns the LED off or runs the script to cancel the LED. I have tried this, but it does not work:

1
2
3
4
5
6
7
8
9
from gpiozero import LED, Button
from signal import pause
 
led = LED(20)
button = Button(17)
 
button.when_pressed = led.off
 
pause()
I have confirmed that the button is open when relaxed, closed when pressed. I have confirmed that GPIO17 does function as a button, the LED does turn on and off by other means. I just can't get the button to turn it off.
Reply
#2
You could use the toggle-method. One press => LED on, next press => LED off, next LED on

try following:
1
2
3
4
5
6
7
8
9
from gpiozero import LED, Button
from signal import pause
  
led = LED(20)
button = Button(17)
  
button.when_pressed = led.toggle
  
pause()
Almost dead, but too lazy to die: https://sourceserver.info
All humans together. We don't need politicians!
Reply
#3
It works to toggle the LED when running that script. While it was still running, I ran the script to turn on the LED then went back to your solution. The button had no effect (stayed on). Then I ran the script to stop the LED and went back to your solution. Then yours did not toggle the LED - it stayed off.
Reply
#4
I was offered this solution in another forum. It replaces the script that turns on the LED and incorporates a button to turn it off. This works!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from gpiozero import LED, Button
import time
from time import sleep
 
pink = LED(20)
pink.on()
button = Button(7)
 
now = time.time()
while time.time() < now + 900:
    if button.is_pressed:
        break
    sleep(0.2)
     
pink.off()
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  GPIOzero Newbe Question Rchrd 0 724 Nov-10-2024, 03:40 PM
Last Post: Rchrd
  Exceeding the value - turn on the relay. stsxbel 0 613 May-27-2024, 07:18 PM
Last Post: stsxbel
  How do i turn my program into a .exe julio2000 1 2,542 Feb-14-2020, 08:18 PM
Last Post: snippsat
  Turn py into exe tester21 4 4,229 Jul-22-2019, 04:31 PM
Last Post: nilamo
  Not sure how to turn this into a loop iamgonge 1 2,669 Dec-05-2018, 11:03 PM
Last Post: anandoracledba

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020