Accendere relè da telecomando
Accendere relè da telecomando
Ciao a tutti
Approfitto di questo spazio messo a disposizione da Pier per chiedervi aiuto, in un piccolo progetto di arduino, che mi crea un piccolo problema.
Premetto che ne capisco poco quanto nulla, nelle mie intenzioni vorrei realizzare uno sketch che, tramite un tasto del telecomando della TV accenda e spenga un relè.
In effetti qualcosa ho fatto ma c'è un piccolo problema:
Quando premo il tasto del telecomando, questi emette per più volte il codice facendo, di fatto, accendere e subito spegnere il relè.
Dovrei limitare l'istruzione a recepire un solo comando.
Spero di essere stato chiaro.
Se può servire posso postare lo sketch che sto utilizzando.
Grazie a chiunque voglia aiutarmi
Approfitto di questo spazio messo a disposizione da Pier per chiedervi aiuto, in un piccolo progetto di arduino, che mi crea un piccolo problema.
Premetto che ne capisco poco quanto nulla, nelle mie intenzioni vorrei realizzare uno sketch che, tramite un tasto del telecomando della TV accenda e spenga un relè.
In effetti qualcosa ho fatto ma c'è un piccolo problema:
Quando premo il tasto del telecomando, questi emette per più volte il codice facendo, di fatto, accendere e subito spegnere il relè.
Dovrei limitare l'istruzione a recepire un solo comando.
Spero di essere stato chiaro.
Se può servire posso postare lo sketch che sto utilizzando.
Grazie a chiunque voglia aiutarmi
Re: Accendere relè da telecomando
Sarebbe bene leggere lo sketch e sapere che telecomando e', magari si potrebbero scegliere due codici diversi per accensione e spengimento.
Re: Accendere relè da telecomando
Certo
Posto il codice.
Il discorso del doppio tasto l'ho scartato poiché nelle mie intenzioni c'è la volontà di utilizzare il solo telecomando della TV per accendere e spegne il decoder Sky, in quanto lo skyQ consuma in standby ben 18W.
Visto che lo uso sporadicamente volevo usare un solo tasto del telecomando che apparentemente non offre funzioni attive sulla Tv per evitare che si accenda, o si spenga, quando si cerca qualche funzione nella tv.
Il codice usato è questo
Grazie
Posto il codice.
Il discorso del doppio tasto l'ho scartato poiché nelle mie intenzioni c'è la volontà di utilizzare il solo telecomando della TV per accendere e spegne il decoder Sky, in quanto lo skyQ consuma in standby ben 18W.
Visto che lo uso sporadicamente volevo usare un solo tasto del telecomando che apparentemente non offre funzioni attive sulla Tv per evitare che si accenda, o si spenga, quando si cerca qualche funzione nella tv.
Il codice usato è questo
Codice: Seleziona tutto
include <IRremote.h>
int RECV_PIN = 4;
int stato = LOW;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
pinMode(7, OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
if (results.value == 0xFF6897) {
stato = !stato;
delay(200);
}
if ( stato == HIGH) {
digitalWrite(7, HIGH);
} else {
digitalWrite(7, LOW);
}
}
delay(100);
}
Re: Accendere relè da telecomando
Il problema e' che soprattutto con i telecomandi e' difficile mandare un impulso solo. Inoltre, riabiliti la ricezione immediatamente dopo aver ricevuto un risultato:
quindi indipendentemente dal delay() che metti dopo aver cambiato lo stato del rele' trovreai subito il primo rimbalzo dell'interruttore. Potresti provare a spostare l'istruzione
alla fine del loop. Ancora meglio avere un loop infinito dentro il quale verifichi se c'e' un risultato, nel qual caso prendi azione, dopo di che, e solo dopo aver atteso un tempo specifico, riabiliti la ricezione di segnali. Potrebbe funzionare.
Magari meglio se aggiungiamo l'include della libreria correttamente... Il compilatore si lamenta che il metodo secode() e' deprecato, by the way.
WARNING: io non ho un ricevitore, e non ho testato il codice. Possono esserci sciocchezze. Garantisco solo che compila.
Codice: Seleziona tutto
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
Codice: Seleziona tutto
irrecv.resume(); // Receive the next value
Magari meglio se aggiungiamo l'include della libreria correttamente... Il compilatore si lamenta che il metodo secode() e' deprecato, by the way.
Codice: Seleziona tutto
// Al prete (bof), al medico (meglio) ed al compilatore (assolutamente) non si deve mai mentire...
#include <IRremote.h> // con il carattere #
// include <IRremote.h> // e non senza che non funziona
int RECV_PIN = 4;
int stato = LOW;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
pinMode(7, OUTPUT);
}
void loop() {
while (1) { // Continua per sempre
// a questo punto copio e incollo dal tuo codice
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
// irrecv.resume(); // Receive the next value si e' spostato
if (results.value == 0xFF6897) {
stato = !stato;
// delay(200); // Questo delay non serve
}
if ( stato == HIGH) {
digitalWrite(7, HIGH);
} else {
digitalWrite(7, LOW);
}
delay(500); // Questo viene eseguito ogni volta
}
// delay(100); // Questo delay() si e' spostato un po' sopra
irrecv.resume(); // Receive the next value e' arrivato da sopra
}
}
Re: Accendere relè da telecomando
Ciao pgvpgv ha scritto: ↑mer 16 feb 2022, 16:59 Il problema e' che soprattutto con i telecomandi e' difficile mandare un impulso solo. Inoltre, riabiliti la ricezione immediatamente dopo aver ricevuto un risultato:
WARNING: io non ho un ricevitore, e non ho testato il codice. Possono esserci sciocchezze. Garantisco solo che compila.
Innanzitutto grazie per l'interessamento
Si, il problema è proprio quello del rimbalzo dell'impulso che accende ed immediatamente spegne il relè.
Ad ogni modo, sabato o domenica che avrò un po' più di tempo testerò la tua modifica e ti aggiornerò.
Intanto posso solo ringraziarti ancora.
P.S. l'avevo messo il # ma nella copia/incolla si era perso
Re: Accendere relè da telecomando
Buongiorno pgv e buona domenica
Ti aggiorno per dirti che purtroppo il codice non funziona
In questa configurazione l'IR non riceve nulla e non stampa nulla sulla seriale.
La conseguenza è che non compie nessuna azione.
Ripristinato il vecchio codice, stampa sulla seriale, quindi l'IR riceve il codice, ed accende e spegne il relè.
Ma rimane l'inconveniente del rimbalzo del segnale.
Grazie
Re: Accendere relè da telecomando
Io ho modificato così il codice e funziona senza rimbalzi:
Codice: Seleziona tutto
#include <IRremote.h>
int RECV_PIN = 4;
int stato = LOW;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
pinMode(7, OUTPUT);
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
delay(200);
if (results.value == 0xFF9867) {
stato = !stato;
digitalWrite(7, stato);
//Serial.println(results.value, HEX);
Serial.println(digitalRead(7));
}
irrecv.resume();
delay(100);
}
}
Bye!
Marco
-----------
Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu
hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Marco
-----------
Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu
hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Re: Accendere relè da telecomando
Aggiornamento
il codice sembra funzionare anche se, alla pressione del tasto, invia i seguenti codici
8CCC9BB4
6F
1006F
0
6F
1006F
1
ovviamente, tenendo per sbaglio qualche decimo di secondo in più il tasto può succedere che il relay si spenga o riaccenda.
posso aumentare il ritardo ( delay ) o non risolvo nulla?
Si possono inserire anche altri codici? ( 6F e 1006F) che sono i più ricorrenti?
Grazie per l'interessamento
Re: Accendere relè da telecomando
Acc... avevo notato anch'io questo problema col telecomando dell'amplificatore Lepy, mentre con quello nel kit della Elegoo e col telecomando del decoder dtt funziona perfettamente; ma visto che avevi scritto
pensavo fosse solo un problema di "rimbalzi".Quando premo il tasto del telecomando, questi emette per più volte il codice facendo, di fatto, accendere e subito spegnere il relè.
Puoi provare a verficare con un altro telecomando?
Bye!
Marco
-----------
Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu
hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)
Marco
-----------
Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu
hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)