"Copiare" un segnale dati.

Ciao a tutti, ho un telecomando per comandare alcuni relè remoti che al momento sto cercando di comandare con diversi otpoisolatori.
Il funzionamento del telecomando è alquanto cervellotico perchè funziona per combinazioni di diversi fili e non sembra il classico "pin messo a GND".

Quindi pensavo di aggirare il problema alla radice: visto che nel telecomando sono segnati i pin VCC, GND, e DATA del modulo TX, se saldo due fili al gnd e data c'è modo di riuscire a campionare il segnale di ogni pulsante e riprodurlo?

Il telecomando è alimentato a 9 volt e il modulo TX ha il VCC in serie con un piccolo led quindi immagino che anche il segnale data sia > 5volt.
Posso campionarlo con un software per il pc? (collegando il data al microfono?)
Come faccio a fare l'output dell' onda? Basta misurare la distanza fra i diversi impulsi?

Grazie :wink:

perchè non te ne costrusci uno tu con un microcontrollore?

Io in teoria ho intenzione di fare la stessa cosa...
prendi un atmega lo programmi e lo metti su una basetta standalone, aggiungi il quarzo e i condensatori, una batteria piccola per l'alimentazione e dei bottoni da collegare ai pin del microcontrollore. Dopo con un modulo RF TX trasmetti all'arduino o a quello che devi trasmettere un comando alla pressione di ogni pulsante,,, Il ricevitore riceve, e in base a quello che riceve aziona i vari relè..

Non ti va bene una cosa del genere?

Ma devo prima cercare di capire che impulso manda il telecomando al tx..

non credo di arrivarci..

Se il telecomando te lo fai tu, e il ricevitore lo fai tu.. sei tu che decidi cosa il telecomando manda e quindi riceve...

Ad esempio.. Se tu dici al microcontrollore sul telecomando: alla pressione del bottone1 , scrivi sul PIN del trasmettitore una stringa con newsoftserial, e quindi con il myserialprint verrà ricevuta dall'altro microcontrollore e decodificata per azionare quello che ti serve..

In toeria è molto semplice, e decidi tu cosaa trasmattere.
Il problema è che questa per ora è solo teoria perchè ancora i moduli RF a distanza di 20 giorni non mi sono arrivati per fare le prove.

Sì ma le riceventi sono già fatte, confezionate e funzionanti.
Dovrei cambiare tutta l'elettronica delle RX visto che sono fatte con integrati ricoperti dalla classica pallina nera di resina!

Io devo capire come clonare il segnale che modula l'integrato del telecomando che viene mandato al TX (che è sempre presente nel telecomando ed è facilmente estraibile)

ok allora informaci dei progressi fatti :smiley:

Io no nappena arrivano i miei modulini farò altrettanto

Guglio:
Sì ma le riceventi sono già fatte, confezionate e funzionanti.
Dovrei cambiare tutta l'elettronica delle RX visto che sono fatte con integrati ricoperti dalla classica pallina nera di resina!

Io devo capire come clonare il segnale che modula l'integrato del telecomando che viene mandato al TX (che è sempre presente nel telecomando ed è facilmente estraibile)

Ciao,
se il segnale esce su un uno filo "data" probabilmente sarà un treno di impulsi; concettualmente ti dovrebbe bastare applicarlo ad un pin digitale (o forse sul seriale) dell'Arduino e leggere la sequenza di stati high e low, non credo che un telecomando invii segnali ad una velocità superiore ai tempi di lettura di Arduino. Questa è l'idea, io me la cavo di più con l'elettronica che con la programmazione, essendo alle prime armi, ma ci sono tanti bravi che certamente ti posteranno un codice di partenza, senza prenderti per i fondelli...

il metodo esposto da menniti è valido, basta attaccare il data ad un pin e poi usare pulseIn() per sapere la durata del segnale alto/basso.
Se poi la durate risulta > 100microsec allora puoi attaccare data ad un pin analogico e usare analogread() per essere sicuro che l'output sia digitale e non analogico.

