decifrare e rilanciare un segnale IR

La IRRemote in teoria è già dentro all'IDE 1.5.x sotto Robot... qualcosa.
Io preferisco cancellarla e mettere quella "ufficiale" ed aggiornata di shirriff:

C'e' lo sketch IRrecvDump.ino per sapere se la libreria riconosce il telecomando come standard (es. panasonic, toshiba, etc.), oppure devi andare di Raw data.
Con i dati raw poi si usa la SendRaw() e se cerchi nel forum o su internet ci sono info. A volte NON è facile capire come passare i dati Raw letti da sketch IRrecvDump alla SendRaw().

Qui il sito di Ken Shirriff: A Multi-Protocol Infrared Remote Library for the Arduino

Ah ... interessante!

Grazie mille! adesso mi cerco e mi studio tutto! :wink:

Ho trovato tutto, con un po' di fatica ho (forse) capito tutto.... usando un mac non so se ho installato correttamente le librerie, sta di fatto che quando verifico IRrecevDump mi viene restituita questa serie di errori:

In file included from IRrecvDump.ino:11:
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:13: error: stray '\302' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:13: error: stray '\267' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:13: error: stray '\302' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:13: error: stray '\267' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:544: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:548: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:651: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:655: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:659: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:663: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:667: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:671: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:675: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:679: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:683: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:687: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:691: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:695: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:699: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:712: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:839: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:843: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:847: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:851: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:855: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:974: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:978: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:995: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:1004: error: stray '#' in program
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:5: error: expected unqualified-id before '<' token

... ecco, questo non l'ho proprio capito e non so come risolverlo :sob:

Taotao:
Ho trovato tutto, con un po' di fatica ho (forse) capito tutto.... usando un mac non so se ho installato correttamente le librerie, sta di fatto che quando verifico IRrecevDump mi viene restituita questa serie di errori ....

... hai sicuramente aperto e salvato la libreria usando "TextEdit" che NON è un editor di testo puro, ma un RTF e ti ha infilato codici RTF nella libreria, codici che naturalmente NON vedi.

La devi riscaricare ex-novo (... trovare le porcherie dentro quella che ora hai è praticamente impossibile) ed usare un VERO editor di testo che NON lavori in RTF. Gratuito ti puoi scaricare da AppStore "TextWrangler".

Guglielmo

Ciao Guglielmo,

Sinceramente ho scaricato i files.h e quello .cpp e li ho messi in una cartella con lo stesso nome del file senza neanche aprirli... ho seguito le istruzioni che si trovano qui sul sito....

Proverò a cancellarle e a rifare l'operazione dopo aver installato il programma che mi hai consigliato perchè in effetti son proprio le librerie che non girano...

Grazie! :wink:

Mmm ... l'hai scaricata da GitHub, scompattato lo zip è solo copiata al posto giusto ? ? ?

Perché mi sembra strano che su GitHub abbiano un qualche cosa con caratteri sporchi dentro ('\302', '\267', ...) ...

Riprova e facci sapere :wink:

Guglielmo

P.S. : Ed in ogni caso, su Mac, quando usi file di testo ... non usare "TextEdit" o rischi sempre che te li trasforma in RTF :wink:

.... purtroppo errori su errori... ho provato a fare parecchi tentativi in modi diversi ma nulla... proverò a procurarmi un pc windows, anche se non credo sia quello il problema, nel frattempo farò un po' di esperienza... grazie comunque a tutti, vi farò sapere se su windows gira :slight_smile:

Se magari spieghi esattamente cosa fai, metti il sorgente tuo programma, spieghi dove hai messo le librerie e da dove le hai prese, ecc. ecc. dandoci tutti i dettagli ... magari possiamo aiutarti. :roll_eyes:

Io lavoro e sviluppo normalmente su OS X senza problemi ... quindi ...

Guglielmo

Oh, bene, sapere che usi anche tu un mac mi rincuora :slight_smile:

allora... scarico lo zip dal link consigliatomi da Igor: GitHub - Arduino-IRremote/Arduino-IRremote: Infrared remote library for Arduino: send and receive infrared signals with multiple protocols

