• Benvenuti su RaspberryItaly!
Benvenuto ospite! Login Login con Facebook Registrati Login with Facebook


Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5

[-]
Tags
clean up python3 con gpio

gpio clean up con python3
#1
Salve, ho scritto questo codice tramite un esempio di una guida che ho io in inglese..

ho modificato il codice ed ho reso che i led si attiva con i comandi che passo io..
l'unico quando uso il keyinterrup mi da errori

Codice:
#!/usr/bin/env python3

import RPi.GPIO as GPIO
import time

ledPin = 11    # RPI Board pin11

def setup():
    GPIO.setmode(GPIO.BOARD)       # Numbers GPIOs by physical location
    GPIO.setup(ledPin, GPIO.OUT)   # Set ledPin's mode is output
    GPIO.output(ledPin, GPIO.LOW) # Set ledPin low to off led
    print ('using pin%d'%ledPin)

def main():
    command = input("on/off/blink/bye : ")
    if command=="on":
        GPIO.output(ledPin, GPIO.HIGH)  # led on
        print ('...led on')
        time.sleep(1)    
        main()
    elif command=="off":    
        GPIO.output(ledPin, GPIO.LOW) # led off
        print ('led off...')
        time.sleep(1)
        main()
    elif command=="bye":
        GPIO.output(ledPin, GPIO.LOW)     # led off
        GPIO.cleanup()
    elif command=="blink":
        while True:
            try:
                GPIO.output(ledPin, GPIO.HIGH)  # led on
                print ('...led on')
                time.sleep(1)    
                GPIO.output(ledPin, GPIO.LOW) # led off
                print ('led off...')
                time.sleep(1)
            except KeyboardInterrupt:
                main()

def destroy():
    GPIO.output(ledPin, GPIO.LOW)     # led off
    GPIO.cleanup()                     # Release resource

if __name__ == '__main__':     # Program start from here
    setup()
    try:
        main()
    except KeyboardInterrupt:  # When 'Ctrl+C' is pressed, the child program destroy() will be  executed.
        destroy()

questo è l'output dell'errore che ottengo:
Codice:
pi@raspberrypi:~/Desktop $ python3 Blink_on_off_command.py
using pin11
on/off/blink/bye : on
...led on
on/off/blink/bye : off
led off...
on/off/blink/bye : blink
...led on
led off...
...led on
^Con/off/blink/bye : bye
Traceback (most recent call last):
  File "Blink_on_off_command.py", line 48, in <module>
    main()
  File "Blink_on_off_command.py", line 20, in main
    main()
  File "Blink_on_off_command.py", line 25, in main
    main()
  File "Blink_on_off_command.py", line 32, in main
    GPIO.output(ledPin, GPIO.HIGH)  # led on
RuntimeError: Please set pin numbering mode using GPIO.setmode(GPIO.BOARD) or GPIO.setmode(GPIO.BCM)
pi@raspberrypi:~/Desktop $


avete idea cosa sia?

Uso raspbian

Grazie mille e buona giornata e aspetto risposte. Vi ringrazio molto.
Risposta
#2
non sarebbe più carino usare
Codice:
from gpiozero import LED
from signal import pause
red = LED(17)
red.blink()
pause()

l'errore
RuntimeError: Please set pin numbering mode using GPIO.setmode(GPIO.BOARD) or GPIO.setmode(GPIO.BCM)
mi fa pensare, che le variabili impostate in setup non vengano viste in main, ma potrei sbagliarmi alla grande.
altra cosa, usi la stessa versione di python dell'esempio?
Heart Libro  | Blog EnricoSartori.it | Idea YouTube
Se un utente ti è stato utile, aumenta la sua reputazione! premi il Pollicione! 
Risposta
#3
ok, ti ringrazio molto .. meglio che studio il manuale italiano che si trova qui nel forum.
ti ringrazio molto per la spiegazione più tardi provo la tua soluzione.

grazie di nuovo.

cosi mi è riuscito ed il codice è leggibile e più bello.
vedi se va bene:
Codice:
#!/usr/bin/env python3
from gpiozero import LED
from time import sleep

led = LED(17)
def main():
    _input = input("on, off  , blink : ")
    if _input == 'on':
        led.on()
        main()
    elif _input == 'off':
        led.off()
        main()
    elif _input == 'blink':
        try:
            while True:
                led.on()
                sleep(1)
                led.off()
                sleep(1)
        except KeyboardInterrupt:
            led.off()
            main()

if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        led.off()

grazie mille e ora mi studio con calma tutto.
Risposta
#4
prego. di norma, la via più elegante e facile è l'uso di GPIO.zero, ci sono tanti esempi, ed è applicabile a tutto.
Heart Libro  | Blog EnricoSartori.it | Idea YouTube
Se un utente ti è stato utile, aumenta la sua reputazione! premi il Pollicione! 
Risposta
  


Vai al forum:


Navigazione: 2 Ospite(i)
Forum con nuovi Post
Forum senza nuovi post
Forum bloccato
Forum Redirect