Il codice in entrambi i casi è semplicissimo, nel loop fai una lettura, serial.println() e fine :slight_smile:

tra l'altro con questo codice puoi "catturare" i vari codici del telecomando in base al tasto premuto.

Una cosa del genere?

void setup()
{
  pinMode(pin, 7);
Serial.begin(9600);
}

void loop()
{
unsigned long duration;
Serial.print("Loop ");
Serial.println(millis());
duration = pulseIn(7, HIGH);
Serial.println(duration);
}

Al momento non riesco a provarlo perchè non ho la punta del saldatore :grin: :grin: rimando a domani

Guglio:
Una cosa del genere?

void setup()

{
  pinMode(pin, 7);
Serial.begin(9600);
}

Forse è:

int pin = 7;                

void setup()
{
  pinMode(pin, INPUT);
...........
}



ma potrei sbagliarmi :~

Ok, ho usato questo codice:

void setup()
{
  pinMode(7, INPUT);
Serial.begin(9600);
}

void loop()
{
unsigned long duration;
Serial.print("Millis: ");
Serial.print(millis());
Serial.print(" pulse: ");
duration = pulseIn(7, HIGH);
Serial.println(duration);
}

Ed ho campionato lo stesso tasto 3 volte e mi saltano fuori 3 cose diverse....

Millis: 2184 pulse: 669
Millis: 2239 pulse: 722
Millis: 2266 pulse: 675
Millis: 2362 pulse: 722
Millis: 2388 pulse: 676
Millis: 2484 pulse: 727



Millis: 5782 pulse: 669
Millis: 6304 pulse: 722
Millis: 6331 pulse: 669
Millis: 6427 pulse: 722
Millis: 6454 pulse: 669
Millis: 6549 pulse: 722
Millis: 6576 pulse: 669
Millis: 6671 pulse: 722



Millis: 9970 pulse: 674
Millis: 10542 pulse: 729
Millis: 10568 pulse: 675
Millis: 10664 pulse: 728
Millis: 10691 pulse: 669
Millis: 10786 pulse: 721
Millis: 10814 pulse: 676
Millis: 10909 pulse: 729
Millis: 10936 pulse: 675
Millis: 11031 pulse: 728

Ho cambiato script...
sto provando con:

void setup()
{
pinMode(7, INPUT);
Serial.begin(9600);
}


void loop()
{
unsigned long high;
unsigned long low;

high = pulseIn(7, HIGH);
low = pulseIn(7, LOW);

Serial.print("HIGH: ");
Serial.print(high);
Serial.print("    LOW: ");
Serial.println(low);
}

E ho come risultato con lo stesso bottone questo:

HIGH: 669    LOW: 643
HIGH: 721    LOW: 642
HIGH: 668    LOW: 649
HIGH: 722    LOW: 649
HIGH: 669    LOW: 642
HIGH: 721    LOW: 643


HIGH: 669    LOW: 649
HIGH: 722    LOW: 649
HIGH: 668    LOW: 648
HIGH: 722    LOW: 648
HIGH: 669    LOW: 642
HIGH: 722    LOW: 643


HIGH: 668    LOW: 642
HIGH: 722    LOW: 642
HIGH: 669    LOW: 642
HIGH: 722    LOW: 642
HIGH: 674    LOW: 642
HIGH: 722    LOW: 642

Quindi sto provando questo script:

