Pages: 1 [2] 3   Go Down
Author Topic: è possibile fare questo collegamento?  (Read 1595 times)
0 Members and 1 Guest are viewing this topic.
Catania
Offline Offline
Sr. Member
****
Karma: 0
Posts: 346
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
invece questa stampa sempre e comunque

(digitalRead( 8 ) == HIGH && digitalRead(9); == HIGH);
 Serial.println (" 15) segnali dei 2 circolatori  accesi ");

Forse volevi scrivere:
Code:
if (digitalRead( 8 ) == HIGH && digitalRead(9) == HIGH) {
 Serial.println (" 15) segnali dei 2 circolatori  accesi ");
}
Logged

Genova
Offline Offline
Faraday Member
**
Karma: 38
Posts: 3240
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

puoi anche omettere le graffe nell'if se esegui una sola istruzione
ciao
Logged

no comment

Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
volevo chiedere una curiosita,  
perche questa "riga" stampa (correttamente)  solo  se 10 è HIGH

if (digitalRead(10) == HIGH) {allarme=1;
   Serial.println (" 9)  ALLARME ATTIVO, TEMPERATURA  SERBATOIO 72 GRADI   ");}

invece questa stampa sempre e comunque

(digitalRead( 8 ) == HIGH && digitalRead(9); == HIGH);
 Serial.println (" 15) segnali dei 2 circolatori  accesi ");
                                                           
(digitalRead( 8 ) == HIGH && digitalRead(9); <<< questo punto e virgola? ..... == HIGH);  
 Serial.println (" 15) segnali dei 2 circolatori  accesi ");
ok grazie mille  levando il punto e virgola stampa "giusto"
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Catania
Offline Offline
Sr. Member
****
Karma: 0
Posts: 346
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
invece questa stampa sempre e comunque

(digitalRead( 8 ) == HIGH && digitalRead(9); == HIGH);
 Serial.println (" 15) segnali dei 2 circolatori  accesi ");
                                                           
(digitalRead( 8 ) == HIGH && digitalRead(9); <<< questo punto e virgola? ..... == HIGH);  
 Serial.println (" 15) segnali dei 2 circolatori  accesi ");

ok grazie mille  levando il punto e virgola stampa "giusto"

Scusa GINGARDU una curiosità. Solo levando "quel" punto e virgola il programma funziona bene?
Cioè senza che la riga sia precedura dall'istruzione if e con il ";" alla fine di essa?
Quote
(digitalRead( 8 ) == HIGH && digitalRead(9) == HIGH);

Non metto in dubbio che stampi il messaggio, ma così viene a mancare la logica condizionale che dà il senso alla stampa stessa. Ovvero se vuoi che quel messaggio sia visualizzato solo quando gli ingressi 8 e 9 sono HIGH, devi cmq inserire la riga con il println all'interno di una istruzione condizionale if (e che finisca senza il ";"). Al limite puoi solo eliminare le parentesi graffe (anche se io consiglio di inserirle sempre a coloro che non hanno molta esperienza con la programmazione, perchè possono portare a errori logici).
« Last Edit: June 16, 2012, 02:26:01 am by dalubar » Logged

Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
invece questa stampa sempre e comunque

(digitalRead( 8 ) == HIGH && digitalRead(9); == HIGH);
 Serial.println (" 15) segnali dei 2 circolatori  accesi ");
                                                           
(digitalRead( 8 ) == HIGH && digitalRead(9); <<< questo punto e virgola? ..... == HIGH);  
 Serial.println (" 15) segnali dei 2 circolatori  accesi ");

ok grazie mille  levando il punto e virgola stampa "giusto"

Scusa GINGARDU una curiosità. Solo levando "quel" punto e virgola il programma funziona bene?
Cioè senza che la riga sia precedura dall'istruzione if e con il ";" alla fine di essa?
Quote
(digitalRead( 8 ) == HIGH && digitalRead(9) == HIGH);

