annotate service/busyboxArduino/IRremote/examples/IRtest2/IRtest2.ino @ 155:e88308cea843

add IRremote Ignore-this: c295c68f923af8d072841f1d7c1e5ab8
author drewp@bigasterisk.com
date Mon, 19 Jan 2015 17:55:26 -0800
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
155
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
1 /*
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
2 * Test send/receive functions of IRremote, using a pair of Arduinos.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
3 *
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
4 * Arduino #1 should have an IR LED connected to the send pin (3).
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
5 * Arduino #2 should have an IR detector/demodulator connected to the
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
6 * receive pin (11) and a visible LED connected to pin 3.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
7 *
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
8 * The cycle:
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
9 * Arduino #1 will wait 2 seconds, then run through the tests.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
10 * It repeats this forever.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
11 * Arduino #2 will wait for at least one second of no signal
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
12 * (to synchronize with #1). It will then wait for the same test
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
13 * signals. It will log all the status to the serial port. It will
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
14 * also indicate status through the LED, which will flash each time a test
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
15 * is completed. If there is an error, it will light up for 5 seconds.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
16 *
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
17 * The test passes if the LED flashes 19 times, pauses, and then repeats.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
18 * The test fails if the LED lights for 5 seconds.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
19 *
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
20 * The test software automatically decides which board is the sender and which is
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
21 * the receiver by looking for an input on the send pin, which will indicate
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
22 * the sender. You should hook the serial port to the receiver for debugging.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
23 *
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
24 * Copyright 2010 Ken Shirriff
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
25 * http://arcfn.com
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
26 */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
27
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
28 #include <IRremote.h>
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
29
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
30 int RECV_PIN = 11;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
31 int LED_PIN = 3;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
32
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
33 IRrecv irrecv(RECV_PIN);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
34 IRsend irsend;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
35
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
36 decode_results results;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
37
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
38 #define RECEIVER 1
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
39 #define SENDER 2
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
40 #define ERROR 3
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
41
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
42 int mode;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
43
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
44 void setup()
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
45 {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
46 Serial.begin(9600);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
47 // Check RECV_PIN to decide if we're RECEIVER or SENDER
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
48 if (digitalRead(RECV_PIN) == HIGH) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
49 mode = RECEIVER;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
50 irrecv.enableIRIn();
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
51 pinMode(LED_PIN, OUTPUT);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
52 digitalWrite(LED_PIN, LOW);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
53 Serial.println("Receiver mode");
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
54 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
55 else {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
56 mode = SENDER;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
57 Serial.println("Sender mode");
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
58 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
59 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
60
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
61 // Wait for the gap between tests, to synchronize with
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
62 // the sender.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
63 // Specifically, wait for a signal followed by a gap of at last gap ms.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
64 void waitForGap(int gap) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
65 Serial.println("Waiting for gap");
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
66 while (1) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
67 while (digitalRead(RECV_PIN) == LOW) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
68 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
69 unsigned long time = millis();
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
70 while (digitalRead(RECV_PIN) == HIGH) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
71 if (millis() - time > gap) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
72 return;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
73 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
74 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
75 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
76 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
77
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
78 // Dumps out the decode_results structure.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
79 // Call this after IRrecv::decode()
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
80 void dump(decode_results *results) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
81 int count = results->rawlen;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
82 if (results->decode_type == UNKNOWN) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
83 Serial.println("Could not decode message");
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
84 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
85 else {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
86 if (results->decode_type == NEC) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
87 Serial.print("Decoded NEC: ");
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
88 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
89 else if (results->decode_type == SONY) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
90 Serial.print("Decoded SONY: ");
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
91 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
92 else if (results->decode_type == RC5) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
93 Serial.print("Decoded RC5: ");
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
94 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
95 else if (results->decode_type == RC6) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
96 Serial.print("Decoded RC6: ");
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
97 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
98 Serial.print(results->value, HEX);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
99 Serial.print(" (");
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
100 Serial.print(results->bits, DEC);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
101 Serial.println(" bits)");
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
102 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
103 Serial.print("Raw (");
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
104 Serial.print(count, DEC);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
105 Serial.print("): ");
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
106
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
107 for (int i = 0; i < count; i++) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
108 if ((i % 2) == 1) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
109 Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
110 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
111 else {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
112 Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
113 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
114 Serial.print(" ");
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
115 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
116 Serial.println("");
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
117 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
118
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
119
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
120 // Test send or receive.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
121 // If mode is SENDER, send a code of the specified type, value, and bits
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
122 // If mode is RECEIVER, receive a code and verify that it is of the
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
123 // specified type, value, and bits. For success, the LED is flashed;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
124 // for failure, the mode is set to ERROR.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
125 // The motivation behind this method is that the sender and the receiver
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
126 // can do the same test calls, and the mode variable indicates whether
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
127 // to send or receive.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
128 void test(char *label, int type, unsigned long value, int bits) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
129 if (mode == SENDER) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
130 Serial.println(label);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
131 if (type == NEC) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
132 irsend.sendNEC(value, bits);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
133 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
134 else if (type == SONY) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
135 irsend.sendSony(value, bits);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
136 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
137 else if (type == RC5) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
138 irsend.sendRC5(value, bits);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
139 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
140 else if (type == RC6) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
141 irsend.sendRC6(value, bits);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
142 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
143 else {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
144 Serial.print(label);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
145 Serial.println("Bad type!");
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
146 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
147 delay(200);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
148 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
149 else if (mode == RECEIVER) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
150 irrecv.resume(); // Receive the next value
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
151 unsigned long max_time = millis() + 30000;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
152 Serial.print(label);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
153
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
154 // Wait for decode or timeout
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
155 while (!irrecv.decode(&results)) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
156 if (millis() > max_time) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
157 Serial.println("Timeout receiving data");
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
158 mode = ERROR;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
159 return;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
160 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
161 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
162 if (type == results.decode_type && value == results.value && bits == results.bits) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
163 Serial.println (": OK");
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
164 digitalWrite(LED_PIN, HIGH);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
165 delay(20);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
166 digitalWrite(LED_PIN, LOW);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
167 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
168 else {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
169 Serial.println(": BAD");
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
170 dump(&results);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
171 mode = ERROR;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
172 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
173 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
174 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
175
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
176 // Test raw send or receive. This is similar to the test method,
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
177 // except it send/receives raw data.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
178 void testRaw(char *label, unsigned int *rawbuf, int rawlen) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
179 if (mode == SENDER) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
180 Serial.println(label);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
181 irsend.sendRaw(rawbuf, rawlen, 38 /* kHz */);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
182 delay(200);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
183 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
184 else if (mode == RECEIVER ) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
185 irrecv.resume(); // Receive the next value
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
186 unsigned long max_time = millis() + 30000;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
187 Serial.print(label);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
188
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
189 // Wait for decode or timeout
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
190 while (!irrecv.decode(&results)) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
191 if (millis() > max_time) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
192 Serial.println("Timeout receiving data");
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
193 mode = ERROR;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
194 return;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
195 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
196 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
197
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
198 // Received length has extra first element for gap
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
199 if (rawlen != results.rawlen - 1) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
200 Serial.print("Bad raw length ");
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
201 Serial.println(results.rawlen, DEC);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
202 mode = ERROR;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
203 return;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
204 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
205 for (int i = 0; i < rawlen; i++) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
206 long got = results.rawbuf[i+1] * USECPERTICK;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
207 // Adjust for extra duration of marks
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
208 if (i % 2 == 0) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
209 got -= MARK_EXCESS;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
210 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
211 else {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
212 got += MARK_EXCESS;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
213 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
214 // See if close enough, within 25%
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
215 if (rawbuf[i] * 1.25 < got || got * 1.25 < rawbuf[i]) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
216 Serial.println(": BAD");
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
217 dump(&results);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
218 mode = ERROR;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
219 return;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
220 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
221
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
222 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
223 Serial.println (": OK");
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
224 digitalWrite(LED_PIN, HIGH);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
225 delay(20);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
226 digitalWrite(LED_PIN, LOW);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
227 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
228 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
229
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
230 // This is the raw data corresponding to NEC 0x12345678
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
231 unsigned int sendbuf[] = { /* NEC format */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
232 9000, 4500,
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
233 560, 560, 560, 560, 560, 560, 560, 1690, /* 1 */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
234 560, 560, 560, 560, 560, 1690, 560, 560, /* 2 */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
235 560, 560, 560, 560, 560, 1690, 560, 1690, /* 3 */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
236 560, 560, 560, 1690, 560, 560, 560, 560, /* 4 */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
237 560, 560, 560, 1690, 560, 560, 560, 1690, /* 5 */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
238 560, 560, 560, 1690, 560, 1690, 560, 560, /* 6 */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
239 560, 560, 560, 1690, 560, 1690, 560, 1690, /* 7 */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
240 560, 1690, 560, 560, 560, 560, 560, 560, /* 8 */
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
241 560};
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
242
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
243 void loop() {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
244 if (mode == SENDER) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
245 delay(2000); // Delay for more than gap to give receiver a better chance to sync.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
246 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
247 else if (mode == RECEIVER) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
248 waitForGap(1000);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
249 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
250 else if (mode == ERROR) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
251 // Light up for 5 seconds for error
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
252 digitalWrite(LED_PIN, HIGH);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
253 delay(5000);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
254 digitalWrite(LED_PIN, LOW);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
255 mode = RECEIVER; // Try again
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
256 return;
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
257 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
258
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
259 // The test suite.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
260 test("SONY1", SONY, 0x123, 12);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
261 test("SONY2", SONY, 0x000, 12);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
262 test("SONY3", SONY, 0xfff, 12);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
263 test("SONY4", SONY, 0x12345, 20);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
264 test("SONY5", SONY, 0x00000, 20);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
265 test("SONY6", SONY, 0xfffff, 20);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
266 test("NEC1", NEC, 0x12345678, 32);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
267 test("NEC2", NEC, 0x00000000, 32);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
268 test("NEC3", NEC, 0xffffffff, 32);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
269 test("NEC4", NEC, REPEAT, 32);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
270 test("RC51", RC5, 0x12345678, 32);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
271 test("RC52", RC5, 0x0, 32);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
272 test("RC53", RC5, 0xffffffff, 32);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
273 test("RC61", RC6, 0x12345678, 32);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
274 test("RC62", RC6, 0x0, 32);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
275 test("RC63", RC6, 0xffffffff, 32);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
276
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
277 // Tests of raw sending and receiving.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
278 // First test sending raw and receiving raw.
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
279 // Then test sending raw and receiving decoded NEC
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
280 // Then test sending NEC and receiving raw
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
281 testRaw("RAW1", sendbuf, 67);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
282 if (mode == SENDER) {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
283 testRaw("RAW2", sendbuf, 67);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
284 test("RAW3", NEC, 0x12345678, 32);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
285 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
286 else {
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
287 test("RAW2", NEC, 0x12345678, 32);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
288 testRaw("RAW3", sendbuf, 67);
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
289 }
e88308cea843 add IRremote
drewp@bigasterisk.com
parents:
diff changeset
290 }