Buonasera,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentartiIN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie.
Guglielmo
P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell’apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto.
La delay() non ritorna nessun valore, quindi non puoi metterla in un if
La delay attende e ferma Arduino per il tempo che indichi in parentesi. Non fa altro
Pauses the program for the amount of time (in milliseconds) specified as parameter.
...
Returns Nothing
Quindi se ritorna niente, non la puoi usare come condizione per qualcosa che si aspetta true o false, che è quello che ti sta dicendo l'errore, "non posso convertire niente in true/false", come ti ha già spiegato @nid69ita
Se come sospetto, vuoi spegnere il led dopo un secondo che l'hai accesso, allora ti basta
if (results.value == 0xE0E036C9) { //se il valore è uguale a ...
digitalWrite(redpin, HIGH); //accende il led
delay (1000); //aspetta un secondo
digitalWrite(redpin, LOW); // spegne il led
}
@Stilita, si riferisce al fatto che solitamente si sconsiglia l'uso di delay proprio perchè blocca l'esecuzione del loop, ma onestamente credo che per l'uso di millis per te sia un po' presto!
Comunque se al contrario vuoi portarti avanti, puoi cominciare da qui e poi qui e naturalmente chiedere al forum in caso di dubbi.
facendo così però dopo il risultato si accende il led ma non si spegne dopo un secondo devo ripremere per spegnere il led.
ecco cosa non capisco, perché non mi si spegne nonostante ci sia il delay
In realtà si spegne, ma si ri-accende immediatamente al giro successivo del loop, in quanto risultato.value continua ad avere lo stesso valore!
La verifica del valore ricevuto, la devi far all'interno della if, cioè solo se è stato ricevuto un nuovo segnale; prova cosi:
void loop() {
//verifico se ho ricevto un segnale
if (telecomando.decode(&risultato))
{
//ho ricevuto un segnale
Serial.println(risultato.value, HEX);
if (risultato.value == 0xE0E036C9) {
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
}
//resetto il ricevitore e lo preparo al prossimo segnale
telecomando.resume();
}
}
inoltre, cosi potresti avere problemi in quanto le letture vendono eseguite troppo velocemente rispetto alla pressione del tasto del telecomando.
Solitamente si usa leggere (controllare) il valore ogni quarto di secondo.
Sai come si usa millis() per gestire il tempo, per ritardare le verifica del pulsante premuto rispetto alla frequenza del loop?
Se si, prova a farlo, altrimenti inizia a leggere qui e qui.
Federico
PS
Abituati a formattare correttamente il codice! Dall'IDE, Ctrl+T o Strumenti->Formattazione automatica.
Questo aiuta te a controllare il codice, e a chi legge qui (se posti il codice) a verificarlo velocemente.
Solo come suggerimento ... studia anche l'uso e l'utilita' delle "flag" (dove per "flag" non si intende un comando o un'istruzione, ma usare una variabile, quella che preferisci, come "bandierina segnaposto", per dire al programma, ad esempio, che deve fare qualcosa solo un certo numero di volte, non ad ogni giro del loop) ...
Sempre rimanendo nel tuo caso, dove quello che ti serve e' che il led si accenda UNA SOLA VOLTA per un secondo ogni volta che la condizione e' vera ... puoi usare una struttura del genere ...
tutti i tuoi define e setup
dichiara una variabile byte, con un nome a tua scelta (esempio, "pippo" ) ed impostala a 0
void loop()
...
programma nel loop
...
IF la tua condizione e' TRUE "E" pippo vale 0 (studiare l'uso di & e compagni ;) )
pippo = 1
il tuo delay per il led
fine del ciclo IF
IF la tua condizione e' FALSE pippo=0
...
eccetera
in questo modo, quando accendi il led la prima volta, metti anche la flag "pippo" ad 1, per cui non si riaccendera' piu a meno che la condizione non diventi falsa (dove rimetti pippo a 0 con il secondo if) e poi torni vera ...