void setup()
{
pinMode(7, OUTPUT);

}
void loop()
{
  
  /*
HIGH: 668    LOW: 642
HIGH: 722    LOW: 642
HIGH: 669    LOW: 642
HIGH: 722    LOW: 642
HIGH: 674    LOW: 642
HIGH: 722    LOW: 642
*/

digitalWrite(7,HIGH);
delayMicroseconds(668);
digitalWrite(7,LOW);
delayMicroseconds(642);


digitalWrite(7,HIGH);
delayMicroseconds(722);
digitalWrite(7,LOW);
delayMicroseconds(642);

digitalWrite(7,HIGH);
delayMicroseconds(669);
digitalWrite(7,LOW);
delayMicroseconds(642);

digitalWrite(7,HIGH);
delayMicroseconds(722);
digitalWrite(7,LOW);
delayMicroseconds(642);

digitalWrite(7,HIGH);
delayMicroseconds(674);
digitalWrite(7,LOW);
delayMicroseconds(642);

digitalWrite(7,HIGH);
delayMicroseconds(722);
digitalWrite(7,LOW);
delayMicroseconds(642);
delay(2000);

}

Senza risultati.
Il led del telecomando lampeggia molto più velocemente rispetto a quando premo normalmente un bottone..
Significa che c'è qualche tempo sballato ma non so dove!!

Idee?

  1. stai lavorando in microsecondi, le serial ti rallentano troppo. campiona in un array più valori e a fine campionamento stampale.
  2. qual'è il campionamento senza tasti premuti, con tasto premuto e con altro tasto premuto

Guglio:
Posso campionarlo con un software per il pc? (collegando il data al microfono?)

Credo si possa fare, se sei sicuro che il voltaggio massimo non frigga tutto...

Usa Audacity 1.2 per campionare:; le versioni successive non mostrano i millisecondi.

Ciao Jumpjack, se uso il tuo metodo poi devo trascrivere manualmente i valori nel codice dell'arduino o utilizzare un pc per comandare la scheda.

Ho usato il codice trovato qua per campionare il segnale: Sensor tutorials - IR remote receiver/decoder tutorial

Ho come risultato

Ready to decode IR!



Received: 

OFF 	ON

0 usec, 17572 usec
660 usec, 1280 usec
720 usec, 640 usec
1360 usec, 1300 usec
720 usec, 1300 usec
700 usec, 640 usec
1360 usec, 640 usec
1360 usec, 660 usec
1360 usec, 640 usec
1380 usec, 640 usec
1360 usec, 640 usec
1380 usec, 640 usec
1360 usec, 640 usec
1360 usec, 1300 usec
720 usec, 640 usec
1360 usec, 640 usec
1360 usec, 1300 usec
740 usec, 640 usec
1360 usec, 640 usec
1360 usec, 1300 usec
720 usec, 1280 usec
680 usec, 13404 usec
660 usec, 1300 usec
700 usec, 640 usec
1380 usec, 1280 usec
720 usec, 1300 usec
700 usec, 640 usec
1380 usec, 620 usec
1380 usec, 640 usec
1360 usec, 640 usec
1400 usec, 620 usec
1380 usec, 640 usec
1360 usec, 640 usec
1360 usec, 640 usec
1380 usec, 1280 usec
720 usec, 640 usec
1360 usec, 640 usec
1380 usec, 1280 usec
740 usec, 640 usec
1360 usec, 640 usec
1380 usec, 1280 usec
720 usec, 1300 usec
660 usec, 13364 usec
660 usec, 1300 usec
700 usec, 640 usec
1380 usec, 1280 usec
720 usec, 1300 usec
700 usec, 640 usec
1380 usec, 620 usec
1380 usec, 640 usec
1360 usec, 640 usec
1400 usec, 620 usec
1380 usec, 620 usec
1380 usec, 640 usec
1360 usec, 640 usec
1380 usec, 1280 usec
720 usec, 640 usec
1360 usec, 640 usec
1360 usec, 1300 usec
740 usec, 640 usec
1360 usec, 640 usec
1380 usec, 1280 usec
720 usec, 1300 usec