scaricato lo decomprimo in una cartella qualsiasi, poi prendo i files con estensione .cpp e .h , creo una nuova cartella col nome del file senza estensione e ce li metto dentro (es. cartella IRremote dentro la quale si trovano IRremote.ccp e IRremote.h); a questo punto prendo le cartelle appena create con dentro le librerie e le copio dove ho capito che la Ide va a pescare ovvero: /users/tony/Documents/Arduino/libraries/ ... e in effetti, fra gli errori che restituiva, la "stringa" era corretta, quindi andava a pescarla proprio li: ( es.
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:974: error: stray '#' in program )

quindi, per quel poco che ne capisco, letto il comando che inserisce la libreria, la Ide trova errori nella libreria stessa... o no? ... la mia versione dell'Ide è l'ultima, e vedo che anche le librerie sono piuttosto aggiornate.... non so cosa pensare

Taotao:
/users/tony/Documents/Arduino/libraries/IRremote/IRremote.h:974: error: stray '#' in program )

Quel 974 vuol dire errore in riga 974, ma, puoi controllare anche su github, il file IRremote.h ha solo 128 righe.
La libreria poi ha anche il file IRremoteInt.h

Non conosco Mac, non è che usi un WinZip "strano" ?

Non mi hai detto che versione di IDE stai usando ... do per scontato che tu stia lavorando con la 1.0.6 ...

  1. Apri l'IDE, menu Arduino -> Preferenze e guarda quale è la tua cartella "Sketchbook" (la prima voce in alto) ... dentro quella cartella dovrà esistere una cartella di nome "libraries".

Es. nella mia macchina la cartella specificata nelle "Preferenze" è : "/Users/gpb01/Documents/Arduino" quindi, dovrà esistere una cartella "/Users/gpb01/Documents/Arduino/libraries/".

RICHIUDI l'IDE ... il resto va fatto ad IDE chiuso ...

  1. Vai sul link indicato, QUESTO e scarichi lo zip con l'apposito bottone a destra

  2. scompatti lo zip ed ottieni una cartella di nome "Arduino-IRremote-master".

  3. rinomini questa cartella con il nome "IRremote" e non tocchi altro

  4. butti via tutte le porcherie che hai copiato nella tua cartella "libraries" e ci copi la cartella così come è. Quindi avrai "/Users/gpb01/Documents/Arduino/libraries/IRremote/" (ovviamente NON con gpb01, ma con tony).

Riavvii l'IDE e ... miracolo, troverai nel menu File -> Esempi -> IRremote che conterrà esempi d'uso della IRremote da provare a compilare (NON devono dare errori).

A quel punto prendi spunto da quegli esempi ... e facci sapere.

Guglielmo

Ce l'ho fatta!!! :slight_smile: :slight_smile: :slight_smile:

in pratica dovevo mettere tutto sotto un' unica cartella, invece per IRremotelnt.h avevo fatto una cartella apposta.... avevo visto che aveva un nome diverso.... :stuck_out_tongue:

... adesso però ho un nuovo problema.... ovvero: il telecomando della tv viene letto e decifrato... quello della macchina fotografica (mio vero obiettivo) ... per niente.... :frowning: ... vabbè, almeno ho fatto un passettino in avanti :wink:

Taotao:
... adesso però ho un nuovo problema.... ovvero: il telecomando della tv viene letto e decifrato... quello della macchina fotografica (mio vero obiettivo) ... per niente.... :frowning: ... vabbè, almeno ho fatto un passettino in avanti :wink:

Per quello della macchina fotografica dovrai usare il metodo raw. Auguri :smiling_imp: :grinning:

Taotao:
in pratica dovevo mettere tutto sotto un' unica cartella, invece per IRremotelnt.h avevo fatto una cartella apposta.... avevo visto che aveva un nome diverso.... :stuck_out_tongue:

Le cartelle delle librerie NON SI TOCCANO ... si prendono così come sono, con tutti i files all'interno e si copiano. :smiling_imp:

