Buongiorno a tutti, è da un pò che cerco di cimentarmi con arduino e un ricevitore ad infrarossi tipo vs 1838b, il mio problema è che dopo aver caricato il codice ,aver aperto il serial monitor, ogni volta che premo un tasto del telecomando infrarossi la risposta a monitor è sempre diversa (chiaramente pigiando sempre lo stesso tasto).
il codice interamente copiato dal sitohttp://ismanettoneblog.altervista.org/blog/lezione-1 è questo:
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}
// Dumps out the decode_results structure.
// Call this after IRrecv::decode()
// void * to work around compiler issue
//void dump(void *v) {
// decode_results *results = (decode_results *)v
void dump(decode_results *results) {
int count = results->rawlen;
if (results->decode_type == UNKNOWN) {
Serial.print("Unknown encoding: ");
}
else if (results->decode_type == NEC) {
Serial.print("Decoded NEC: ");
}
else if (results->decode_type == SONY) {
Serial.print("Decoded SONY: ");
}
else if (results->decode_type == RC5) {
Serial.print("Decoded RC5: ");
}
else if (results->decode_type == RC6) {
Serial.print("Decoded RC6: ");
}
else if (results->decode_type == SAMSUNG) {
Serial.print("Decoded SAMSUNG: ");
}
else if (results->decode_type == JVC) {
Serial.print("Decoded JVC: ");
}
else if (results->decode_type == PANASONIC) {
Serial.print("Decoded Panasonic: ");
}
Serial.print(results->value, HEX);
Serial.print("(");
Serial.print(results->bits, DEC);
Serial.println(" bits)");
Serial.print("#define Something_DEC ");
Serial.println(results->value, DEC);
Serial.print("#define Something_HEX ");
Serial.println(results->value, HEX);
Serial.print("Raw (");
Serial.print(count, DEC);
Serial.print("): ");
for (int i = 0; i < count; i++) {
if ((i % 2) == 1) {
Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
}
else {
Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
}
Serial.print(" ");
}
Serial.println("");
}
void loop() {
if (irrecv.decode(&results)) {
dump(&results);
irrecv.resume(); // Receive the next value
}
}
Benvenuto. Essendo il tuo primo post, nel rispetto del regolamento, ti chiediamo cortesemente di presentartiQUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO... Grazie.
Qui una serie di link utili, non inerenti al tuo problema:
Il codice DEVI racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare ( pulsante </> ).
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.
Infatti nel codice che hai postato ad un certo punto manca un pezzetto e diventa in italico !!
... in conformità al regolamento, punto 7, devi editare il tuo post iniziale (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).
Se lo riconosce come Samsung, io toglierei quando stampa la codifica raw, che serve solo quando non si capisce il tipo di telecomando. Commenta tutta quella parte.
All'inizio della riga con Serial.print("Raw ("); metti /* e poi dopo la } del for metti */ (prima della Serial.println(""); )
Meno roba inutile stampa e meglio è
Quello che ti interessa è Decoded SAMSUNG: E0E020DF(32 bits)
Se premi 5 volte 1, vedi sempre quella frase con quei numeri esadecimali ?
Se poi in mezzo di sono dei Unknown encoding, per ora non me ne occuperei.
Che telecomando è ? TV o per caso condizionatore ?
Siccome anch'io sto "giocando" con telecomando Samsung (TV), usa questo sketch pulito pulito per vedere i codici...
Casomai posta la schermata del monitor seriale che vedi, così capiamo meglio.
#include <IRremote.h> // use the library
int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;
void setup()
{
Serial.begin(9600); // for serial monitor output
irrecv.enableIRIn(); // Start the receiver
pinMode(13, OUTPUT); // Pin 13 output
}
void loop()
{
if (irrecv.decode(&results)) // have we received an IR signal?
{
Serial.println(results.value, HEX); // display it on serial monitor in hexadecimal
irrecv.resume();// receive the next value
}
}
Allora: il telecomando è un telecomando tv samsung;
ogni volta che digito 1 non sempre mi riconosce la decodifica a volte compaiono Unknown encoding, ma ho notato che digitando più volte 1 poi compare la codifica samsung con lo stesso valore, ciò accade anche con gli altri tasti
fluo82:
il tuo codice è molto più pulito e quindi più chiaro, ma ci sono sempre delle decodifiche sconosciute, comunque mi sembra più valido.
scusatemi se volessi utilizzare il o più valori comuni come li inserisco???
con il codice di Fluo82 il serial monitor premendo il tasto 1 del telecomando mi da questi valori
E0E020DF
E0E020DF
E0E020DF
E0E020DF
E0E020DF
E13DDA28
E13DDA28
E0E020DF
E0E020DF
E0E020DF
E0E020DF
E0E020DF
E13DDA28
E13DDA28
E13DDA28
come inserisco i valori più ricorrenti nel codice per far si che premendo il tasto 1 del telec mi accenda ad esmipo un led?
grazie
ho trovato questo codice
#include <IRremoteInt.h>
#include <IRremote.h> // use the library
int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;
void setup()
{
Serial.begin(9600); // for serial monitor output
irrecv.enableIRIn(); // Start the receiver
pinMode(9, OUTPUT); // Pin 9 output
}
void loop()
{
if (irrecv.decode(&results)) // have we received an IR signal?
{
Serial.println(results.value, HEX); // display it on serial monitor in hexadecimal
irrecv.resume();// receive the next value
}
if ( results.value == 0x406 || results.value == 0x10406 ){ //tasto 6 sul telecomando
digitalWrite(9, HIGH); // set the LED on
}
if ( results.value == 0x404 || results.value == 0x10404 ){ //tasto 4 sul telecomando
digitalWrite(9, LOW); // set the LED 0ff
}
}
Con questo sketch accendi il led sul pin 9 ogni qualvolta premi il tasto 1, sia che il codice HEX sia uno o l'altro.
Creati un altro "if" se desideri spegnere il led con un altro tasto.
#include <IRremoteInt.h>
#include <IRremote.h> // use the library
int receiver = 11; // pin 1 of IR receiver to Arduino digital pin 11
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results;
void setup()
{
Serial.begin(9600); // for serial monitor output
irrecv.enableIRIn(); // Start the receiver
pinMode(9, OUTPUT); // Pin 9 output
}
void loop()
{
if (irrecv.decode(&results)) // have we received an IR signal?
{
Serial.println(results.value, HEX); // display it on serial monitor in hexadecimal
irrecv.resume();// receive the next value
}
if ( results.value == E0E020DF || results.value == E13DDA28 ){ //tasto 1 sul telecomando
digitalWrite(9, HIGH); // set the LED on
}
}
intanto voglio ringraziarvi per la vostra disponibilità !!!!!
sono riuscito a decodificare il telecomando ed ad utilizzare il codice relativo al tasto premuto, unico neo è che, qunado premo e rilascio ad esempio il tasto 1 del telecomando il codice visualizzato sul serial monitor non è mai lo stesso ; mi spiego: ogni volta che premo e rilascio il tasto 1 come risultato ho E0E020D oppure FE13DDA28 o ancora altri codici . I primi due sono i più ricorrenti e sono quelli che ho utilizzato .
non c'è un modo per far si che gli altri codici non utilizzati perchè non ricorrenti non vengano visualizzati?grazie
A me non è mai capitato che un telecomando desse valori diversi per stesso tasto. Telecomando semplici ! Quelli di condizionatori, Sky, etc sono particolari.