Hi thanks. It's the output of the receiver that goes to the controller that I want to replicate, not the connection between Tx and Rx.
I just want to manually send whatever signal the receiver sends down the signal wire to controller. So is it a pwm signal im trying to read then?
I found the following code for a raw ir decoder:
/* 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(");");
}
When I ran it and pressed one of the remote buttons, I got this result on the output signal wire from the receiver:
Ready to decode IR!
Received:
OFF ON
32608 usec, 500 usec
22120 usec, 480 usec
10820 usec, 500 usec
10800 usec, 500 usec
7060 usec, 500 usec
7060 usec, 480 usec
10820 usec, 480 usec
22120 usec, 500 usec
10820 usec, 480 usec
10820 usec, 480 usec
7060 usec, 500 usec
7060 usec, 500 usec
10800 usec, 500 usec
int IRsignal[] = {
// ON, OFF
pulseIR(500);
delayMicroseconds(22120);
pulseIR(480);
delayMicroseconds(10820);
pulseIR(500);
delayMicroseconds(10800);
pulseIR(500);
delayMicroseconds(7060);
pulseIR(500);
delayMicroseconds(7060);
pulseIR(480);
delayMicroseconds(10820);
pulseIR(480);
delayMicroseconds(22120);
pulseIR(500);
delayMicroseconds(10820);
pulseIR(480);
delayMicroseconds(10820);
pulseIR(480);
delayMicroseconds(7060);
pulseIR(500);
delayMicroseconds(7060);
pulseIR(500);
delayMicroseconds(10800);
pulseIR(500);
This is pretty much the same results as i got before, but more detailed. So is this the rite output and can i use it?
Thanks.