Lysregulering
/
SET_DIO_HIGH_IR_FUNGERER
FUNGERER MED FJERNKONTROLL
Fork of Trinket_remote by
main.cpp@1:0aae52ba2e8d, 2018-02-24 (annotated)
- 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?
User | Revision | Line number | New 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 |