Solo che se provo a portare ad high e low il pin data con quei valori non funge.. (Ho fatto fare il pharse dell' output della seriale da uno script quindi dubito che ci possano essere valori sballati)

int IRledPin = 13;
void setup(){
  pinMode(IRledPin, OUTPUT);     
}

void loop() {
digitalWrite(IRledPin, LOW);
delayMicroseconds(0);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(17572);
digitalWrite(IRledPin, LOW);
delayMicroseconds(660);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(1280);
digitalWrite(IRledPin, LOW);
delayMicroseconds(720);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1360);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(1300);
digitalWrite(IRledPin, LOW);
delayMicroseconds(720);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(1300);
digitalWrite(IRledPin, LOW);
delayMicroseconds(700);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1360);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1360);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(660);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1360);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1380);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1360);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1380);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1360);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1360);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(1300);
digitalWrite(IRledPin, LOW);
delayMicroseconds(720);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1360);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1360);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(1300);
digitalWrite(IRledPin, LOW);
delayMicroseconds(740);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1360);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1360);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(1300);
digitalWrite(IRledPin, LOW);
delayMicroseconds(720);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(1280);
digitalWrite(IRledPin, LOW);
delayMicroseconds(680);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(13404);
digitalWrite(IRledPin, LOW);
delayMicroseconds(660);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(1300);
digitalWrite(IRledPin, LOW);
delayMicroseconds(700);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1380);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(1280);
digitalWrite(IRledPin, LOW);
delayMicroseconds(720);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(1300);
digitalWrite(IRledPin, LOW);
delayMicroseconds(700);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1380);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(620);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1380);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1360);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1400);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(620);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1380);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1360);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1360);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1380);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(1280);
digitalWrite(IRledPin, LOW);
delayMicroseconds(720);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1360);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1380);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(1280);
digitalWrite(IRledPin, LOW);
delayMicroseconds(740);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1360);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1380);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(1280);
digitalWrite(IRledPin, LOW);
delayMicroseconds(720);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(1300);
digitalWrite(IRledPin, LOW);
delayMicroseconds(660);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(13364);
digitalWrite(IRledPin, LOW);
delayMicroseconds(660);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(1300);
digitalWrite(IRledPin, LOW);
delayMicroseconds(700);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1380);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(1280);
digitalWrite(IRledPin, LOW);
delayMicroseconds(720);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(1300);
digitalWrite(IRledPin, LOW);
delayMicroseconds(700);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1380);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(620);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1380);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1360);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1400);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(620);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1380);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(620);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1380);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1360);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1380);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(1280);
digitalWrite(IRledPin, LOW);
delayMicroseconds(720);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1360);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1360);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(1300);
digitalWrite(IRledPin, LOW);
delayMicroseconds(740);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1360);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(640);
digitalWrite(IRledPin, LOW);
delayMicroseconds(1380);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(1280);
digitalWrite(IRledPin, LOW);
delayMicroseconds(720);
digitalWrite(IRledPin, HIGH);
delayMicroseconds(1300);         
digitalWrite(IRledPin, LOW);   ///// RIPORTO IL VALORE DEL PIN A LOW
delay(2000);
}

Attenzione perchè quelle non sono le durate del segnale alto, ma della portante modulata a 48000 Hz!
Non basta un digitalWrite, ti serve la llibreria per infrarossi, oppure ti scrivi da te una funzioncina che accende/spegne 48000 volte al secondo per un tempo prefissato.
Che so, tipo:

void carrier(int value) {
if(value==1) {
digitalWrite(outpin,HIGH);
} else {
digitalWrite(outpin,LOW);
}
delayMicroseconds(ONOFF);
digitalWrite(outpin,LOW);
delayMicroseconds(ONOFF);
}

Questo produce un valore alto/basso per ONOFF milionesimi di secondo e un valore basso per altrettanto tempo; alto e basso insieme devono durare 1/48000 secondi, quindi ognuno 1/96000 secondi, cioè 1'000'000/96'000 microsecondi, cioè circa 10 us (cioè ONOFF=10)

Poi carrier() va ripetuto per la durata del segnale alto: se deve durare 17'000 us, dovrà essere ripetuto 1'700 volte.

void SignalOn(int length) {
for(int i =0; i<=length/10; i++) {
carrier(1);
}
}

