Ciao a tutti,
stò riscontrando un problema davvero strano con l'uso dell'IF e CASE :
ho quasi ultimato un piccolo progetto di domotica per controllare via remoto il mio condizionatore, per farlo uso un arduino collegato ad un raspberry pi che uso come webserver:
Sull'arduino ho questo codice:
#include <IRremote.h>
IRsend irsend; //usare pin 3
decode_results results;
//non metto tutte le variabili dei segnali perchè sono molto lunghe
unsigned int Hita_OFF[531]={3400, 1624, 480, 1200, 480, [...] }
[...]
unsigned int Hita_HOT_23_auto_sw[534]={ [...]
void setup()
{
Serial.begin(9600);
}
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == 'A') {
irsend.sendRaw(Hita_OFF,531,38);
}
else if (c == 'B') {
irsend.sendRaw(Hita_18_auto_sw,533,38);
}
else if (c == 'C') {
irsend.sendRaw(Hita_18_max_sw,533,38);
}
else if (c == 'D') {
irsend.sendRaw(Hita_20_auto_sw,541,38);
}
else if (c == 'E') {
irsend.sendRaw(Hita_20_max_sw,537,38);
}
else if (c == 'F') {
irsend.sendRaw(Hita_22_auto_sw,533,38);
}
else if (c == 'G') {
irsend.sendRaw(Hita_22_max_sw,551,38);
}
else if (c == 'H') {
irsend.sendRaw(Hita_24_auto_sw,533,38);
}
else if (c == 'I') {
irsend.sendRaw(Hita_24_max_sw,531,38);
}
else if (c == 'L') {
irsend.sendRaw(Hita_HOT_23_auto_sw,543,38);
}
} //if
} // loop
Dal raspberry, tramite pyton invio su seriale un carattere per innescare l'emettitore con un codice del tipo:
import serial
arduino = serial.Serial('/dev/tty.usbserial', 9600)
arduino.write('A') // ('B') ecc
tutto questo non funziona, o meglio funzionava in fase di test quando usavo solo due stati (solo due if) ed ecco il problema stranissimo:
se uso più di due "if" non succede nulla, difatti se cambio il codice così:
[...]
void loop() {
if (Serial.available()) {
char c = Serial.read();
if (c == 'A') {
irsend.sendRaw(Hita_OFF,531,38);
}
else if (c == 'B') {
irsend.sendRaw(Hita_18_auto_sw,533,38);
}
} //if
} // loop
tutto funziona alla meraviglia, ma aggiungendo anche un solo altro IF (per la C) non va!!
A questo punto ho anche provato con ilo SWITCH CASE:
[...]
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (Serial.available()) {
char c = Serial.read();
switch (c) {
case 'A':
irsend.sendRaw(Hita_OFF,531,38);
break;
case 'B':
irsend.sendRaw(Hita_18_auto_sw,533,38);
break;
case 'C':
irsend.sendRaw(Hita_18_max_sw,533,38);
break;
case 'D':
irsend.sendRaw(Hita_20_auto_sw,541,38);
break;
case 'E':
irsend.sendRaw(Hita_20_max_sw,537,38);
break;
case 'F':
irsend.sendRaw(Hita_22_auto_sw,533,38);
break;
case 'G':
irsend.sendRaw(Hita_22_max_sw,551,38);
break;
case 'H':
irsend.sendRaw(Hita_24_auto_sw,533,38);
break;
case 'I':
irsend.sendRaw(Hita_24_max_sw,531,38);
break;
case 'L':
irsend.sendRaw(Hita_HOT_23_auto_sw,543,38);
break;
}
}
}
ed anche così non funziona....ma ancora se riduco a 2 le opzioni del case:
[...]
void setup() {
pinMode(LED, OUTPUT);
Serial.begin(9600);
}
void loop() {
if (Serial.available()) {
char c = Serial.read();
switch (c) {
case 'A':
irsend.sendRaw(Hita_OFF,531,38);
break;
case 'B':
irsend.sendRaw(Hita_18_auto_sw,533,38);
break;
}
}
}
funziona tutto.
Sinceramente non so dove sbattere la testa, non mi spiego davvero un comportamento così...magari è l'ora tarda ![]()
Qualcuno può illuminarmi??
Grazie mille!!