Forum >> Principianti >> input in loop e porta GPIO

Pagina: 1

Buonasera , ed eccomi a chiedere ancora il vostro aiuto.
Devo fare un programmino che abbia un input in loop e che mi accenda un led sulla GPIO.

I problemi sono , che comando usare per gestire l'input all'infinito...

In base al dato inserito nell'input io dovrei accedere o spegnere dei led sulla gpio(la quale cosa funziona); il problema è che quando viene eseguito il codice all'interno dell'if il led si accende, quando finisce l'esecuzione il led si spegne anche se non c'è nessuna istruzione che lo spegne.





from gpiozero import LED

from time import sleep

a=10000

i=0

def Led5_on():

red = LED(5)

red.on()

sleep(2) # l'ho messo perchè pensavo che potesse servire ma non cambia nulla



def Led5_off():

red = LED(5)

red.off()



for a in range (0,a):



i=eval(input ("inserisci 1/2 : "))




if i== 1:

Led5_on()



else :

i== 2

Led5_off()




Allego il codice , anche se è una boiata.

Grazie
------
Alberto
Devo fare un programmino che abbia un input in loop e che mi accenda un led sulla GPIO.
Un programmino che abbia in input il loop mi sfugge, cosa vuoi fare esattamente?

I problemi sono , che comando usare per gestire l'input all'infinito...
Torno a chiederti che vuoi fare, lasciare accesa la luce all'infinito finché non "killi" il processo? Ti basta poco, anche un semplice:
>>> while True:
     [...]

In base al dato inserito nell'input io dovrei accedere o spegnere dei led sulla gpio(la quale cosa funziona); il problema è che quando viene eseguito il codice all'interno dell'if il led si accende, quando finisce l'esecuzione il led si spegne anche se non c'è nessuna istruzione che lo spegne.

Non ho mai usato quella libreria, ma credo proprio che quel red.off() spenga il tuo led, non credi anche tu?

Ti lascio un semplice programmino, molto più semplice da capire:
import RPi.GPIO as GPIO
import time

### Setup iniziale ###
GPIO.setmode(GPIO.BCM)
PIN = 7 ### Ma scegli quello che ti piace di più ###
GPIO.setwarnings(False) ### Serve solo per non stampare i warning a schermo, un po' li odio lo confesso ###
GPIO.setup(PIN,GPIO.OUT)

### Accendi e spegni la lucetta finché non spari allo script ###
while True:
    GPIO.output(PIN,True)
    time.sleep(1)
    GPIO.output(PIN,False)
    time.sleep(1)
Questo script, buono per i fari e le ambulanze, lo trovo molto più intuitivo, che ne pensi?

Cya
Grazie Daniele per la tua risposta completa di esempio che studierò di sicuro.
Per tornare alla mia domanda i comandi Red.on() e Red.off() funzionano egregiamente. (per spiegarti io ho una scheda di test innestata sulla Gpio del mio Raspy 3 dotata di protezione per le porte e di basetta sperimentale, è montato li il lede che si accende regolare.... L'unico problema è che come si accende si spegne, nel senso che se non metto uno sleep() dopo il comando Red.on() mi si spegne subito. Ecco io vorrei che la porta Gpio restasse a livello logico 1 finché non la spengo io.... È questo non succede)

E poi il mio programmino non mi resta in loop per sempre in attesa della pressione di un tasto, ho messo un for con variabile a 10000 ma io vorrei che il programma giri all'infinito finché non lo killo io.

Spero di averti chiarito il mio problemino.

Grazie ancora



------
Alberto
Per completezza di informazione, quella libreria che tu non conosci (ci può stare sicuramente) è quella indicata nelle istruzioni della basetta sperimentale che ti dicevo.
Ecco , solo per chiarire

Grazie



------
Alberto
Ok, mi ritengo ufficialmente incuriosito. ;)

Cos'è una basetta sperimentale, ti riferisci ad una breadboard evoluta? E cosa fa di particolare e diverso rispetto ad una tradizionale, libreria a parte?

Cya

UPDATE: Ok, bastava andare su wikipedia per sapere che basetta sperimentale è un sinonimo di breadboard, grazie cm.


--- Ultima modifica di Daniele aka Palmux in data 2016-09-05 10:32:26 ---
Eccoti il link.
http://rasp.io/



È' molto pratica già dotata di protezione x le varie porte.

Saluti


------
Alberto
Partendo dal tuo script di esempio ho pensato di "scomporlo" ma ..... non va un cavolo (non segnala neppure errori però).
Lo posto cosi possiate darmi una dritta sugli errori fatti:




import RPi.GPIO as GPIO
import time

### Setup iniziale ###
GPIO.setmode(GPIO.BCM)
PIN5 = 5 ### Ma scegli quello che ti piace di più ###
PIN6 = 6
PIN7 = 7
PIN8 = 8
GPIO.setwarnings(False) ### Serve solo per non stampare i warning a schermo, un po' li odio lo confesso ###
GPIO.setup(PIN5,GPIO.OUT)
GPIO.setup(PIN6,GPIO.OUT)
GPIO.setup(PIN7,GPIO.OUT)
GPIO.setup(PIN8,GPIO.OUT)

def led5_on():
    GPIO.output(PIN5,True)
    time.sleep(1)
    
def led6_on():
    GPIO.output(PIN6,True)
    time.sleep(1)    
    
def led7_on():
    GPIO.output(PIN7,True)
    time.sleep(1)
    
def led8_on():
    GPIO.output(PIN8,True)
    time.sleep(1)

def led5_off():
    GPIO.output(PIN5,False)
    time.sleep(1)
    
def led6_off():
    GPIO.output(PIN6,False)
    time.sleep(1)
    
def led7_off():
    GPIO.output(PIN7,False)
    time.sleep(1)
    
def led8_off():  
    GPIO.output(PIN8,False)
    time.sleep(1)
    
### Accendi e spegni la lucetta finché non spari allo script ###
while True:
    
    led5_on
    led6_on
    led5_off
    led6_off

Grazie

Alberto


------
Alberto
Le funzioni vanno chiamate ;)
*** Il codice va evidenziato con il simbolo di fianco ai colori per non perdere l'indentazione ***
Le funzioni vanno chiamate ;)

Per un punto Martin perse la capa , per due parentesi Alberto perse la pazienza....

Grazie Claudio_F


------
Alberto


Pagina: 1



Esegui il login per scrivere una risposta.