Non metto in dubbio che stampi il messaggio, ma così viene a mancare la logica condizionale che dà il senso alla stampa stessa. Ovvero se vuoi che quel messaggio sia visualizzato solo quando gli ingressi 8 e 9 sono HIGH, devi cmq inserire la riga con il println all'interno di una istruzione condizionale if (e che finisca senza il ";"). Al limite puoi solo eliminare le parentesi graffe (anche se io consiglio di inserirle sempre a coloro che non hanno molta esperienza con la programmazione, perchè possono portare a errori logici).


si levando il punto e virgola stampa "giusto" come se   if fosse implicito,
se lascio il punto e virgola stampa sempre anche se aggiungo parentesi graffe,

invece nella riga 
if (digitalRead(10) == HIGH) {allarme=1;
   Serial.println (" 9)  ALLARME ATTIVO, TEMPERATURA  SERBATOIO 72 GRADI   ");}

 anche se c'è il punto e virgola stampa giusto lo stesso  a patto che le parentesi graffa vengono lasciate al loro posto
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Catania
Offline Offline
Sr. Member
****
Karma: 0
Posts: 346
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Credo che finchè si farà riferimento solo a spezzoni di codice non si potrà fare chiarezza su questo punto. Conviene postare tutto il codice, o almeno il blocco che riguarda questo punto.
Per quello che vedo io sulla base di ciò che è stato postato non ci sono if impliciti, ma solo errori logici.

Per chiarezza riassumo le varie possibilità:
Code:
(digitalRead( 8 ) == HIGH && digitalRead(9); == HIGH);
 Serial.println (" 15) segnali dei 2 circolatori  accesi ");
Pezzo di codice originale. Errore di sintassi: non va' il ";" dopo digital(9);

Code:
(digitalRead( 8 ) == HIGH && digitalRead(9) == HIGH);
 Serial.println (" 15) segnali dei 2 circolatori  accesi ");
Sintatticamente corretto (si tratta di una espressione formata da due dati logici e un connettivo AND) ma funzionalmente errato. La stampa avviene sempre. Nessun if implicito.

Code:
(digitalRead( 8 ) == HIGH && digitalRead(9) == HIGH)
 Serial.println (" 15) segnali dei 2 circolatori  accesi ");
Errore di sintassi: manca il ";" alla fine della prima riga.

La sequenza corretta sarebbe:
Code:
if (digitalRead( 8 ) == HIGH && digitalRead(9) == HIGH) {
 Serial.println (" 15) segnali dei 2 circolatori  accesi ");
}
(con o senza parentesi graffe...a piacere tuo).

Quote
invece nella riga
if (digitalRead(10) == HIGH) {allarme=1;
   Serial.println (" 9)  ALLARME ATTIVO, TEMPERATURA  SERBATOIO 72 GRADI   ");}

 anche se c'è il punto e virgola stampa giusto lo stesso  a patto che le parentesi graffa vengono lasciate al loro posto
Se il punto e virgola al quale credo fai riferimento è quello alla fine di allarme=1;, si tratta della normale terminazione di ogni istruzione scritta in C (e altri linguaggi) quindi ci dev'essere. Dato, però, che l'if esegue due istruzioni (assegnamento e stampa) ecco che le parentesi graffe sono obbligatorie e non possono essere levate, ecco perchè devi lasciarle al loro posto.
Una corretta indentazione del codice può aiutare a capire meglio il senso:
Code:
if (digitalRead(10) == HIGH) {
    allarme=1;
    Serial.println (" 9)  ALLARME ATTIVO, TEMPERATURA  SERBATOIO 72 GRADI   ");
}

Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sì, vero. Serve tutto il codice.
Logged


Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sì, vero. Serve tutto il codice.

ecco il codice e tutto l' ambaradan  se notate " stranezze " ditemelo,
Code:
int liv_acqua; // variabile mancanza livello acqua corretto
int temp_dif; // variabile differenza temperatura tra pannelli e serbatoio
int tempmaxpan; // variabile temperatura pannello maggiore a 102°
int tempmaxser; // variabile temperatura serbatoio maggiore di 50°
int fotores; // variabile fotoresistenza
int temperatura_1; // variabile per stampare il valore di temperatura nel monitor seriale
int temperatura_2;// variabile per stampare il valore di temperatura nel monitor seriale
int allarme;  // variabile per  il valore di allarme pin A4


