Sensori ad impulsi

Cerco soltanto una spiegazione a ciò che ho fatto:

Ho costruito una centralina alla mia tenda per il sole.
La centralina lavora con due sensori, uno per il sole e uno per il vento.
Quello per il sole l'ho letto con un semplice "analogread()" ma quello per il vento, essendo un sensore ad impulsi ho messo "pulsein".

il codice che ho utilizzato è questo:

unsigned long valore_vento;
int entrata_vento = 7;
int valore_luce;
int avanti = 3;
int indietro = 11;

void setup(){
  pinMode(avanti, OUTPUT);
  pinMode(indietro, OUTPUT);
  pinMode(entrata_vento, INPUT);
  Serial.begin(9600);
}
void serranda_avanti(){
  digitalWrite(avanti, HIGH);
  digitalWrite(indietro, LOW);
}
void serranda_indietro(){
  digitalWrite(avanti, LOW);
  digitalWrite(indietro, HIGH);
}
void loop(){
  valore_luce = analogRead(A0);
  valore_vento = pulseIn(entrata_vento, LOW);
  Serial.print("luce:");
  Serial.print(valore_luce);
  Serial.print(" vento:");
  Serial.println(valore_vento);
  
  if (valore_luce > 350) {
    serranda_avanti();
    if ((valore_vento < 100000) && (valore_vento >10)){
      serranda_indietro();
      delay(15000);
    }
  }
  else {
    serranda_indietro();
  }
  
}

ho lasciato i Serial.print e mi sono accorto che l'arduino mi dava come risposta 0, quando il sensore del vento stava fermo ,quindi nella if ho messo questo controllo "if ((valore_vento < 100000) && (valore_vento >10))".
La seconda codizione ovvero "(valore_vento >10)" l'ho messa altriementi se non gira il sensore mi da 0 quindi lo riconosce come vento.

mi potete dire perchè fa cosi il sensore?

PS: Se sono stato poco chiaro ditemi pure :slight_smile:

Il pulseIn() misura la lunghezza di tempo durante il quale un pin é HIGH oppure LOW. Se non rileva nesun cambiamento del pin termina dopo un tempo prestabilito (di default 1 secondo oppure dato come parametro aggiuntivo) e da come valore zero.
http://arduino.cc/en/Reference/PulseIn
Attenzione pulseIn() blocca l'esecuzione del programma come per esempio anche delay().
Ciao Uwe

uwefed:
Il pulseIn() misura la lunghezza di tempo durante il qualr un pin é HIGH. Se non rileva nesun cambiamento del pin termina dopo un tempo prestabilito (di default 1 secondo oppure dato come parametro aggiuntivo) e da come valore zero.
http://arduino.cc/en/Reference/PulseIn
Attenzione pulseIn() blocca l'esecuzione del programma come per esempio anche delay().
Ciao Uwe

perfetto, sei stato chiarissimo :slight_smile:

adesso che ho capito come funziona tutto, se volete posso pubblicare il mio progetto.

Dove lo metto sul playground, qui sul forum, o su il mio sito XD

PS: se non siete interessati o pensate che non vi torni utile non lo pubblico

pubblicalo, se vuoi, in questo momento sul forum.
Ho preso l'impegno di organizzare il playground italiano ma non sono ancora arrivato a un inizio.
Quando sará organizzato puoi metterlo anche sul playground italiano.
Ciao Uwe