Riconoscere sequenza di numeri con IRremote

Buongiorno a tutti, volevo creare uno Sketch dove arduino riconosceva una sequenza di numeri preimpostata (una sorta di codice di accesso con il telecomando) Chi mi può aiutare a creare lo sketch ? Grazie

senza offesa basta che cerchi ir remote arduino

Niente offesa, ho guardato ma non sono riuscito a trovarlo.
Se mi puoi dire qual’è mi daresti una grossa mano

Grazie

Prova questo. Non l'ho testato però. http://forum.arduino.cc/index.php?topic=156522.0

Ho provato ma mi da i seguenti errori

Arduino:1.6.5 (Linux), Scheda:"Arduino Uno"

Arduino:1.6.5 (Linux), Scheda:"Arduino Uno"

esempio_password.ino: In function 'long unsigned int decodeHash(decode_results*)':
esempio_password:43: error: invalid conversion from 'volatile unsigned int*' to 'unsigned int' [-fpermissive]
esempio_password:21: error: initializing argument 1 of 'int compare(unsigned int, unsigned int)' [-fpermissive]
invalid conversion from 'volatile unsigned int*' to 'unsigned int' [-fpermissive]

Nel thread ci sono le correzioni per la funzione decodeHash:

unsigned long decodeHash(decode_results *results) {
  unsigned long hash = FNV_BASIS_32;
  for (int i = 1; i+2 < results->rawlen; i++) 
  { int value = compare(results->rawbuf[i],results->rawbuf[i+2]);
    hash = (hash * FNV_PRIME_32) ^ value; // Add value into the hash
  }
  return hash;
}

Quel codice però non mi piace. Non capisco perchè cerca di decodificare lui il segnale del telecomando, quando la libreria lo fà già (quel discorso dell’hash). Forse perchè vuole usare un servo e usando lo stesso Timer interno di Arduino il servo e la IRRemote si “disturbavano” (ma dentro la IRRemote si può cambiare il Timer usato !!)

La libreria IRRemote deve sapere il modello del telecomando.
Ti do un esempio mio:

// Ricevitore IR per telecomandi TV BlueSky riconosciuto come NEC 
#include <IRremote.h>

const byte RECV_PIN = 10;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{ delay(1000);
  Serial.begin(9600);
  Serial.println("start");
  irrecv.enableIRIn(); //Avvia ricezione
}

void loop() 
{ if (irrecv.decode(&results))
  { if(results.decode_type==NEC)
    { Serial.print("BLUESKY: "); 
      switch(results.value)   // BLUESKY
      { case 0xFFD02F: Serial.println("+10  "); break;
        case 0xFF48B7: Serial.println("-10  "); break;
        case 0xFF30CF: Serial.println("Skip-"); break;
        case 0xFF10EF: Serial.println("Skip+"); break;
        case 0xFFC837: Serial.println("Play "); break;
        case 0xFF40BF: Serial.println("Stop "); break;
        case 0xFF50AF: Serial.println("Mode "); break;
        case 0xFFFFFFFF: //Serial.print("<RIPETI>");
        default: Serial.print("??? 0x"); Serial.println(results.value, HEX);         
      } 
    }  
/*
    else
    { Serial.print("Type.: "); Serial.println(results.decode_type);
    }
*/    
    irrecv.resume(); //Attesa ricezione prossimo valore
  }
}

La parte racchiusa tra i commenti serve per conoscere il tipo telecomando. Togli quei commenti per saperlo.

Qui esempio mio con mio telecomando riconosciuto come nec e con la mia mappatura, pin usato = 9
Qui ho integrato la gestione password del link precedente:

// Ricevitore IR per telecomandi TV BlueSky riconosciuto come NEC 
#include <IRremote.h>
#include "Password.h"

Password password = Password( "1234" );

const byte RECV_PIN = 9;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{ delay(1000);
  Serial.begin(9600);
  Serial.println("inizio:");
  irrecv.enableIRIn(); //Avvia ricezione
}

void loop() 
{ if (irrecv.decode(&results))
  { if(results.decode_type==NEC)
    { //Serial.print("BLUESKY: "); 
      switch(results.value)   // BLUESKY
      { case 0xFFAA55:
          password.append('0');
          Serial.print("0 "); 
          break;          
        case 0xFFDA25: 
          password.append('1');
          Serial.print("1 "); 
          break;
        case 0xFFF20D:
          password.append('2');
          Serial.print("2 "); 
          break;
        case 0xFFCA35:
          password.append('3');
          Serial.print("3 "); 
          break;
        case 0xFF5AA5:
          password.append('4');
          Serial.print("4 "); 
          break;
        case 0xFFF00F:
          password.append('5');
          Serial.print("5 "); 
          break;
        case 0xFF7A85:
          password.append('6');
          Serial.print("6 "); 
          break;
        case 0xFF6A95:
          password.append('7');
          Serial.print("7 "); 
          break;
        case 0xFF728D:
          password.append('8');
          Serial.print("8 "); 
          break;
        case 0xFF4AB5:
          password.append('9');
          Serial.print("9 "); 
          break;
        case 0xFF48B7: 
          Serial.println("okay"); 
          checkPassword();
          break;
        case 0xFFBA45: 
          password.reset();
          Serial.println("reset"); 
          break;
        default:
          Serial.print("0x");Serial.println(results.value,HEX); 
      } 
    }  
//    else
//    { Serial.print("Type.: "); Serial.println(results.decode_type);
//    }  
    irrecv.resume(); //Attesa ricezione prossimo valore
  }
}