void setup () {  
  Serial.begin(9600);  
pinMode (5, OUTPUT); //  LED LIVELLO INSUFFICENTE ACQUA SERBATOIO
pinMode (6, OUTPUT); //  LED FOTORESISTENZA GIORNO NOTTE  (si accende se manca il sole)
pinMode (7, OUTPUT); // ATTIVA ELETTROVALVOLA BYPASS CALDAIA A TEMPERATURA SERBATOIO >50° facoltativo
pinMode (8, OUTPUT); // ATTIVAZIONE CIRCOLATORE ACQUA UNO
pinMode (9, OUTPUT); // ATTIVAZIONE CIRCOLATORE ACQUA DUE
pinMode (10, OUTPUT); // LED  DI SOVRATEMPERATURA SERBATOIO SOPRA I 72°
pinMode (11, OUTPUT); // LED  DI SOVRATEMPERATURA PANNELLO SOPRA I 102°
pinMode (13, OUTPUT); // se non c'è si accende il led dell'arduino al pin 13
pinMode (A0, INPUT); // INPUT TERMOMETRO PANNELLI SONDA LM35  PIN 23
pinMode (A1, INPUT); // INPUT TERMOMETRO SERBATOIO SONDA LM35   PIN 24
pinMode (A2, INPUT); // INPUT FOTORESISTENZA  CHE SEGNALA GIORNO/NOTTE  PIN 25
pinMode (A3, INPUT); // INGRESSO SENSORE LIVELLO INSUFFICENTE ACQUA SERBATOIO  PIN 26
pinMode (A4, INPUT); // INGRESSO  POTENZIOMETRO PIN 27 (ANCORA DA DECIDERE COSA REGOLARE)


}

