FUNGERER MED FJERNKONTROLL

Dependencies:   XBeeLib mbed

Fork of Trinket_remote by David Bottrill

Committer:
andreasbirkeland97
Date:
Sat Feb 24 23:08:27 2018 +0000
Revision:
1:0aae52ba2e8d
Parent:
0:0124991faa9d
Fungerende program med IR kontroll. Styrer DIO p? xbee

Who changed what in which revision?

UserRevisionLine numberNew contents of line
djbottrill 0:0124991faa9d 1 #include "mbed.h"
andreasbirkeland97 1:0aae52ba2e8d 2 #include "XBeeLib.h"
djbottrill 0:0124991faa9d 3
djbottrill 0:0124991faa9d 4 #define MAXPULSE 10000 // the maximum pulse we'll listen for - 10 milliseconds
djbottrill 0:0124991faa9d 5 #define NUMPULSES 200 // max IR pulse pairs to sample
djbottrill 0:0124991faa9d 6 #define RESOLUTION 1 // time between IR measurements ~1uS
djbottrill 0:0124991faa9d 7
djbottrill 0:0124991faa9d 8 // we will store up to 200 pulse pairs (this is -a lot-)
djbottrill 0:0124991faa9d 9 uint16_t pulses[200][2]; // pair is high and low pulse
djbottrill 0:0124991faa9d 10 uint16_t currentpulse = 0; // index for pulses we're storing
djbottrill 0:0124991faa9d 11 uint32_t irCode = 0;
djbottrill 0:0124991faa9d 12 Serial pc(USBTX, USBRX); // tx, rx
andreasbirkeland97 1:0aae52ba2e8d 13 DigitalIn IRpin (p8); // Listen to IR receiver on Trinket/Gemma pin D2
djbottrill 0:0124991faa9d 14
djbottrill 0:0124991faa9d 15 int listenForIR(void); // IR receive code
djbottrill 0:0124991faa9d 16 void printcode(void); // Print IR code in HEX
djbottrill 0:0124991faa9d 17
andreasbirkeland97 1:0aae52ba2e8d 18 using namespace XBeeLib;
andreasbirkeland97 1:0aae52ba2e8d 19
djbottrill 0:0124991faa9d 20 int main(void)
djbottrill 0:0124991faa9d 21 {
djbottrill 0:0124991faa9d 22 pc.printf("Ready to decode IR!\n");
andreasbirkeland97 1:0aae52ba2e8d 23 XBeeZB xbee = XBeeZB(RADIO_TX, RADIO_RX, RADIO_RESET);
andreasbirkeland97 1:0aae52ba2e8d 24 RadioStatus radioStatus;
djbottrill 0:0124991faa9d 25
djbottrill 0:0124991faa9d 26 while (1) {
djbottrill 0:0124991faa9d 27
djbottrill 0:0124991faa9d 28 int numpulse=listenForIR(); // Wait for an IR Code
andreasbirkeland97 1:0aae52ba2e8d 29 RemoteXBeeZB remoteDevice = RemoteXBeeZB(0x0013A20041642F34);
djbottrill 0:0124991faa9d 30 // Process the pulses to get a single number representing code
djbottrill 0:0124991faa9d 31 for (int i = 0; i < 32; i++) {
djbottrill 0:0124991faa9d 32 irCode=irCode<<1;
djbottrill 0:0124991faa9d 33 if((pulses[i][0] * RESOLUTION)>0&&(pulses[i][0] * RESOLUTION)<500) {
djbottrill 0:0124991faa9d 34 irCode|=0;
djbottrill 0:0124991faa9d 35 } else {
djbottrill 0:0124991faa9d 36 irCode|=1;
djbottrill 0:0124991faa9d 37 }
djbottrill 0:0124991faa9d 38 }
djbottrill 0:0124991faa9d 39
andreasbirkeland97 1:0aae52ba2e8d 40 // Print IR code
djbottrill 0:0124991faa9d 41 wait_ms(100);
djbottrill 0:0124991faa9d 42
andreasbirkeland97 1:0aae52ba2e8d 43 if (irCode == 0xc489211e) {
andreasbirkeland97 1:0aae52ba2e8d 44 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO12, DigitalOutLow); //d0
andreasbirkeland97 1:0aae52ba2e8d 45 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO4, DigitalOutLow); //d1
andreasbirkeland97 1:0aae52ba2e8d 46 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO0_AD0, DigitalOutLow); //d2
andreasbirkeland97 1:0aae52ba2e8d 47 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO3_AD3, DigitalOutLow); //d3
andreasbirkeland97 1:0aae52ba2e8d 48 }
andreasbirkeland97 1:0aae52ba2e8d 49 if (irCode == 0xc489112e) {
andreasbirkeland97 1:0aae52ba2e8d 50 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO12, DigitalOutHigh); //d0
andreasbirkeland97 1:0aae52ba2e8d 51 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO4, DigitalOutLow); //d1
andreasbirkeland97 1:0aae52ba2e8d 52 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO0_AD0, DigitalOutLow); //d2
andreasbirkeland97 1:0aae52ba2e8d 53 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO3_AD3, DigitalOutLow); //d3
andreasbirkeland97 1:0aae52ba2e8d 54 }
andreasbirkeland97 1:0aae52ba2e8d 55 if (irCode == 0xc489310e) {
andreasbirkeland97 1:0aae52ba2e8d 56 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO12, DigitalOutLow); //d0
andreasbirkeland97 1:0aae52ba2e8d 57 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO4, DigitalOutHigh); //d1
andreasbirkeland97 1:0aae52ba2e8d 58 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO0_AD0, DigitalOutLow); //d2
andreasbirkeland97 1:0aae52ba2e8d 59 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO3_AD3, DigitalOutLow); //d3
andreasbirkeland97 1:0aae52ba2e8d 60 }
andreasbirkeland97 1:0aae52ba2e8d 61 if (irCode == 0xc4890936) {
andreasbirkeland97 1:0aae52ba2e8d 62 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO12, DigitalOutHigh); //d0
andreasbirkeland97 1:0aae52ba2e8d 63 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO4, DigitalOutHigh); //d1
andreasbirkeland97 1:0aae52ba2e8d 64 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO0_AD0, DigitalOutLow); //d2
andreasbirkeland97 1:0aae52ba2e8d 65 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO3_AD3, DigitalOutLow); //d3
andreasbirkeland97 1:0aae52ba2e8d 66 }
andreasbirkeland97 1:0aae52ba2e8d 67 if (irCode == 0xc489201f) {
andreasbirkeland97 1:0aae52ba2e8d 68 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO12, DigitalOutLow); //d0
andreasbirkeland97 1:0aae52ba2e8d 69 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO4, DigitalOutLow); //d1
andreasbirkeland97 1:0aae52ba2e8d 70 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO0_AD0, DigitalOutHigh); //d2
andreasbirkeland97 1:0aae52ba2e8d 71 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO3_AD3, DigitalOutLow); //d3
andreasbirkeland97 1:0aae52ba2e8d 72 }
andreasbirkeland97 1:0aae52ba2e8d 73 if (irCode == 0xc489102f) {
andreasbirkeland97 1:0aae52ba2e8d 74 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO12, DigitalOutHigh); //d0
andreasbirkeland97 1:0aae52ba2e8d 75 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO4, DigitalOutLow); //d1
andreasbirkeland97 1:0aae52ba2e8d 76 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO0_AD0, DigitalOutHigh); //d2
andreasbirkeland97 1:0aae52ba2e8d 77 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO3_AD3, DigitalOutLow); //d3
andreasbirkeland97 1:0aae52ba2e8d 78 }
andreasbirkeland97 1:0aae52ba2e8d 79 if (irCode == 0xc489300f) {
andreasbirkeland97 1:0aae52ba2e8d 80 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO12, DigitalOutLow); //d0
andreasbirkeland97 1:0aae52ba2e8d 81 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO4, DigitalOutHigh); //d1
andreasbirkeland97 1:0aae52ba2e8d 82 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO0_AD0, DigitalOutHigh); //d2
andreasbirkeland97 1:0aae52ba2e8d 83 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO3_AD3, DigitalOutLow); //d3
andreasbirkeland97 1:0aae52ba2e8d 84 }
andreasbirkeland97 1:0aae52ba2e8d 85 if (irCode == 0xc4890837) {
andreasbirkeland97 1:0aae52ba2e8d 86 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO12, DigitalOutHigh); //d0
andreasbirkeland97 1:0aae52ba2e8d 87 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO4, DigitalOutHigh); //d1
andreasbirkeland97 1:0aae52ba2e8d 88 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO0_AD0, DigitalOutHigh); //d2
andreasbirkeland97 1:0aae52ba2e8d 89 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO3_AD3, DigitalOutLow); //d3
andreasbirkeland97 1:0aae52ba2e8d 90 }
andreasbirkeland97 1:0aae52ba2e8d 91 if (irCode == 0xc4892817) {
andreasbirkeland97 1:0aae52ba2e8d 92 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO12, DigitalOutLow); //d0
andreasbirkeland97 1:0aae52ba2e8d 93 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO4, DigitalOutLow); //d1
andreasbirkeland97 1:0aae52ba2e8d 94 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO0_AD0, DigitalOutLow); //d2
andreasbirkeland97 1:0aae52ba2e8d 95 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO3_AD3, DigitalOutHigh); //d3
andreasbirkeland97 1:0aae52ba2e8d 96 }
andreasbirkeland97 1:0aae52ba2e8d 97 if (irCode == 0xc4891827) {
andreasbirkeland97 1:0aae52ba2e8d 98 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO12, DigitalOutHigh); //d0
andreasbirkeland97 1:0aae52ba2e8d 99 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO4, DigitalOutLow); //d1
andreasbirkeland97 1:0aae52ba2e8d 100 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO0_AD0, DigitalOutLow); //d2
andreasbirkeland97 1:0aae52ba2e8d 101 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO3_AD3, DigitalOutHigh); //d3
andreasbirkeland97 1:0aae52ba2e8d 102 }
andreasbirkeland97 1:0aae52ba2e8d 103 if (irCode == 0xc4893807) {
andreasbirkeland97 1:0aae52ba2e8d 104 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO12, DigitalOutLow); //d0
andreasbirkeland97 1:0aae52ba2e8d 105 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO4, DigitalOutHigh); //d1
andreasbirkeland97 1:0aae52ba2e8d 106 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO0_AD0, DigitalOutLow); //d2
andreasbirkeland97 1:0aae52ba2e8d 107 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO3_AD3, DigitalOutHigh); //d3
andreasbirkeland97 1:0aae52ba2e8d 108 }
andreasbirkeland97 1:0aae52ba2e8d 109 if (irCode == 0xc489043b) {
andreasbirkeland97 1:0aae52ba2e8d 110 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO12, DigitalOutHigh); //d0
andreasbirkeland97 1:0aae52ba2e8d 111 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO4, DigitalOutHigh); //d1
andreasbirkeland97 1:0aae52ba2e8d 112 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO0_AD0, DigitalOutLow); //d2
andreasbirkeland97 1:0aae52ba2e8d 113 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO3_AD3, DigitalOutHigh); //d3
andreasbirkeland97 1:0aae52ba2e8d 114 }
andreasbirkeland97 1:0aae52ba2e8d 115 if (irCode == 0xc489241b) {
andreasbirkeland97 1:0aae52ba2e8d 116 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO12, DigitalOutLow); //d0
andreasbirkeland97 1:0aae52ba2e8d 117 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO4, DigitalOutLow); //d1
andreasbirkeland97 1:0aae52ba2e8d 118 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO0_AD0, DigitalOutHigh); //d2
andreasbirkeland97 1:0aae52ba2e8d 119 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO3_AD3, DigitalOutHigh); //d3
andreasbirkeland97 1:0aae52ba2e8d 120 }
andreasbirkeland97 1:0aae52ba2e8d 121 if (irCode == 0xc4892996) {
andreasbirkeland97 1:0aae52ba2e8d 122 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO12, DigitalOutHigh); //d0
andreasbirkeland97 1:0aae52ba2e8d 123 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO4, DigitalOutLow); //d1
andreasbirkeland97 1:0aae52ba2e8d 124 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO0_AD0, DigitalOutHigh); //d2
andreasbirkeland97 1:0aae52ba2e8d 125 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO3_AD3, DigitalOutHigh); //d3
andreasbirkeland97 1:0aae52ba2e8d 126 }
andreasbirkeland97 1:0aae52ba2e8d 127 if (irCode == 0xc489003f) {
andreasbirkeland97 1:0aae52ba2e8d 128 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO12, DigitalOutLow); //d0
andreasbirkeland97 1:0aae52ba2e8d 129 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO4, DigitalOutHigh); //d1
andreasbirkeland97 1:0aae52ba2e8d 130 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO0_AD0, DigitalOutHigh); //d2
andreasbirkeland97 1:0aae52ba2e8d 131 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO3_AD3, DigitalOutHigh); //d3
andreasbirkeland97 1:0aae52ba2e8d 132 }
andreasbirkeland97 1:0aae52ba2e8d 133 if (irCode == 0xc4890c33) {
andreasbirkeland97 1:0aae52ba2e8d 134 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO12, DigitalOutHigh); //d0
andreasbirkeland97 1:0aae52ba2e8d 135 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO4, DigitalOutHigh); //d1
andreasbirkeland97 1:0aae52ba2e8d 136 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO0_AD0, DigitalOutHigh); //d2
andreasbirkeland97 1:0aae52ba2e8d 137 radioStatus = xbee.set_pin_config(remoteDevice, XBeeZB::DIO3_AD3, DigitalOutHigh); //d3
andreasbirkeland97 1:0aae52ba2e8d 138 }
andreasbirkeland97 1:0aae52ba2e8d 139
djbottrill 0:0124991faa9d 140 } //end of main loop
djbottrill 0:0124991faa9d 141 }
djbottrill 0:0124991faa9d 142
djbottrill 0:0124991faa9d 143
andreasbirkeland97 1:0aae52ba2e8d 144 int listenForIR(void) // IR receive code
andreasbirkeland97 1:0aae52ba2e8d 145 {
djbottrill 0:0124991faa9d 146 currentpulse = 0;
djbottrill 0:0124991faa9d 147 while (1) {
djbottrill 0:0124991faa9d 148 unsigned int highpulse, lowpulse; // temporary storage timing
djbottrill 0:0124991faa9d 149 highpulse = lowpulse = 0; // start out with no pulse length
djbottrill 0:0124991faa9d 150
djbottrill 0:0124991faa9d 151 while (IRpin==1) { // got a high pulse
djbottrill 0:0124991faa9d 152 highpulse++;
djbottrill 0:0124991faa9d 153 wait_us(RESOLUTION);
djbottrill 0:0124991faa9d 154 if (((highpulse >= MAXPULSE) && (currentpulse != 0))|| currentpulse == NUMPULSES) {
djbottrill 0:0124991faa9d 155 return currentpulse;
djbottrill 0:0124991faa9d 156 }
djbottrill 0:0124991faa9d 157 }
djbottrill 0:0124991faa9d 158 pulses[currentpulse][0] = highpulse;
djbottrill 0:0124991faa9d 159
djbottrill 0:0124991faa9d 160 while (IRpin==0) { // got a low pulse
djbottrill 0:0124991faa9d 161 lowpulse++;
djbottrill 0:0124991faa9d 162 wait_us(RESOLUTION);
djbottrill 0:0124991faa9d 163 if (((lowpulse >= MAXPULSE) && (currentpulse != 0))|| currentpulse == NUMPULSES) {
djbottrill 0:0124991faa9d 164 return currentpulse;
djbottrill 0:0124991faa9d 165 }
djbottrill 0:0124991faa9d 166 }
djbottrill 0:0124991faa9d 167 pulses[currentpulse][1] = lowpulse;
djbottrill 0:0124991faa9d 168 currentpulse++;
djbottrill 0:0124991faa9d 169 }
djbottrill 0:0124991faa9d 170 }
andreasbirkeland97 1:0aae52ba2e8d 171