void checkPassword(){
  if (password.evaluate())
  { Serial.println("Password okay");
    //Add code to run if it works   
    password.reset();
  }else
  { Serial.println("Password errata");
    //add code to run if it did not work
  }
}

Versione con i tasti in un vettore:

// Ricevitore IR per telecomandi TV BlueSky riconosciuto come NEC 
// Ricevitore IR per telecomandi TV SHILNELCO come NEC 
#include <IRremote.h>
#include "Password.h"

                           // 0        1        2        3        4        5        6        7        8        9        10 ok    11 rst
unsigned long MappaTasti[]={0xFFAA55,0xFFDA25,0xFFF20D,0xFFCA35,0xFF5AA5,0xFFF00F,0xFF7A85,0xFF6A95,0xFF728D,0xFF4AB5,0xFF48B7,0xFFBA45};

#define VDIM(v) (sizeof(v)/sizeof(v[0]))

Password password = Password( "1234" );
const byte LED_PIN = 7;
const byte RECV_PIN = 9;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{ delay(1000);
  Serial.begin(9600);
  Serial.println("start");
  pinMode(LED_PIN,OUTPUT);
  irrecv.enableIRIn(); //Avvia ricezione
}

void loop() 
{ if (irrecv.decode(&results))
  { if(results.decode_type==NEC)
    { //Serial.print("NEC type: "); 
      for(int i=0;i<=VDIM(MappaTasti);i++)
      { if(results.value==MappaTasti[i])
        { if(i<10) 
          { password.append('0'+i);
            Serial.print('0'+i); Serial.print("->"); Serial.println(i);
          }
          if(i==10)
          { Serial.println("okay"); 
            checkPassword();
          }
          if(i==11)
          { Serial.println("reset"); 
            password.reset();
            digitalWrite(LED_PIN,LOW);
          }  
        }
      }
    }  
    irrecv.resume(); //Attesa ricezione prossimo valore
  }
}

void checkPassword(){
  if (password.evaluate())
  { Serial.println("Password okay");
    //Add code to run if it works   
    digitalWrite(LED_PIN,HIGH); 
  }else
  { Serial.println("Password errata");
    //Add code to run if it did not work
    digitalWrite(LED_PIN,LOW);
  }
  password.reset();
}

Direi che un aiuto più completo di così...

Meglio di cosi non mi potevi aiutare :D Però ho un problema il mio telecomando non è un NEK ma è un SAMSUNG e presumo che non sia nella lista della libreria dei telecomandi riconosciuti Ho caricato lo sketch negli esempi IRrecvDump che penso serva per identificare il tipo di telecomando, ma mi dice UNKNOWN

Scusate per la mia ignoranza in materia

Adesso non so come proseguire

Grazie

Ti allego zip con la libreria IRRemote a cui hanno aggiunto il SAMSUNG. Non ricordo il link da dove l’ho scaricata.
Non ricordo quanto sia aggiornata.

Arduino-IRremote_con_samsung.zip (32.6 KB)

Ho inserito la libreria che mi hai allegato il telecomando lo riconosce
poi ho messo nel vettore la sequenza dei miei tasti 0 1 2 3 4 5 6 7 8 9
nel 10 ho messo un tasto per il reset
nel 11 ho messo un tasto per la conferma della password

Inserisco la password 1234 poi premo il tasto di conferma, okay password errata
In allegato ti ho messo uno screenshot del monitor seriale
sotto lo sketch da me modificato

// Ricevitore IR per telecomandi TV BlueSky riconosciuto come NEC 
#include <IRremote.h>
#include <Password.h>

                           //   0          1          2           3          4          5          6         7          8           9        10       11
unsigned long MappaTasti[]={0xE0E08877,0xE0E020DF,0xE0E0A05F,0xE0E0609F,0xE0E010EF,0xE0E0906F,0xE0E050AF,0xE0E030CF,0xE0E0B04F,0xE0E0708F,0xE0E040BF,0xE0E016E9};

#define VDIM(v) (sizeof(v)/sizeof(v[0]))

Password password = Password( "1234");

const byte RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{ delay(1000);
  Serial.begin(9600);
  Serial.println("start");
  irrecv.enableIRIn(); //Avvia ricezione
}

void loop() 
{ if (irrecv.decode(&results))
  { if(results.decode_type==SAMSUNG)
    { //Serial.print("BLUESKY: "); 
      for(int i=0;i<=VDIM(MappaTasti);i++)
      { if(results.value==MappaTasti[i])
        { if(i<10) 
          { password.append('0');
            Serial.println(i); 
          }
          if(i==11)
          { Serial.println("okay"); 
            checkPassword();
          }
          if(i==10)
          { password.reset();
            Serial.println("reset"); 
          }  
        }
      }
    }  
    irrecv.resume(); //Attesa ricezione prossimo valore
    delay(1000);
  }
}

void checkPassword(){
  if (password.evaluate())
  { Serial.println("Password okay");
    //Add code to run if it works   
    password.reset();
  }else
  { Serial.println("Password errata");
    //add code to run if it did not work
  }
}

Faccio sempre append('0') Modifica così: password.append('0'+i);

Ho modificato il codice nel post #8

Adesso funziona tutto,
senza il tuo aiuto non ci sarei mai riuscito

Grazie

Prego :)