Go Down

Topic: Aiuto condizione IF (Read 982 times) previous topic - next topic

keccoricci

Ciao a tutti,

mi rendo conto che possa essere una domanda alquanto stupida, ma vi chiedo un consiglio:
ho collegato una fotoresistenza ad arduino, voglio che arduino mi comunichi in seriale quando la luce rilevata è inferiore ad un certo valore.

Sono alle prime armi con arduino, ho provato a scrivere questo codice:

Code: [Select]
#define fotoresistenza A0
int i;   
void setup() 

 pinMode(A0,INPUT); 
 Serial.begin(9600);

 
void loop() 

 int val = analogRead(fotoresistenza);
   
 if(val<180 && i==1){
Serial.println(val, DEC);
i = 2;
}
 else 
i = 1;



il problema è che arduino mi comunica tutti i valori rilevati al di sotto di una certa soglia, io vorrei invece che me lo comunicasse una sola volta (ho provato ad aggiungere una condizione nella if con la variabile "i", ma non funziona).

Sapete dirmi dove sbaglio?

Grazie molte,
Francesco

gpb01

#1
Mar 30, 2017, 05:41 pm Last Edit: Mar 30, 2017, 05:42 pm by gpb01
Sapete dirmi dove sbaglio?
Ci sono svariate cose che puoi correggere ...

1. Un pin da usare come analogico NON va dichiarato come pin di INPUT, quindi puoi eliminare quella pinMode(). La funzione analogRead() si programma già da sola, come gli serve, il pin ;)

2. il metodo che hai usato NON va bene ... devi usare una variabile di appoggio, salvare in essa il valore analogico che hai letto ed effettuare la stampa SOLO se la nuova lettura è differente dal valore salvato (... e chiaramente aggorni detto valore così, sino quando non cambia, non hai più stampe).

Prova a vedere se ci riesci ... :)

Guglielmo
Search is Your friend ... or I am Your enemy !

keccoricci

Prova a vedere se ci riesci ... :)
Ciao!

Grazie per la risposta!
Non so se ho capito bene, ho provato a cambiarlo così,  ma non penso di averci azzeccato...

Code: [Select]
#define fotoresistenza A0
int i;
int val;
void setup() {
Serial.begin(9600);
i=0;
}

void loop() {
val = analogRead(fotoresistenza);  
    
 if(abs(i-val)>2){
Serial.println(val, DEC);
Serial.println(i, DEC);
i = val;
}
else
i = val;

}

gpb01

#3
Mar 30, 2017, 06:19 pm Last Edit: Mar 30, 2017, 06:19 pm by gpb01
... togli l'else (... perché se il valore NON è cambiato NON devi aggiornare il vecchio valore) e, più o meno, dovrebbe andare ... provalo e vedi un po' :)

Un consiglio, nell'IDE ... Tools -> Auto Format ... ti sistema il codice con le giuste indentature rendendolo molto più leggibile.

Guglielmo

Search is Your friend ... or I am Your enemy !

Go Up