void loop ()
 {
    
 digitalWrite (7, LOW);
  delay (10);
  temperatura_1  =(5.0 * analogRead(A1) * 100.0) / 1024; //  legge la temperatura sull'ingresso A1  con LM35
  delay (210);
  Serial.println(" -                                                                                                                ");
  Serial.println(" -------------------------------LE SCRITTE IN MAIUSCOLO INDICANO LE CAUSE DEL FERMO IMPIANTO-----------------------------");
  Serial.println(" -                                                                                                                ");  
  Serial.print(" 1)temperatura  acqua ");  
  Serial.println(temperatura_1, DEC);//  stampa la temperatura
  
   delay (10);
  
  temperatura_2 = (5.0 * analogRead(A0) * 100.0) / 1024;   //  legge  la temperatura  con LM35
 Serial.print(" 2)temperatura pannelli ");
  Serial.println(temperatura_2, DEC);      //  stampa la temperatura
  
   delay (10);
  
  liv_acqua=analogRead(A3);
   { if (liv_acqua < 300) digitalWrite (5, HIGH); }
  
  delay (10);
  
fotores=analogRead(A2);
   digitalWrite (6, LOW); // porta il pin segnale della fotoresistenza a livello basso
    delay (10);
    
    Serial.print(" 3) valore fotoresistenza ");
  Serial.println(fotores, DEC);
   if (fotores < 100  )digitalWrite (6, HIGH);  // comando fotoresistenza soleggiato
   if (fotores > 400   )digitalWrite (6, HIGH);  // comando fotoresistenza soleggiato
  
   if (fotores < 100)Serial.println
  (" 4) CAVO FOTORESISTENZA DANNEGGIATO (verificare il collegamento) ");
  delay (10);//  attesa di 10 millisecondi
  
  if (fotores < 300)Serial.println
  (" 5) CAVO FOTORESISTENZA SCOLLEGATO O ROTTO 2 (verificare il collegamento) ");
  delay (10);//  attesa di 10 millisecondi
  
   tempmaxpan=(5.0 * analogRead(A0) * 100.0) / 1024;
   if (tempmaxpan < 102)digitalWrite (11, HIGH); // comando:  1) fermo impianto per sovratemperatura pannelli 2) led di segnalazione
   else {digitalWrite (11, LOW);}
      delay (10);
  tempmaxser=(5.0 * analogRead(A1) * 100.0) / 1024;
  if(tempmaxser < 72) digitalWrite (10, HIGH); // temperatura massima acqua serbatoio raggiunta 72 °
  else {digitalWrite (10, LOW);};
 delay (10);
  
  if(tempmaxser > 50)digitalWrite (7, HIGH); //  comando:  1) per evitare che l'acqua già troppo calda circoli nello scaldinono  a gas
                                            
 
   if(tempmaxser > 50) Serial.println (" 6) elettrovalvole antiricircolo attivate per temperatura acqua sufficiente");    
  delay (10);
  
   allarme=0;
   if (digitalRead(5) == HIGH) {allarme=1;
   Serial.println (" 7) ALLARME ATTIVO, ACQUA SERBATOIO INSUFFICENTE    ");}
      delay (10);
  
    if (digitalRead(6) == HIGH) {allarme=1;
   Serial.println (" 8) ALLARME ATTIVO, FOTORESISTENZA RILEVA INSUFFICIENTE SOLE    ");}
      delay (10);
  
    if (digitalRead(10) == HIGH) {allarme=1;
   Serial.println (" 9)  ALLARME ATTIVO, TEMPERATURA  SERBATOIO 72 GRADI   ");}
      delay (10);
  
    if (digitalRead(11) == HIGH) {allarme=1;
   Serial.println (" 10) ALLARME ATTIVO,  TEMPERATURA PANNELLI troppo elevata > 102 GRADI    ");}
      delay (10);
  
temp_dif=(tempmaxpan)-(tempmaxser); // sottrzione tra temperatura serbatoio e temperatura pannelli messi tra parentesi e in ordine
   Serial.print (" 11) differenza temperatura tra pannello e serbatoio ");
   Serial.println (temp_dif); // stampa la temperatura di differenza tra pannelli e serbatoio
  
   if (temp_dif < 2 && allarme < 1 ) { digitalWrite (8, HIGH); digitalWrite(9, HIGH);
   // questa parte fa partire i cicolatori se non ci sono allarmi che portano la variabile allarme a 1 e se la
   //temperatura pannelli e superiore  al serbatoio
   if (digitalRead(8) == HIGH && digitalRead(9) == HIGH) Serial.println (" 12) segnali dei 2 circolatori  accesi "); }
  
   //(digitalRead(8) == HIGH && digitalRead(9); == HIGH) Serial.println (" 15) segnali dei 2 circolatori  accesi ");
   // RIGA CON IL PUNTO E VIRGOLA FA STAMPARE SEMPRE LA SCRITTA  segnali dei 2 circolatori  accesi
  
    if (temp_dif > 2) Serial.println (" 13) LA TEMPERATURA DEI PANNELLI NON E' SUFFICIENTE ");
  
   delay (6000);  //tempo in millisecondi per spegnere un circolatore  (valore standard 15 secondi)
  
    digitalWrite (8, LOW);  //spegne un circolatore
     if (digitalRead(8) == LOW && digitalRead(9) == HIGH) Serial.println (" 14) segnale circolatore 1 acceso, segnale circolatore 2 spento");
    
    delay (3000);  //tempo in millisecondi per spegnere il secondo  circolatore  (valore standerd 5 minuti)
    
    digitalWrite (9, LOW); //spegne un circolatore
    
    Serial.println (" 15) segnali circolatori spenti");
    
    delay (3000); //tempo di standby   per far recuperare calore sufficiente a i pannelli  nel funzionamento con il sole
  
  }
 

il funzionamento di questa centralina gestisce l'invio dell'acqua a dei pannelli solari per acqua calda sanitaria   (pannelli a svuotamento )
il funzionamento e abbastanza semplice se è tutto ok partono i due circolatori per riempire i pannelli vuoti e più caldi di 20 gradi dell'acqua del serbatoio di accumulo dove e immessa una serpentina in cui passa l'acqua fredda da scaldare,
appena i pannelli sono riempiti 10-15 secondi un circolatore e sufficiente per far circolare l'acqua per 5-6 minuti,
il ciclo si ripete in continuazione
gli allarmi che stoppano tutto sono,
1)pannelli troppo caldi (succede d'estate o se va via la corrente)
2) mancanza d'acqua nel serbatoio)
3) pannelli poco caldi
4) temperatura acqua serbatoio troppo calda
Lo stampato e stato realizzato con  
 http://www.iprocam.com/download/setup-bigci32.exe
