Tutto fallito

=( ecco il mio codice per la casa domotica che dovrò presentare a fine anno come esame maturita... singolarmente i blocchi funzionano.. mettendo lo schetch tutt' insieme non mi da risposta di nessun tipo =( sono disperato ecco codice

//SENSORI ANALOGICI
int fotoresistenza = A1;
int barriera=A3;
int gas=A2;
int lm35=A0;
float temperatura;




//ATTUATORI DIGITALI
int led1=1;//CUCINA
int led2=2;//SOGGIORNO
int led3=3;//CAMERALETTO
int led4=4;//BAGNO
int led5=5;//CORRIDOIO
int led6=6;//PALI
int led7=7;//PALI
int attiva=13;//ATTIVAZIONE ANTIFURTO
int rosso=10;//LED STATO ROSSO
int verde=11;//LED STATO VERDE
int blu=12; //LED STATO BLU
int buzzer=9; //SIRENA
int ventola=8;//VENTOLA



//LIBRERIA CONTROLLO REMOTO 
#include <IRremote.h> 
int receiver =0; 
IRrecv irrecv(receiver); 
decode_results results;



 
void setup() {
  Serial.begin(9600);
  irrecv.enableIRIn(); 
 pinMode (led1,OUTPUT);
 pinMode(led2, OUTPUT);
 pinMode( fotoresistenza, INPUT);
 pinMode (led3,OUTPUT);
 pinMode (led4,OUTPUT);
 pinMode (led5,OUTPUT);
 pinMode (led6,OUTPUT);
 pinMode (led7,OUTPUT);
 pinMode (barriera,INPUT);
 pinMode (attiva,OUTPUT);
 pinMode (rosso,OUTPUT);
 pinMode (verde,OUTPUT);
 pinMode (blu, OUTPUT);
 pinMode (buzzer,OUTPUT);
 pinMode (ventola,OUTPUT);
 pinMode (gas,INPUT);
 pinMode (lm35,INPUT);
 }
 
 
 
 
 
void loop() {
  
  
int Val= analogRead(fotoresistenza);  



//VALORE ACCENZIONE PALI
if (Val>=600) {
   digitalWrite(led6,LOW);
   digitalWrite (led7,LOW);

 }

else  {
  digitalWrite(led6,HIGH);
  digitalWrite (led7,HIGH);
} 


  //STAMPA SERIALE CODICI TELECOMANDO 
  if (irrecv.decode(&results)) 
  {
    Serial.println(results.value, HEX); 
    irrecv.resume();
  }
  
  
 
 
 //CONTROLLO LUCI CASA CON TELECOMANDO
 
  if ( results.value == 0xFF30CF ){ //TASTO1
    digitalWrite(led1, HIGH);   
  } 
 if ( results.value == 0xFF10EF){ //TASTO4
    digitalWrite(led1, LOW);   
  }
if ( results.value == 0xFF18E7 ){ //TASTO2
    digitalWrite(led2, HIGH);   
  } 
 if ( results.value == 0xFF38C7){ //TASTO5
    digitalWrite(led2, LOW);   
  }
  
  if ( results.value == 0xFF7A85){ //TASTO3
    digitalWrite(led3, HIGH);   
  } 
 if ( results.value == 0xFF5AA5){ //TASTO6
    digitalWrite(led3, LOW);   
}

if ( results.value == 0xFF42BD){ //TASTO7
    digitalWrite(led4, HIGH);   
  } 
 if ( results.value == 0xFF4AB5){ //TASTO8
    digitalWrite(led4, LOW);   
}

if ( results.value == 0xFF52AD){ //TASTO9
    digitalWrite(led5, HIGH);   
  } 
 if ( results.value == 0xFF6897){ //TASTO0
    digitalWrite(led5, LOW);   
}


//SISTEMA ALLARME 

if ( results.value == 0xFFE21D){
  digitalWrite (attiva,HIGH);
  digitalWrite (buzzer,LOW);
  digitalWrite (verde,LOW);
   digitalWrite (rosso,HIGH);
   digitalWrite (buzzer,HIGH);
  delay(1000);
  digitalWrite (buzzer,LOW);
  delay (1000);
  digitalWrite (rosso,LOW);

 }

 if (Val==0){
   digitalWrite (buzzer,LOW);
   digitalWrite (blu,LOW);
   digitalWrite (rosso,LOW);
   digitalWrite (verde,LOW);
  
   }
   

if (Val<800 && Val>10){
 tone (buzzer,2000);
digitalWrite (rosso,HIGH);
digitalWrite (blu,LOW);
delay(500);
tone (buzzer,1000);
digitalWrite (rosso,LOW);
digitalWrite (blu, HIGH);
delay(500);
digitalWrite(rosso, LOW);
  noTone (buzzer);
  digitalWrite (blu,LOW);
  
}


 if ( results.value == 0xFFA25D){ //tasto 4 sul telecomando
digitalWrite (attiva,LOW);
}




// ALLARME FUGHE GAS CUCINA
int gasvalue=analogRead(A2); 
if (gasvalue>415){
  digitalWrite (verde,HIGH);
  delay(500);
  digitalWrite (buzzer,HIGH);
  delay(500);
  digitalWrite (buzzer,LOW);
  }
  else {
  digitalWrite(verde,LOW);
  digitalWrite (buzzer,LOW);
}


temperatura=analogRead (A0);
temperatura=(5 * temperatura * 100/1024);
Serial.print ("Gradi centigradi");
delay (2000);
Serial.println (temperatura);



if (temperatura>25.00){
  
digitalWrite (ventola,HIGH);
}

else {

digitalWrite (ventola,LOW);
}


}

Dico una cavolata molto probabilmente, vedendo il codice non mi pare sia tutto sbagliato, quindi se dici che non va proprio nulla non credo sia problema di codice.

Piuttosto farei una prova, elimina tutta quella roba dal loop e crea delle funzioni apposite per ogni cosa che ti serve, faccio un esempio:

void loop(){
if (telecomando == x){
  funzione_1();
}
... altri if...
} //chiudi loop

void funzione_1(){
digitalWrite(pin, HIGH);
delay(1000);
digitalWrite(pinLow);
}

Nel tuo codice la parte dinamica ci mettera 10 millis al massimo poichè di fatto tutti gli if sono falsi e non deve fare nulla, mentre le parti statiche durano diversi secondi (tutti i delay).
Suppongo che il tuo codice non sia mai alla ricerca dell'IR quando tu premi il comando.

Al momento è l'unica cosa che mi viene in mente.

Nemmeno questa soluzione va bene perchè purtroppo il giorno che dovrai usare un relay per dieci minuti vorrebbe dire non usare Arduino in quel periodo, però intanto vedi se il codice funziona e se il problema sono proprio i delay.

Una cosa che farei nel passo successivo per eliminare il problema che ti ho detto è magari quello di usare Arduino solo come centralina (o magari nemmeno per quello) e usare dei Micro come l'AtTiny85/45/2313 che si programmano allo stesso modo per gestire tutte le periferiche e questi ricevono le info su cosa fare da arduino collegato via I2C

Non puoi usare pin 0 per IRremote e usare la seriale.
delay (2000); devi anche eliminare e sostituire con millis()

Usa i 2 pin analogici rimanrenti com pin digitali. Cosí non devi usare pin 0.
Usa pin 3 come pin di IRremote.

Ciao Uwe

//VALORE ACCENZIONE PALI

Io non ti ammetterei all'Esame di Maturità solo per questo... :smiley:

BaBBuino:
//VALORE ACCENZIONE PALI

Io non ti ammetterei all'Esame di Maturità solo per questo... :smiley:

Per fortuna allora che non sei nella commissione. :wink: :wink: :wink:
Ciao Uwe

uwe mi daresti un consiglio su come usare la funzione millis??? non so proprio come utilizzarla a me è sconosciuta :fearful: esempino???

Nell'IDE cerca tra gli esempi: "Blink whitout delay"
L'avremo consigliato nel forum tipo 8356 volte. :grin: :grin:
...57 adesso! :stuck_out_tongue_closed_eyes:

ho dato un occhiata ma non so come farlo nel mio codice.... =(

a un altra cosa un led sul pin 1 non da problemi??? va regolare???

deagon:
a un altra cosa un led sul pin 1 non da problemi??? va regolare???

Se limiti la corrente con una resistenza non da problemi.

deagon:
ho dato un occhiata ma non so come farlo nel mio codice....

Con Millis controlli se la differenza tra tempo registrato e tempo attuale (lo ricevi con la funziona millis()) é maggiore del tempo d' intervallo. Se si fai qualcosa; se non ritorni nel ciclo e ricontrolli il tempo.

Ciao Uwe

Altra cosa, questo pezzo di codice non va bene:

temperatura=analogRead (A0);
temperatura=(5 * temperatura * 100/1024);

temperatura è di tipo float ma tu metti degli interi nei calcoli ed il compilatore fa il casting automatico agli interi, perdendo in precisione; inoltre fai un passaggio inutile perché puoi usare direttamente il dato letto con analogRead all'interno della formula:

temperatura=(5.0 * float(analogRead (A0)) * 100.0/1024.0);

Nota i numeri con il .0 dopo i numeri, che indicano appunto al compilatore di usare i float nei calcoli.

per le resistenze ai led alta luminosità di 5mm ho calcolato con la legge di ohm in quanto questi led la corrente max è 20mA...
se nn erro il calcolo è: R= 5V/20mA=250 OHM ....... io ho utilizzato resistenze da 330 OHM non penso che debbano dare problemi.... grazie a tutti mi state dando una gran mano!! =(

deagon:
ho dato un occhiata ma non so come farlo nel mio codice.... =(

Sicuro. Ma perchè ti conviene prima imparare quella tecnica con esempi semplici, non cercare di mettere quella tecnica nel tuo codice complesso. Secondo me prima devi capirla in sketch demo più semplici. E' un suggerimento.

deagon:
per le resistenze ai led alta luminosità di 5mm ho calcolato con la legge di ohm in quanto questi led la corrente max è 20mA...
se nn erro il calcolo è: R= 5V/20mA=250 OHM ....... io ho utilizzato resistenze da 330 OHM non penso che debbano dare problemi.... grazie a tutti mi state dando una gran mano!! =(

Il calcolo è:
(tensione di alimentazione - caduta di tensione del led) / corrente assorbita = resistenza da usare