void SignalOff(int length) {
for(int i =0; i<=length/10; i++) {
carrier(0);
}
}

Belllo, vero? Tutta teoria, me lo sono appena inventato, mai provato! :slight_smile:
Pero' se funziona fammi un fischio, perche' serve pure a me! :wink:

O.o ma che cazz? ahaha
Devo ancora mangiare ho il cervello in risparmio energetico :grin: :grin:
Come faccio a capire a quanti Hz è la mia portante? (Cioè 48000 l'hai sparato o è giusto?)
Ma anche se il telecomando è radio ha ugualmente una portante come gli IR?

Quindi
Quindi la funzione che devo usare è tipo questa: ?
(Riadattata usando il tuo sketch e quello di LadyAda)

void pulsa(long microsecs) {
  cli();  
  while (microsecs > 0) {
    // 5 up e 5 low:
   digitalWrite(IRledPin, HIGH);  // this takes about 3 microseconds to happen
   delayMicroseconds(2);         // hang out for 2 microseconds
   digitalWrite(IRledPin, LOW);   // this also takes about 3 microseconds
   delayMicroseconds(2);         // hang out for 2 microseconds
 
   // so 26 microseconds altogether
   microsecs -= 10;
  }
  sei(); 
}

Sa che la provo..

Solo che sto guardando il tuo codice ed è un po' diverso... li provo tutti e due e vedo se va :wink:

Ok non funziona nè questo

int outpin =  13;    // LED connected to digital pin 13
 
void setup()   {                
  pinMode(outpin, OUTPUT);      
}

void carrier(int value) {
  if(value==1) {
      digitalWrite(outpin,HIGH);
   } else {
      digitalWrite(outpin,LOW);
  }
  delayMicroseconds(10);
  digitalWrite(outpin,LOW);
  delayMicroseconds(10);
}

void SignalOn(int length) {
  for(int i =0; i<=length/10; i++) {
      carrier(1);
  }
}

void SignalOff(int length) {
  for(int i =0; i<=length/10; i++) {
      carrier(0);
  }
}


void loop(){
SignalOff(0);
SignalOn(17572);
SignalOff(660);
SignalOn(1280);
SignalOff(720);
SignalOn(640);
SignalOff(1360);
SignalOn(1300);
SignalOff(720);
SignalOn(1300);
SignalOff(700);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1360);
SignalOn(660);
SignalOff(1360);
SignalOn(640);
SignalOff(1380);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1380);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1360);
SignalOn(1300);
SignalOff(720);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1360);
SignalOn(1300);
SignalOff(740);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1360);
SignalOn(1300);
SignalOff(720);
SignalOn(1280);
SignalOff(680);
SignalOn(13404);
SignalOff(660);
SignalOn(1300);
SignalOff(700);
SignalOn(640);
SignalOff(1380);
SignalOn(1280);
SignalOff(720);
SignalOn(1300);
SignalOff(700);
SignalOn(640);
SignalOff(1380);
SignalOn(620);
SignalOff(1380);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1400);
SignalOn(620);
SignalOff(1380);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1380);
SignalOn(1280);
SignalOff(720);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1380);
SignalOn(1280);
SignalOff(740);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1380);
SignalOn(1280);
SignalOff(720);
SignalOn(1300);
SignalOff(660);
SignalOn(13364);
SignalOff(660);
SignalOn(1300);
SignalOff(700);
SignalOn(640);
SignalOff(1380);
SignalOn(1280);
SignalOff(720);
SignalOn(1300);
SignalOff(700);
SignalOn(640);
SignalOff(1380);
SignalOn(620);
SignalOff(1380);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1400);
SignalOn(620);
SignalOff(1380);
SignalOn(620);
SignalOff(1380);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1380);
SignalOn(1280);
SignalOff(720);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1360);
SignalOn(1300);
SignalOff(740);
SignalOn(640);
SignalOff(1360);
SignalOn(640);
SignalOff(1380);
SignalOn(1280);
SignalOff(720);
SignalOn(1300);
delay(2000);
}