(messo anche il file con estensione cim)
Come potete vedere dalle foto il circuito e abbastanza semplice
In alto a sinistra  c’è l’ingresso  dell’alimentazione  con ponte di diodi elettrolitico e 7805
Sulla desta ci sono i relè a 5 volt con pilotaggio a transistor,
l’atmega e il quarzo  sulla sinistra ci sono gli ingressi dei sensori  lm35  foto-resistenza  ecc

c'e anche un potenziometro che per il momento devo acora decidere a cosa assegnarlo

il codice cosi com’è  fa quello che  gli ho detto di fare  
ovviamente ci sono alcuni  parametri che ho messo diversi apposta per far in modo che  il programma gira su arduino uno senza avere i sensori collegati,
cosi come è  sul mio arduino uno gira
alla fine il codice completo sarebbe duplicato nella duplicazione invertite la sequenza dei circolatori per evitare che sempre uno giri 5 minuti e l’altro 10 secondi


* PISTE.JPG (81.48 KB, 523x523 - viewed 7 times.)

* PIS+COMP.JPG (94.46 KB, 523x521 - viewed 8 times.)

* COMPONENTIw.jpg (125.86 KB, 524x522 - viewed 10 times.)
* SOLAR333.CIM (103.71 KB - downloaded 2 times.)
« Last Edit: June 16, 2012, 05:43:10 am by GINGARDU » Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sostituendo la riga con quella errata a me non compila. Com'è possibile che a te non desse errori?
Logged


Catania
Offline Offline
Sr. Member
****
Karma: 0
Posts: 346
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tra l'altro, indentando questo pezzo di codice:
Code:
if (temp_dif < 2 && allarme < 1 ) { digitalWrite (8, HIGH); digitalWrite(9, HIGH);
   // questa parte fa partire i cicolatori se non ci sono allarmi che portano la variabile allarme a 1 e se la
   //temperatura pannelli e superiore  al serbatoio
   if (digitalRead(8) == HIGH && digitalRead(9) == HIGH) Serial.println (" 12) segnali dei 2 circolatori  accesi "); }
  
   //(digitalRead(8) == HIGH && digitalRead(9); == HIGH) Serial.println (" 15) segnali dei 2 circolatori  accesi ");
   // RIGA CON IL PUNTO E VIRGOLA FA STAMPARE SEMPRE LA SCRITTA  segnali dei 2 circolatori  accesi
  

si può vedere questo:
Code:
if (temp_dif < 2 && allarme < 1 ) {
   digitalWrite(8, HIGH);
   digitalWrite(9, HIGH);
   // questa parte fa partire i cicolatori se non ci sono allarmi che portano la variabile allarme a 1 e se la
   //temperatura pannelli e superiore  al serbatoio
   if (digitalRead(8) == HIGH && digitalRead(9) == HIGH)
        Serial.println (" 12) segnali dei 2 circolatori  accesi ");
}
//(digitalRead(8) == HIGH && digitalRead(9); == HIGH) Serial.println (" 15) segnali dei 2 circolatori  accesi ");
// RIGA CON IL PUNTO E VIRGOLA FA STAMPARE SEMPRE LA SCRITTA  segnali dei 2 circolatori  accesi
Ovvero che l'if che stampa il messaggio 12) è inutile e potrebbe essere eliminato.

Quote
Sostituendo la riga con quella errata a me non compila. Com'è possibile che a te non desse errori?
Non può compilare, nel post precedente ho detto anche il motivo.

Ma hai provato a inserire la riga che ti ho proposto?
Logged

Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sostituendo la riga con quella errata a me non compila. Com'è possibile che a te non desse errori?

