Ciao, ho inserito nel mio sketch un altro sketch trovato sul web che mi dia la possibilità di controllare la velocità del vento. Quello realizzato da me mi controlla la luminosità gestendo varie condizioni e scrivendole sul monitor seriale. Ora volevo inserire uno sketch per il controllo del vento ma i dati mi arrivano sporadici. Perchè ?
Questo è il programma completo, le due parti racchiuse tra gli asterischi sono lo sketch per il controllo vento che ho inserito.
int alzadx = 2; // imposta il pin 2 alza tenda destra
int abbassadx = 3; // imposta il pin 3 abbassa tenda destra
int alzasx = 4; // imposta il pin 4 alza tenda sinistra
int abbassasx = 5; // imposta il pin 5 abbassa tenda sinistra
boolean statoingresso = false;
boolean statocucina = false;
boolean statopioggia = false;
const int sensorValueingresso = 100; //imposta il valore del sensore 970
const int sensorValuecucina = 108; // 1000
//const int sensorValuepioggia = 600;
String readString;
//********************************************************************************************
//BLOCCO CONTROLLO VELOCITA' DEL VENTO
const float Pi = 3.141593; // Pigreco
const float raggio = 0.06; // raggio dell'anemometro in metri
const int reedPin = 2; // pin assegnato al contatto reed
int Statoreed = 0; // variabile per la lettura del contatto
int Statoreed_old = 0; // variabile per evitare doppio conteggio
int Conteggio = 0;// variabile che contiene il conteggio delle pulsazioni
unsigned long int TempoStart = 0; // memorizza i millisecondi dalla prima pulsazione conteggiata
unsigned long int Tempo = 0; // per conteggiare il tempo trascorso dalla prma pulsazione
unsigned long int TempoMax = 2000;// numero di millisecondi (2 seondi)
//per azzerare il conteggio e calcolare la Velocità
// così non si conteggiano brevi folate di vento
//********************************************************************************************
void setup() {
Serial.begin(9600);
pinMode(reedPin, INPUT);// mette in ascolto del reed il pin 2 pinMode(alzadx, OUTPUT);
pinMode(abbassadx, OUTPUT);
digitalWrite(alzadx, HIGH);
digitalWrite(abbassadx, HIGH);
pinMode(alzasx, OUTPUT);
pinMode(abbassasx, OUTPUT);
digitalWrite(alzasx, HIGH);
digitalWrite(abbassasx, HIGH);
}
void loop() {
//CONTROLLO VELOCITA'
//***************************************************************************************
Statoreed = digitalRead(reedPin); // legge il contatto reed
if (Statoreed != Statoreed_old){// si verifica se è cambiato
Statoreed_old = Statoreed; // se SI si aggiorna lo stato
if (Statoreed == HIGH){ // si controlla SE è alto ( passaggio magnete)
if (Conteggio == 0){ TempoStart = millis();} // se E' il primo passaggio si memorizza il tempo di partenza
Conteggio = Conteggio + 1; // si aggiorna il contatore
Tempo = ( millis() - TempoStart); // si conteggia il tempo trascorso dallo start conteggio
if (Tempo >= TempoMax) { // se il tempo trascorso è maggiore o uguale al tempo impostato si eseguono i calcoli e la stampa della velocità
float deltaTempo = ( Tempo/1000.0); // si trasforma in secondi
float Kmora = (3.6*Conteggio*Pi*raggio)/deltaTempo; //formula per il calcolo della velocità in Km/h
Serial.print("Velocità Km/h = ");
Serial.println(Kmora);
Conteggio = 0; // azzeriamo il conteggio per nuova lettura
delay(500);// attesa per altra lettura
}}}
//******************************************************************************************************
// CONTROLLA SE PIOVE ALZA TUTTE LE TENDE
/* int sensorepioggia = analogRead (A2);
Serial.println(sensorepioggia);
delay(1000);
if (sensorepioggia < sensorValuepioggia) {
if (statopioggia == false) {
delay(4000);
Serial.println("C987789");
delay(1000);
digitalWrite(alzadx, LOW);
digitalWrite(alzasx, LOW);
delay(40000);
digitalWrite(alzadx, HIGH);
digitalWrite(alzasx, HIGH);
statopioggia = true;
delay(4000);
}
}
if (sensorepioggia > sensorValuepioggia){
statopioggia = false;
}*/
// CONTROLLA LA LUMINOSITà ESTERNA SE è NOTTE ALZA LE TENDE INGRESSO
int sensoringresso = analogRead(A4); // A0
Serial.println(sensoringresso);
delay(4000);
if (sensoringresso < sensorValueingresso) {
if (statoingresso == false) {
delay(1000);
Serial.println("987789");
delay(1000);
digitalWrite(alzadx, LOW);
digitalWrite(alzasx, LOW);
delay(40000);//40000
digitalWrite(alzadx, HIGH);
digitalWrite(alzasx, HIGH);
statoingresso = true;
delay(4000);
}
}
if (sensoringresso > sensorValueingresso){
statoingresso = false;
}
// CONTROLLA LA LUMINOSITà ESTERNA SE è NOTTE ALZA LE TENDE CUCINA
if (sensoringresso < sensorValuecucina) {
if (statocucina == false) {
delay(1000);
Serial.println("987789");// questo numero è inviato al tablet in seriale che lo idendifica mandando il
// segnale alle tende in cucina di alzare
delay(1000);
statocucina = true;
delay(4000);
}
}
if (sensoringresso > sensorValuecucina){
statocucina = false;
}
while (Serial.available()) {
delay(3);
char c = Serial.read();
readString += c;
}
if (readString.length() >0) {
Serial.println(readString);
if (readString == "ALZATENDAINGRESSO")
{
digitalWrite(alzadx, LOW);
digitalWrite(alzasx, LOW);
delay(40000);//40000
digitalWrite(alzadx, HIGH);
digitalWrite(alzasx, HIGH);
}
// controlla la condizione se si possono abbassare le tende
if (readString == "ABBASSATENDAINGRESSO" && sensoringresso <= 990 ){//990 è il controllo che se le due condizioni sono vere
// abbassa le tende
delay(2000);
Serial.println("118");// codice in cui il tablet avvisa che le tende non si possono abbassare per scarsa luminosità
// esterna
}
if (readString == "ABBASSATENDAINGRESSO" && sensoringresso >= 995){//995
digitalWrite(abbassadx, LOW);
digitalWrite(abbassasx, LOW);
delay(40000);//40000
digitalWrite(abbassadx, HIGH);
digitalWrite(abbassasx, HIGH);
}
if (readString == "ALZATENDATUTTO"){
Serial.println("987789");
delay(2000);
digitalWrite(alzadx, LOW);
digitalWrite(alzasx, LOW);
delay(40000); //40000
digitalWrite(alzadx, HIGH);
digitalWrite(alzasx, HIGH);
}
if (readString == "ABBASSATENDATUTTO" && sensoringresso >= 1000 ){//1000
Serial.println("997997");
delay(2000);
digitalWrite(abbassadx, LOW);
digitalWrite(abbassasx, LOW);
delay(40000);//40000
digitalWrite(abbassadx, HIGH);
digitalWrite(abbassasx, HIGH);
}
if (readString == "ABBASSATENDATUTTO" && sensoringresso <= 1000 )//1000
{
Serial.println("119");
}
readString="";
}
}