Taotao:
... adesso però ho un nuovo problema.... ovvero: il telecomando della tv viene letto e decifrato... quello della macchina fotografica (mio vero obiettivo) ... per niente.... :frowning: ... vabbè, almeno ho fatto un passettino in avanti :wink:

... auguri ... dovrai analizzare il codice RAW e vedere se riesci a decodificarlo. Che fotocamera è ? magari il lavoro è già stato fatto ... :roll_eyes:

Guglielmo

Grazie mille per l'aiuto! :slight_smile: Intanto sono diventato un esperto nell'installazione delle librerie ... magari riuscirò a diventare esperto anche nella decodifica dei raw IR :slight_smile: :smiley: :smiley: :smiley:

La macchina è una canon 5 d MK II ... oltre a lei, avrei voluto comandare anche il flash (canon 580 EX II)

Per ora il telecomando del flash restituisce qualche risultato... ma ogni lettura è diversa dall'altra... bho, mistero... è lo stesso problema che mi dava lo sketch che usavo inizialmente...

Vade retro satana ... sono un NPS :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:

Ma una dritta te la do ugualmente ... non so se con IRremote riuscirai a tirare fuori qualche cosa ... ma, avendo a disposizione un PC con Win (o Parallels installato su Mac) dove farlo girare ... QUESTO prodotto per l'analisi dei segnali IR è ottimo !

Guglielmo

Grazie per la dritta Guglielmo! :slight_smile:

AnalysIR è a pagamento, ma non costa molto. Come detto da Guglielmo è veramente ottimo

io nel frattempo sono riuscito a far funzionare questo per decodificare il segnale... purtroppo a me funziona solo per il telecomando della tv però

/* Raw IR decoder sketch!
 
 This sketch/program uses the Arduno and a PNA4602 to 
 decode IR received. This can be used to make a IR receiver
 (by looking for a particular code)
 or transmitter (by pulsing an IR LED at ~38KHz for the
 durations detected 
 
 Code is public domain, check out www.ladyada.net and adafruit.com
 for more tutorials! 
 */

// We need to use the 'raw' pin reading methods
// because timing is very important here and the digitalRead()
// procedure is slower!
//uint8_t IRpin = 2;
// Digital pin #2 is the same as Pin D2 see
// http://arduino.cc/en/Hacking/PinMapping168 for the 'raw' pin mapping
#define IRpin_PIN      PIND
#define IRpin          2

// the maximum pulse we'll listen for - 65 milliseconds is a long time
#define MAXPULSE 65000

// what our timing resolution should be, larger is better
// as its more 'precise' - but too large and you wont get
// accurate timing
#define RESOLUTION 20 

// we will store up to 100 pulse pairs (this is -a lot-)
uint16_t pulses[100][2];  // pair is high and low pulse 
uint8_t currentpulse = 0; // index for pulses we're storing

void setup(void) {
  Serial.begin(9600);
  Serial.println("Ready to decode IR!");
}

void loop(void) {
  uint16_t highpulse, lowpulse;  // temporary storage timing
  highpulse = lowpulse = 0; // start out with no pulse length
  
  
//  while (digitalRead(IRpin)) { // this is too slow!
    while (IRpin_PIN & (1 << IRpin)) {
     // pin is still HIGH

     // count off another few microseconds
     highpulse++;
     delayMicroseconds(RESOLUTION);

     // If the pulse is too long, we 'timed out' - either nothing
     // was received or the code is finished, so print what
     // we've grabbed so far, and then reset
     if ((highpulse >= MAXPULSE) && (currentpulse != 0)) {
       printpulses();
       currentpulse=0;
       return;
     }
  }
  // we didn't time out so lets stash the reading
  pulses[currentpulse][0] = highpulse;
  
  // same as above
  while (! (IRpin_PIN & _BV(IRpin))) {
     // pin is still LOW
     lowpulse++;
     delayMicroseconds(RESOLUTION);
     if ((lowpulse >= MAXPULSE)  && (currentpulse != 0)) {
       printpulses();
       currentpulse=0;
       return;
     }
  }
  pulses[currentpulse][1] = lowpulse;

  // we read one high-low pulse successfully, continue!
  currentpulse++;
}

