Salve a tutti ho un problema con lo schetc qui sotto,in pratica per farla breve il tasto ON\OFF fà correttamente il suo lavoro, peccato che lo fà anche se premo altri tasti, e non capisco il perchè.
sono sicuro (perchè ho provato) che il primo programma che hai postato non funziona!
non c'è nemmeno la funzione setup() per cui non compila
hai provato a caricare uno degli esempi della libreria iremote?
ci sono molte differenze con quello che hai scritto
solo una nota...
void TELECOMANDO()
{
T_SPENTO_ACCESO();
}
fare una funzione il cui unico scopo è richiamare un'altra funzione mi pare inutile
lo so che al momento è inutile,ma in realtà la funzione "void TELECOMANDO()" appena risolvo il mio problema, conterrà tutte le funzioni per i vari tasti.
Le differenze tra gli esempi della libreria e il mio schetc,sono dovuti al fatto che foglio fare cose diverse contemporaneamente,usando il telecomando,ed al momento anche in rete non ho trovato nulla,solo esempi che riportano alle librerie.
anche con #define il valore letto, ma il risultato non cambia.
La variabile " ValoreIrc=results.value;" l'ho messa per rendere indipendente il "results.value;".
Questo"if(ValoreIrc==16753245||3810010651)" giustamente come mi fai notare o più corretto scritto"if((ValoreIrc==16753245) || (ValoreIrc==3810010651))",
ma il risutato è lo stesso.
I due valori differenti dipendono solo da dove si trova il trova il telecomando,rispetto al ricevitore(li ho scelti perche sono quelli più frequenti).
Il mio problema è che se spingo un tasto qualsiasi,cambia il valore di "Acceso", mentre dovrebbe farlo solo se la variabile"ValoreIrc=results.value;".
devi prima di tutto capire che codice invia il telecomando alla pressione di ogni tasto, non può cambiare il codice in funzione di "dove si trova il telecomando rispetto al ricevitore" non ha alcun senso!
per avere un riscontro del perchè acceso cambia stato, usa delle serial.print() per mostrare a monitor le varie variabili subito dopo averle modificate così ti rendi conto di dove passa il programma e perchè
sicuramente i due litterals vanno scritti con UL (Unsigned Long) alla fine...cioè: 16753245UL e 3810010651UL.
non capisco l'utilità dell'else...non cambi nulla...
poi non "svuoti" mai la variabile ValoreIrc...che avrà sempre l'ultimo valore salvato...ti consiglio, dopo la sua verifica, di portarla ad un valore "neutro" .
poi hai un paio di:
if (Scrivi_T = 1)
che non va bene...devi usare "==".
per il momento mi fermo qui...
prova ad eseguire questo con il monitor seriale aperto e poi dimmi come va
unsigned long ValoreIrc ;
void setup() {
Serial.begin(9600);
}
void loop() {
// partendo da 16753245 incremento dello stesso valore
// vediamo a che punto entra nell'else...
// a quel punto il programma entra nel while e smette di scrivere sulla seriale
//p .s.
// 4294967295 è il numero più grande che ci sta nell'unsigned long
for (ValoreIrc= 16753245; ValoreIrc <= 4294967295; ValoreIrc = ValoreIrc + 16753245) {
if (ValoreIrc == 16753245 || 3810010651) {
Serial.print("il valore è = ");
Serial.println(ValoreIrc);
} else {
Serial.print("invece il valore è = ");
Serial.println(ValoreIrc);
while(1) {;}
}
}
}
praticamente simula i codici che puoi ricevere dal telecomando....
.... se poi vuoi provare questo, non mi pare che non cambi nulla
unsigned long ValoreIrc ;
void setup() {
Serial.begin(9600);
}
void loop() {
// qui al contrario sono 2 blocchi (altrimenti dura troppo)
// partendo da 16753240 fino a 16753250
// vediamo a che punto entra nell'if e nell'else...
// e poi partendo da 3810010645 fino a 3810010655
// vediamo a che punto entra nell'if e nell'else...
// poi il programma entra nel while e smette di scrivere sulla seriale
//
for (ValoreIrc = 16753240; ValoreIrc <= 16753250; ValoreIrc++ ) {
if ((ValoreIrc == 16753245) || (ValoreIrc == 3810010651)) {
Serial.println(" ");
Serial.print("è entrato nell'if!! perchè ");
Serial.print("il valore è = ");
Serial.println(ValoreIrc);
Serial.println(" ");
} else {
Serial.print("è entrato nell'else!! perchè ");
Serial.print("il valore è = ");
Serial.println(ValoreIrc);
}
}
for (ValoreIrc = 3810010645; ValoreIrc <= 3810010655; ValoreIrc++ ) {
if ((ValoreIrc == 16753245) || (ValoreIrc == 3810010651)) {
Serial.println(" ");
Serial.print("è entrato nell'if!! perchè ");
Serial.print("il valore è = ");
Serial.println(ValoreIrc);
Serial.println(" ");
} else {
Serial.print("è entrato nell'else!! perchè ");
Serial.print("else il valore è = ");
Serial.println(ValoreIrc);
}
}
while (1) {
;
}
}
Parte del problema stava proprio li if(ValoreIrc == 16753245 || 3810010651) al posto di if((ValoreIrc==16753245) || (ValoreIrc==3810010651))", probabilmente lo avevo escluso causa altri problemi.