Nè questo...

int IRledPin =  13;    // LED connected to digital pin 13
 
void setup()   {                
  pinMode(IRledPin, OUTPUT);      
}

void pulsa(long microsecs) {
  cli();  
  while (microsecs > 0) {
    // 5 up e 5 low:
   digitalWrite(IRledPin, HIGH);  // this takes about 3 microseconds to happen
   delayMicroseconds(2);         // hang out for 2 microseconds
   digitalWrite(IRledPin, LOW);   // this also takes about 3 microseconds
   delayMicroseconds(2);         // hang out for 2 microseconds
 
   // so 26 microseconds altogether
   microsecs -= 10;
  }
  sei(); 
}

void loop(){
delayMicroseconds(0);
pulsa(17572);
delayMicroseconds(660);
pulsa(1280);
delayMicroseconds(720);
pulsa(640);
delayMicroseconds(1360);
pulsa(1300);
delayMicroseconds(720);
pulsa(1300);
delayMicroseconds(700);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1360);
pulsa(660);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1380);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1380);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1360);
pulsa(1300);
delayMicroseconds(720);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1360);
pulsa(1300);
delayMicroseconds(740);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1360);
pulsa(1300);
delayMicroseconds(720);
pulsa(1280);
delayMicroseconds(680);
pulsa(13404);
delayMicroseconds(660);
pulsa(1300);
delayMicroseconds(700);
pulsa(640);
delayMicroseconds(1380);
pulsa(1280);
delayMicroseconds(720);
pulsa(1300);
delayMicroseconds(700);
pulsa(640);
delayMicroseconds(1380);
pulsa(620);
delayMicroseconds(1380);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1400);
pulsa(620);
delayMicroseconds(1380);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1380);
pulsa(1280);
delayMicroseconds(720);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1380);
pulsa(1280);
delayMicroseconds(740);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1380);
pulsa(1280);
delayMicroseconds(720);
pulsa(1300);
delayMicroseconds(660);
pulsa(13364);
delayMicroseconds(660);
pulsa(1300);
delayMicroseconds(700);
pulsa(640);
delayMicroseconds(1380);
pulsa(1280);
delayMicroseconds(720);
pulsa(1300);
delayMicroseconds(700);
pulsa(640);
delayMicroseconds(1380);
pulsa(620);
delayMicroseconds(1380);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1400);
pulsa(620);
delayMicroseconds(1380);
pulsa(620);
delayMicroseconds(1380);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1380);
pulsa(1280);
delayMicroseconds(720);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1360);
pulsa(1300);
delayMicroseconds(740);
pulsa(640);
delayMicroseconds(1360);
pulsa(640);
delayMicroseconds(1380);
pulsa(1280);
delayMicroseconds(720);
pulsa(1300);
delay(2000);
}

Idee?
Mi sa che inizio a tirare fuori gli optoisolatori e a saldarli su ogni tasto =(

Guglio:
Ok non funziona nè questo

Non mi stupisce... :stuck_out_tongue:

nè questo
[...]
Idee?

Sì: cerca la libreria Arduino per gli infrarossi, so che esiste!
E controlla con una telecamera se i tuoi led emettono effettivamente qualcosa (le telecamere comuni vedono gli infrarossi).

Guglio:
O.o ma che cazz? ahaha
Devo ancora mangiare ho il cervello in risparmio energetico :grin: :grin:
Come faccio a capire a quanti Hz è la mia portante? (Cioè 48000 l'hai sparato o è giusto?)

Un po' tutt'e due... So che è 48000 Hz per vari studi che ho fatto... pero' ho la memoria corta, erano 38000, non 48000! :roll_eyes:
In rari casi pare che sia 36000 Hz,ma in genere i tlc dei televisori vanno tutti a 38000 , anche se ognuno con una sua codifica.

Ferma tutto, ma io non sto usando un telecomando IR, sto usando un telecomando RF.