void printpulses(void) {
  Serial.println("\n\r\n\rReceived: \n\rOFF \tON");
  for (uint8_t i = 0; i < currentpulse; i++) {
    Serial.print(pulses[i][0] * RESOLUTION, DEC);
    Serial.print(" usec, ");
    Serial.print(pulses[i][1] * RESOLUTION, DEC);
    Serial.println(" usec");
  }
  
  // print it in a 'array' format
  Serial.println("int IRsignal[] = {");
  Serial.println("// ON, OFF ");
  for (uint8_t i = 0; i < currentpulse-1; i++) {
    //Serial.print("\t"); // tab
    Serial.print("pulseIR(");
    Serial.print(pulses[i][1] * RESOLUTION , DEC);
    Serial.print(");");
    Serial.println("");
    //Serial.print("\t");
    Serial.print("delayMicroseconds(");
    Serial.print(pulses[i+1][0] * RESOLUTION , DEC);
    Serial.println(");");

  }
  //Serial.print("\t"); // tab
  Serial.print("pulseIR(");
  Serial.print(pulses[currentpulse-1][1] * RESOLUTION, DEC);
  Serial.print(");");

}

e quest'altro per inviare il segnale:

// This sketch will send out a Nikon D50 trigger signal (probably works with most Nikons)
// See the full tutorial at http://www.ladyada.net/learn/sensors/ir.html
// this code is public domain, please enjoy!
 
int IRledPin =  13;    // LED connected to digital pin 13
 
// The setup() method runs once, when the sketch starts
 
void setup()   {                
  // initialize the IR digital pin as an output:
  pinMode(IRledPin, OUTPUT);      
 
  Serial.begin(9600);
}
 
void loop()                     
{
  Serial.println("Sending IR signal");
 
  SendNikonCode();
 
  delay(60*1000);  // wait one minute (60 seconds * 1000 milliseconds)
}
 
// This procedure sends a 38KHz pulse to the IRledPin 
// for a certain # of microseconds. We'll use this whenever we need to send codes
void pulseIR(long microsecs) {
  // we'll count down from the number of microseconds we are told to wait
 
  cli();  // this turns off any background interrupts
 
  while (microsecs > 0) {
    // 38 kHz is about 13 microseconds high and 13 microseconds low
   digitalWrite(IRledPin, HIGH);  // this takes about 3 microseconds to happen
   delayMicroseconds(10);         // hang out for 10 microseconds, you can also change this to 9 if its not working
   digitalWrite(IRledPin, LOW);   // this also takes about 3 microseconds
   delayMicroseconds(10);         // hang out for 10 microseconds, you can also change this to 9 if its not working
 
   // so 26 microseconds altogether
   microsecs -= 26;
  }
 
  sei();  // this turns them back on
}
 
void SendNikonCode() {
  // This is the code for my particular Nikon, for others use the tutorial
  // to 'grab' the proper code from the remote
 

//aggiungere i valori decriptati

}

Lo trovo molto comodo perchè lo sketch che decripta restituisce nella finestra i valori sotto forma di "stringa" che si può comodamente copiare e incollare nell' Ide, alla fine dello sketch di invio...

... non capisco come mai per accendere e spegnere la tv mi siano venute fuori 120 righe e dal telecomando della macchina fotografica 3 o 4 ... che variano in continuazione e neanche funzionano.... aspetterò che si iscriva al forum un tecnico della Canon :smiley: :smiley: :smiley:

I due sketch sono quelli che si possono trovare seguendo questo link:

ciao! :wink:

gpb01:
La devi riscaricare ex-novo (... trovare le porcherie dentro quella che ora hai è praticamente impossibile) ed usare un VERO editor di testo che NON lavori in RTF. Gratuito ti puoi scaricare da AppStore "TextWrangler".

[OT]
Da alcuni giorni ho scaricato ed uso TextMate.
Lo reputo meglio di TextWrangler. Consiglio di provarlo.
[/OT]