allora metto qui la riga che a me non funzionava correttamente


 (temp_dif < 2 && allarme < 1 ) { digitalWrite (8, HIGH); digitalWrite(9, HIGH);
 
   if (digitalRead( 8 ) == HIGH && digitalRead( 9 ) == HIGH) Serial.println (" 12) segnali dei 2 circolatori  accesi "); }

se prima del  Serial.println  c'e il punto e virgola stampa tutto sempre che non e quello che voglio
cosi invece stampa giusto solo se i due pin sono entrambi a livello alto,
il codice si carica sempre sia col punto e virgola che senza,
rimetto il codice caricato fatto copia e incolla

Code:
int liv_acqua; // variabile mancanza livello acqua corretto
int temp_dif; // variabile differenza temperatura tra pannelli e serbatoio
int tempmaxpan; // variabile temperatura pannello maggiore a 102°
int tempmaxser; // variabile temperatura serbatoio maggiore di 50°
int fotores; // variabile fotoresistenza
int temperatura_1; // variabile per stampare il valore di temperatura nel monitor seriale
int temperatura_2;// variabile per stampare il valore di temperatura nel monitor seriale
int allarme;  // variabile per  il valore di allarme pin A4


void setup () { 
  Serial.begin(9600); 
pinMode (5, OUTPUT); //  LED LIVELLO INSUFFICENTE ACQUA SERBATOIO
pinMode (6, OUTPUT); //  LED FOTORESISTENZA GIORNO NOTTE  (si accende se manca il sole)
pinMode (7, OUTPUT); // ATTIVA ELETTROVALVOLA BYPASS CALDAIA A TEMPERATURA SERBATOIO >50° facoltativo
pinMode (8, OUTPUT); // ATTIVAZIONE CIRCOLATORE ACQUA UNO
pinMode (9, OUTPUT); // ATTIVAZIONE CIRCOLATORE ACQUA DUE
pinMode (10, OUTPUT); // LED  DI SOVRATEMPERATURA SERBATOIO SOPRA I 72°
pinMode (11, OUTPUT); // LED  DI SOVRATEMPERATURA PANNELLO SOPRA I 102°
pinMode (13, OUTPUT); // se non c'è si accende il led dell'arduino al pin 13
pinMode (A0, INPUT); // INPUT TERMOMETRO PANNELLI SONDA LM35  PIN 23
pinMode (A1, INPUT); // INPUT TERMOMETRO SERBATOIO SONDA LM35   PIN 24
pinMode (A2, INPUT); // INPUT FOTORESISTENZA  CHE SEGNALA GIORNO/NOTTE  PIN 25
pinMode (A3, INPUT); // INGRESSO SENSORE LIVELLO INSUFFICENTE ACQUA SERBATOIO  PIN 26
pinMode (A4, INPUT); // INGRESSO  POTENZIOMETRO PIN 27 (ANCORA DA DECIDERE COSA REGOLARE)


}

