Go Down

Topic: Interrompere ciclo Loop? O simile? (Read 733 times) previous topic - next topic

Tedy

Salve a tutti,
qualcuno potrebbe spiegarmi essendo un neofita come potrei fare per:
Tramite fotoresistenza accendere un led quando la luce è scarsa,
ma a differenza dei crepuscolari mi dovrebbe rimanere acceso fino a quando io non premo un pulsante e non con il tornar della luce. (Solo premendo un pulsante lo potrei spegnere).
Qualcuno mi può indicare lo sketch? o spiegare come potrei fare? Grazie mille.

nid69ita

Una variabile bool che può valere solo true (vero) o false (falso) (esempio di nome StatoLed)
La fai partire in false, poi quando accendi il led "accendi" anche quella variabile mettendola a true.
Il programma dovrà avere un grosso if( StatoLed==false)
se false esegui la parte di codice crepuscolare,
se true esegui la parte di codice che verifica se premi un tasto
my name is IGOR, not AIGOR

Tedy

scusate per l'ignoranza, ma essendo un neofita, qualcuno potrebbe postare un esempio di sketch? :(

nid69ita

Ma tu hai almeno uno sketch che almeno accende il led quando la luce è poca ? Iniziamo da quello.
my name is IGOR, not AIGOR

Tedy

#4
Oct 25, 2015, 07:14 pm Last Edit: Nov 02, 2015, 10:18 pm by UweFederer Reason: Add CODE tags icona </>
Eccolo:
Code: [Select]
#define fotoresistenza A0  
#define led 12  
void setup()  
{  
pinMode(A0,INPUT);  
pinMode(12,OUTPUT);  
Serial.begin(9600); // Inizializzo la comunicazione seriale  
}  

void loop()  
{  
int val = analogRead(fotoresistenza); // salvo il valore fotoresistenza dentro alla variabile val  
Serial.println(val, DEC); // Scrivo il valore della fotoresistenza, espresso in numeri decimali  
 
if(val<800) //se il valore letto dalla fotoresistenza (luminosità) è basso, accendo il led  
digitalWrite(led,HIGH);  
else  
digitalWrite(led,LOW); //altrimenti lo spengo (o lo lascio spento)  
 
}  


In poche parole dovrei dirgli che fino a che val>800 il led rimane spento e quando val<800 accende il led ma lo lascia acceso fino a quando non premo io un pulsante per dirgli stop, anche se la condizione torna ad essere val<800.

nid69ita

#5
Oct 25, 2015, 09:40 pm Last Edit: Oct 25, 2015, 09:44 pm by nid69ita
Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare  ( pulsante </> ).
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

Come ho detto prima, tu dichiara una variabile bool di nome StatoLed che parte a false
Poi la parte che fa il test del sensore la fai solo se StatoLed è false

Code: [Select]
if(StatoLed==false)
{ int val = analogRead(fotoresistenza); // salvo il valore fotoresistenza dentro alla variabile val  
  Serial.println(val, DEC); // Scrivo il valore della fotoresistenza, espresso in numeri decimali  
  if(val<800) //se il valore letto dalla fotoresistenza (luminosità) è basso, accendo il led  
  { digitalWrite(led,HIGH);  
    StatoLed=true;   // led acceso, al prossimo giro di loop() passa da else
  }
}
else
{   // qui verifico se viene premuto un pulsante
}



my name is IGOR, not AIGOR

nid69ita

P.S.  nel tuo dice se dichiari le costanti #define per dire quali pin usi, usale anche nelle pinMode

Code: [Select]
pinMode(fotoresistenza,INPUT);  
pinMode(led,OUTPUT); 
my name is IGOR, not AIGOR

Go Up