summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander@sulfrian.net>2011-11-18 22:06:49 +0100
committerAlexander Sulfrian <alexander@sulfrian.net>2011-11-18 22:06:49 +0100
commitae455ef0bca4ea7a7119dac1ed28f5aab9bae265 (patch)
tree48ccd327a9d7ce747163bd97b24f73cf9eea3a68
parenta531b10c8f67d5492efb7e3f6fc43d2200cf579f (diff)
downloadonkyo-ri-ae455ef0bca4ea7a7119dac1ed28f5aab9bae265.tar.gz
onkyo-ri-ae455ef0bca4ea7a7119dac1ed28f5aab9bae265.tar.xz
onkyo-ri-ae455ef0bca4ea7a7119dac1ed28f5aab9bae265.zip
add logic for sending ir signals
-rw-r--r--onkyo_ri.pde37
1 files changed, 37 insertions, 0 deletions
diff --git a/onkyo_ri.pde b/onkyo_ri.pde
index 9f8c607..a23c920 100644
--- a/onkyo_ri.pde
+++ b/onkyo_ri.pde
@@ -30,6 +30,43 @@ uint64_t listenForIR(ir_t *proto);
int getPulseLength();
int getPulseLengthInRange(int expected);
+void sendToggle(int pin, int delayTime[]) {
+ digitalWrite(pin, LOW);
+ delayMicroseconds(delayTime[0] * 10);
+ digitalWrite(pin, HIGH);
+ delayMicroseconds(delayTime[1] * 10);
+}
+
+void send(ir_t *proto, uint64_t value, int pin, bool inverted) {
+ bool low = inverted;
+ int i;
+ uint8_t bit;
+
+ for (i = 0; i < ARRAY_LEN(proto->header); i++) {
+ digitalWrite(pin, low ? LOW : HIGH);
+ delayMicroseconds(proto->header[i] * 10);
+ low = !low;
+ }
+
+ for (i = proto->prebits - 1; i >= 0; i--) {
+ bit = (proto->pre >> i) & 1;
+ sendToggle(pin, proto->values[bit]);
+ }
+
+ for (i = proto->bits - 1; i >= 0; i--) {
+ bit = (value >> i) & 1;
+ sendToggle(pin, proto->values[bit]);
+ }
+
+ for (i = 0; i < ARRAY_LEN(proto->trail); i++) {
+ digitalWrite(pin, low ? LOW : HIGH);
+ delayMicroseconds(proto->trail[i] * 10);
+ low = !low;
+ }
+
+ digitalWrite(pin, low ? LOW : HIGH);
+}
+
void setup(void) {
Serial.begin(9600);
Serial.println("Ready to decode IR!");