void loop ()
 {
   
 digitalWrite (7, LOW);
  delay (10);
  temperatura_1  =(5.0 * analogRead(A1) * 100.0) / 1024; //  legge la temperatura sull'ingresso A1  con LM35
  delay (210);
  Serial.println(" -                                                                                                                ");
  Serial.println(" -------------------------------LE SCRITTE IN MAIUSCOLO INDICANO LE CAUSE DEL FERMO IMPIANTO-----------------------------");
  Serial.println(" -                                                                                                                "); 
  Serial.print(" 1)temperatura  acqua "); 
  Serial.println(temperatura_1, DEC);//  stampa la temperatura
 
   delay (10);
 
  temperatura_2 = (5.0 * analogRead(A0) * 100.0) / 1024;   //  legge  la temperatura  con LM35
 Serial.print(" 2)temperatura pannelli ");
  Serial.println(temperatura_2, DEC);      //  stampa la temperatura
 
   delay (10);
   
  liv_acqua=analogRead(A3);
   { if (liv_acqua < 300) digitalWrite (5, HIGH); }
 
  delay (10);
 
fotores=analogRead(A2);
   digitalWrite (6, LOW); // porta il pin segnale della fotoresistenza a livello basso
    delay (10);
   
    Serial.print(" 3) valore fotoresistenza ");
  Serial.println(fotores, DEC);
   if (fotores < 100  )digitalWrite (6, HIGH);  // comando fotoresistenza soleggiato
   if (fotores > 400   )digitalWrite (6, HIGH);  // comando fotoresistenza soleggiato
   
   if (fotores < 100)Serial.println
  (" 4) CAVO FOTORESISTENZA DANNEGGIATO (verificare il collegamento) ");
  delay (10);//  attesa di 10 millisecondi
 
  if (fotores < 300)Serial.println
  (" 5) CAVO FOTORESISTENZA SCOLLEGATO O ROTTO 2 (verificare il collegamento) ");
  delay (10);//  attesa di 10 millisecondi
   
   tempmaxpan=(5.0 * analogRead(A0) * 100.0) / 1024;
   if (tempmaxpan < 102)digitalWrite (11, HIGH); // comando:  1) fermo impianto per sovratemperatura pannelli 2) led di segnalazione
   else {digitalWrite (11, LOW);}
      delay (10);
  tempmaxser=(5.0 * analogRead(A1) * 100.0) / 1024;
  if(tempmaxser < 72) digitalWrite (10, HIGH); // temperatura massima acqua serbatoio raggiunta 72 °
  else {digitalWrite (10, LOW);};
 delay (10);
 
  if(tempmaxser > 50)digitalWrite (7, HIGH); //  comando:  1) per evitare che l'acqua già troppo calda circoli nello scaldinono  a gas
                                             
 
   if(tempmaxser > 50) Serial.println (" 6) elettrovalvole antiricircolo attivate per temperatura acqua sufficiente");     
  delay (10);
 
   allarme=0;
   if (digitalRead(5) == HIGH) {allarme=1;
   Serial.println (" 7) ALLARME ATTIVO, ACQUA SERBATOIO INSUFFICENTE    ");}
      delay (10);
   
    if (digitalRead(6) == HIGH) {allarme=1;
   Serial.println (" 8) ALLARME ATTIVO, FOTORESISTENZA RILEVA INSUFFICIENTE SOLE    ");}
      delay (10);
   
    if (digitalRead(10) == HIGH) {allarme=1;
   Serial.println (" 9)  ALLARME ATTIVO, TEMPERATURA  SERBATOIO 72 GRADI   ");}
      delay (10);
   
    if (digitalRead(11) == HIGH) {allarme=1;
   Serial.println (" 10) ALLARME ATTIVO,  TEMPERATURA PANNELLI troppo elevata > 102 GRADI    ");}
      delay (10);
   
temp_dif=(tempmaxpan)-(tempmaxser); // sottrzione tra temperatura serbatoio e temperatura pannelli messi tra parentesi e in ordine
   Serial.print (" 11) differenza temperatura tra pannello e serbatoio ");
   Serial.println (temp_dif); // stampa la temperatura di differenza tra pannelli e serbatoio
   
   if (temp_dif < 2 && allarme < 1 ) { digitalWrite (8, HIGH); digitalWrite(9, HIGH);
   // questa parte fa partire i cicolatori se non ci sono allarmi che portano la variabile allarme a 1 e se la
   //temperatura pannelli e superiore  al serbatoio
   if (digitalRead(8) == HIGH && digitalRead(9) == HIGH) Serial.println (" 12) segnali dei 2 circolatori  accesi "); }
   
   //(digitalRead(8) == HIGH && digitalRead(9); == HIGH) Serial.println (" 15) segnali dei 2 circolatori  accesi ");
   // RIGA CON IL PUNTO E VIRGOLA FA STAMPARE SEMPRE LA SCRITTA  segnali dei 2 circolatori  accesi
   
    if (temp_dif > 2) Serial.println (" 13) LA TEMPERATURA DEI PANNELLI NON E' SUFFICIENTE ");
 
   delay (6000);  //tempo in millisecondi per spegnere un circolatore  (valore standard 15 secondi)
   
    digitalWrite (8, LOW);  //spegne un circolatore
     if (digitalRead(8) == LOW && digitalRead(9) == HIGH) Serial.println (" 14) segnale circolatore 1 acceso, segnale circolatore 2 spento");
   
    delay (3000);  //tempo in millisecondi per spegnere il secondo  circolatore  (valore standerd 5 minuti)
   
    digitalWrite (9, LOW); //spegne un circolatore
   
    Serial.println (" 15) segnali circolatori spenti");
   
    delay (3000); //tempo di standby   per far recuperare calore sufficiente a i pannelli  nel funzionamento con il sole
   
  }
 
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
(temp_dif < 2 && allarme < 1 ) { digitalWrite (8, HIGH); digitalWrite(9, HIGH);
Immagino manchi un "if" prima....

Allora, se il codice è questo:
Code:
if (temp_dif < 2 && allarme < 1 ) { digitalWrite (8, HIGH); digitalWrite(9, HIGH);
if (digitalRead( 8 ) == HIGH && digitalRead( 9 ) == HIGH) Serial.println (" 12) segnali dei 2 circolatori  accesi "); }
Compila certamente. Ma il ; che dici che ti fa scrivere tutto va messo fra "HIGH)" e "Serial"? Se dici lì, è NORMALE che ti stampi sempre tutto, perché diventano 2 comandi distinti. Senza le {} a creare il blocco di codice dell'if, in pratica col ; io immagino che il compilatore pensi ad un non-comando e termina l'if. Quindi il Serial.print per lui è un comando al di FUORI dell'if.
Devi indentare poi meglio perché oltre che al compilatore, il tuo codice appare un po' illeggibile anche a me  smiley-sweat

Code:
if (temp_dif < 2 && allarme < 1 ) {
    digitalWrite (8, HIGH); digitalWrite(9, HIGH);
    if (digitalRead( 8 ) == HIGH && digitalRead( 9 ) == HIGH) {
        Serial.println (" 12) segnali dei 2 circolatori  accesi ");
    }
}
Logged


Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Code:
(temp_dif < 2 && allarme < 1 ) { digitalWrite (8, HIGH); digitalWrite(9, HIGH);
Immagino manchi un "if" prima....

Allora, se il codice è questo:
Code:
if (temp_dif < 2 && allarme < 1 ) { digitalWrite (8, HIGH); digitalWrite(9, HIGH);
if (digitalRead( 8 ) == HIGH && digitalRead( 9 ) == HIGH) Serial.println (" 12) segnali dei 2 circolatori  accesi "); }
Compila certamente. Ma il ; che dici che ti fa scrivere tutto va messo fra "HIGH)" e "Serial"? Se dici lì, è NORMALE che ti stampi sempre tutto, perché diventano 2 comandi distinti. Senza le {} a creare il blocco di codice dell'if, in pratica col ; io immagino che il compilatore pensi ad un non-comando e termina l'if. Quindi il Serial.print per lui è un comando al di FUORI dell'if.
Devi indentare poi meglio perché oltre che al compilatore, il tuo codice appare un po' illeggibile anche a me  smiley-sweat

Code:
if (temp_dif < 2 && allarme < 1 ) {
    digitalWrite (8, HIGH); digitalWrite(9, HIGH);
    if (digitalRead( 8 ) == HIGH && digitalRead( 9 ) == HIGH) {
        Serial.println (" 12) segnali dei 2 circolatori  accesi ");
    }
}

ok  allora!  le parentesi graffe annullano il punto e vircola se vengono messe dopo if  e if funziona riferendosi a tutto il blocco delle parentesi graffe
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

Catania
Offline Offline
Sr. Member
****
Karma: 0
Posts: 346
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sembra che in questo Topic io abbia dei problemi di visibilità dei post che pubblico...
Non importa...quel che conta è aver provato ad essere utili smiley-wink
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 325
Posts: 22498
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Sembra che in questo Topic io abbia dei problemi di visibilità dei post che pubblico...
Non importa...quel che conta è aver provato ad essere utili smiley-wink
Alle volte tiriamo dritti per la propria strada quando ci si incaponisce su una cosa, evitando le risposte altrui...  smiley-sweat
Logged


Pages: 1 [2] 3   Go Up
Jump to: