Infrared remote test functions (11/26/2010)
Infrared.cpp@1:d1764facee30, 2010-12-04 (annotated)
- Committer:
- AndyHope
- Date:
- Sat Dec 04 22:47:38 2010 +0000
- Revision:
- 1:d1764facee30
- Parent:
- 0:e526ff8f7602
new revision for version control
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
AndyHope | 0:e526ff8f7602 | 1 | #include "mbed.h" |
AndyHope | 0:e526ff8f7602 | 2 | #include "Infrared.h" |
AndyHope | 0:e526ff8f7602 | 3 | #include "SDFileSystem.h" |
AndyHope | 0:e526ff8f7602 | 4 | |
AndyHope | 1:d1764facee30 | 5 | Serial pc(USBTX, USBRX); // tx, rx |
AndyHope | 1:d1764facee30 | 6 | |
AndyHope | 0:e526ff8f7602 | 7 | Infrared::Infrared(PinName pin) : irLed(pin) { // _pin(pin) means pass pin to the DigitalOut constructor |
AndyHope | 0:e526ff8f7602 | 8 | irLed = 0; // default the output to 0 |
AndyHope | 0:e526ff8f7602 | 9 | } |
AndyHope | 0:e526ff8f7602 | 10 | |
AndyHope | 0:e526ff8f7602 | 11 | |
AndyHope | 0:e526ff8f7602 | 12 | void Infrared::header(void) |
AndyHope | 0:e526ff8f7602 | 13 | { |
AndyHope | 0:e526ff8f7602 | 14 | |
AndyHope | 0:e526ff8f7602 | 15 | long float repeat; |
AndyHope | 0:e526ff8f7602 | 16 | |
AndyHope | 0:e526ff8f7602 | 17 | repeat = phead/(cycleOn+cycleOff); |
AndyHope | 0:e526ff8f7602 | 18 | |
AndyHope | 1:d1764facee30 | 19 | repeat *= 0.55; // correction for overhead of loops |
AndyHope | 0:e526ff8f7602 | 20 | |
AndyHope | 0:e526ff8f7602 | 21 | /* uses the length of the header pulse over the length of the on/off |
AndyHope | 0:e526ff8f7602 | 22 | modulation to give an integer representation of the number of cycles */ |
AndyHope | 0:e526ff8f7602 | 23 | //pc.printf("%x\n", repeat); |
AndyHope | 0:e526ff8f7602 | 24 | |
AndyHope | 0:e526ff8f7602 | 25 | for(int k = 0; k < repeat; k++) |
AndyHope | 0:e526ff8f7602 | 26 | { |
AndyHope | 0:e526ff8f7602 | 27 | irLed = 1; |
AndyHope | 0:e526ff8f7602 | 28 | wait(cycleOn); |
AndyHope | 0:e526ff8f7602 | 29 | irLed = 0; |
AndyHope | 0:e526ff8f7602 | 30 | wait(cycleOff); |
AndyHope | 0:e526ff8f7602 | 31 | } // for |
AndyHope | 0:e526ff8f7602 | 32 | |
AndyHope | 0:e526ff8f7602 | 33 | wait(shead); |
AndyHope | 0:e526ff8f7602 | 34 | |
AndyHope | 0:e526ff8f7602 | 35 | return; |
AndyHope | 0:e526ff8f7602 | 36 | } //header |
AndyHope | 0:e526ff8f7602 | 37 | |
AndyHope | 0:e526ff8f7602 | 38 | |
AndyHope | 0:e526ff8f7602 | 39 | /* takes a data input of up to bytes, uses dynamic variables(timings ect), |
AndyHope | 0:e526ff8f7602 | 40 | calculates pulse lengths, encodes data for pulse modulation, |
AndyHope | 0:e526ff8f7602 | 41 | and shifts it out LSB first (sharp TV protocol, can be changed) */ |
AndyHope | 0:e526ff8f7602 | 42 | |
AndyHope | 0:e526ff8f7602 | 43 | void Infrared::strobeSpace(void) |
AndyHope | 0:e526ff8f7602 | 44 | { // ir cycle time, ones, zeroes, and datastream |
AndyHope | 0:e526ff8f7602 | 45 | |
AndyHope | 0:e526ff8f7602 | 46 | unsigned int temp; |
AndyHope | 0:e526ff8f7602 | 47 | long float repeat1, repeat0; |
AndyHope | 0:e526ff8f7602 | 48 | char k; |
AndyHope | 0:e526ff8f7602 | 49 | |
AndyHope | 0:e526ff8f7602 | 50 | repeat1 = pone/(cycleOn+cycleOff); |
AndyHope | 0:e526ff8f7602 | 51 | repeat0 = pzero/(cycleOn+cycleOff); |
AndyHope | 0:e526ff8f7602 | 52 | /* uses the length of the header pulse over the length of the on/off |
AndyHope | 0:e526ff8f7602 | 53 | modulation to give an integer representation of the number of cycles */ |
AndyHope | 0:e526ff8f7602 | 54 | |
AndyHope | 1:d1764facee30 | 55 | repeat1 *= 0.55; // correction for overhead of loops |
AndyHope | 1:d1764facee30 | 56 | repeat0 *= 0.55; // correction for overhead of loops |
AndyHope | 0:e526ff8f7602 | 57 | |
AndyHope | 0:e526ff8f7602 | 58 | for(char i = 0; i < dataBits; i++) |
AndyHope | 0:e526ff8f7602 | 59 | { |
AndyHope | 0:e526ff8f7602 | 60 | temp = data<<i; // shift out lsb first |
AndyHope | 0:e526ff8f7602 | 61 | |
AndyHope | 0:e526ff8f7602 | 62 | |
AndyHope | 0:e526ff8f7602 | 63 | if(temp & MSB) |
AndyHope | 0:e526ff8f7602 | 64 | { |
AndyHope | 0:e526ff8f7602 | 65 | for(k = 0; k < repeat1; k++) |
AndyHope | 0:e526ff8f7602 | 66 | { |
AndyHope | 0:e526ff8f7602 | 67 | irLed = 1; |
AndyHope | 0:e526ff8f7602 | 68 | wait(cycleOn); |
AndyHope | 0:e526ff8f7602 | 69 | irLed = 0; |
AndyHope | 0:e526ff8f7602 | 70 | wait(cycleOff); |
AndyHope | 0:e526ff8f7602 | 71 | }// for |
AndyHope | 0:e526ff8f7602 | 72 | |
AndyHope | 0:e526ff8f7602 | 73 | wait(sone); |
AndyHope | 0:e526ff8f7602 | 74 | }// if |
AndyHope | 0:e526ff8f7602 | 75 | |
AndyHope | 0:e526ff8f7602 | 76 | else |
AndyHope | 0:e526ff8f7602 | 77 | { |
AndyHope | 0:e526ff8f7602 | 78 | for(k = 0; k < repeat0; k++) |
AndyHope | 0:e526ff8f7602 | 79 | { |
AndyHope | 0:e526ff8f7602 | 80 | irLed = 1; |
AndyHope | 0:e526ff8f7602 | 81 | wait(cycleOn); |
AndyHope | 0:e526ff8f7602 | 82 | irLed = 0; |
AndyHope | 0:e526ff8f7602 | 83 | wait(cycleOff); |
AndyHope | 0:e526ff8f7602 | 84 | }// for |
AndyHope | 0:e526ff8f7602 | 85 | |
AndyHope | 0:e526ff8f7602 | 86 | wait(szero); |
AndyHope | 0:e526ff8f7602 | 87 | }// else |
AndyHope | 0:e526ff8f7602 | 88 | |
AndyHope | 0:e526ff8f7602 | 89 | }// for |
AndyHope | 0:e526ff8f7602 | 90 | |
AndyHope | 0:e526ff8f7602 | 91 | return; |
AndyHope | 0:e526ff8f7602 | 92 | }// strobeSpace |
AndyHope | 0:e526ff8f7602 | 93 | |
AndyHope | 0:e526ff8f7602 | 94 | |
AndyHope | 0:e526ff8f7602 | 95 | /* takes a data input of up to bytes, uses dynamic variables(timings ect), |
AndyHope | 0:e526ff8f7602 | 96 | calculates pulse lengths, encodes data for RC6 (manchester) encoding, |
AndyHope | 0:e526ff8f7602 | 97 | and shifts it out MSB first (philips protocol, can be changed) */ |
AndyHope | 0:e526ff8f7602 | 98 | |
AndyHope | 0:e526ff8f7602 | 99 | void Infrared::strobeRC6(void) |
AndyHope | 0:e526ff8f7602 | 100 | { // ir cycle time, ones, zeroes, and datastream |
AndyHope | 0:e526ff8f7602 | 101 | |
AndyHope | 0:e526ff8f7602 | 102 | unsigned long int temp; |
AndyHope | 0:e526ff8f7602 | 103 | long float repeat1, repeat0; |
AndyHope | 0:e526ff8f7602 | 104 | char k; |
AndyHope | 0:e526ff8f7602 | 105 | |
AndyHope | 0:e526ff8f7602 | 106 | repeat1 = pone/(cycleOn+cycleOff); |
AndyHope | 0:e526ff8f7602 | 107 | repeat0 = pzero/(cycleOn+cycleOff); |
AndyHope | 0:e526ff8f7602 | 108 | |
AndyHope | 1:d1764facee30 | 109 | repeat1 *= 0.55; // correction for overhead of loops |
AndyHope | 1:d1764facee30 | 110 | repeat0 *= 0.55; // correction for overhead of loops |
AndyHope | 0:e526ff8f7602 | 111 | |
AndyHope | 0:e526ff8f7602 | 112 | /* uses the length of the header pulse over the length of the on/off |
AndyHope | 0:e526ff8f7602 | 113 | modulation to give an integer representation of the number of cycles */ |
AndyHope | 0:e526ff8f7602 | 114 | |
AndyHope | 0:e526ff8f7602 | 115 | for(char i = 0; i < dataBits; i++) |
AndyHope | 0:e526ff8f7602 | 116 | { |
AndyHope | 0:e526ff8f7602 | 117 | temp = data<<i; // shift out msb first |
AndyHope | 0:e526ff8f7602 | 118 | |
AndyHope | 0:e526ff8f7602 | 119 | if(temp & MSB) |
AndyHope | 0:e526ff8f7602 | 120 | { |
AndyHope | 0:e526ff8f7602 | 121 | //pc.printf("1"); |
AndyHope | 0:e526ff8f7602 | 122 | for(k = 0; k < repeat1; k++) |
AndyHope | 0:e526ff8f7602 | 123 | { |
AndyHope | 0:e526ff8f7602 | 124 | irLed = 1; |
AndyHope | 0:e526ff8f7602 | 125 | wait(cycleOn); |
AndyHope | 0:e526ff8f7602 | 126 | irLed = 0; |
AndyHope | 0:e526ff8f7602 | 127 | wait(cycleOff); |
AndyHope | 0:e526ff8f7602 | 128 | }// for |
AndyHope | 0:e526ff8f7602 | 129 | |
AndyHope | 0:e526ff8f7602 | 130 | wait(sone); |
AndyHope | 0:e526ff8f7602 | 131 | }// if |
AndyHope | 0:e526ff8f7602 | 132 | |
AndyHope | 0:e526ff8f7602 | 133 | else |
AndyHope | 0:e526ff8f7602 | 134 | { |
AndyHope | 0:e526ff8f7602 | 135 | //pc.printf("0"); |
AndyHope | 0:e526ff8f7602 | 136 | wait(szero); |
AndyHope | 0:e526ff8f7602 | 137 | |
AndyHope | 0:e526ff8f7602 | 138 | for(k = 0; k < repeat0; k++) |
AndyHope | 0:e526ff8f7602 | 139 | { |
AndyHope | 0:e526ff8f7602 | 140 | irLed = 1; |
AndyHope | 0:e526ff8f7602 | 141 | wait(cycleOn); |
AndyHope | 0:e526ff8f7602 | 142 | irLed = 0; |
AndyHope | 0:e526ff8f7602 | 143 | wait(cycleOff); |
AndyHope | 0:e526ff8f7602 | 144 | }// for |
AndyHope | 0:e526ff8f7602 | 145 | |
AndyHope | 0:e526ff8f7602 | 146 | }// else |
AndyHope | 0:e526ff8f7602 | 147 | |
AndyHope | 0:e526ff8f7602 | 148 | }// for |
AndyHope | 0:e526ff8f7602 | 149 | |
AndyHope | 0:e526ff8f7602 | 150 | return; |
AndyHope | 0:e526ff8f7602 | 151 | }// strobeRC6 |
AndyHope | 0:e526ff8f7602 | 152 | |
AndyHope | 0:e526ff8f7602 | 153 | |
AndyHope | 0:e526ff8f7602 | 154 | /* calculates and transmits either a leading |
AndyHope | 0:e526ff8f7602 | 155 | or trailing pulse, based on passed variables */ |
AndyHope | 0:e526ff8f7602 | 156 | |
AndyHope | 0:e526ff8f7602 | 157 | void Infrared::pulse(double pulseL) |
AndyHope | 0:e526ff8f7602 | 158 | { |
AndyHope | 0:e526ff8f7602 | 159 | long float repeat; |
AndyHope | 0:e526ff8f7602 | 160 | |
AndyHope | 0:e526ff8f7602 | 161 | repeat = pulseL/(cycleOn+cycleOff); |
AndyHope | 0:e526ff8f7602 | 162 | /* uses the length of the header pulse over the length of the on/off |
AndyHope | 0:e526ff8f7602 | 163 | modulation to give an integer representation of the number of cycles */ |
AndyHope | 0:e526ff8f7602 | 164 | |
AndyHope | 1:d1764facee30 | 165 | repeat *= 0.55; // correction factor for loop overheads |
AndyHope | 0:e526ff8f7602 | 166 | |
AndyHope | 0:e526ff8f7602 | 167 | for(int k = 0; k < repeat; k++) |
AndyHope | 0:e526ff8f7602 | 168 | { |
AndyHope | 0:e526ff8f7602 | 169 | irLed = 1; |
AndyHope | 0:e526ff8f7602 | 170 | wait(cycleOn); |
AndyHope | 0:e526ff8f7602 | 171 | irLed = 0; |
AndyHope | 0:e526ff8f7602 | 172 | wait(cycleOff); |
AndyHope | 0:e526ff8f7602 | 173 | }// for |
AndyHope | 0:e526ff8f7602 | 174 | |
AndyHope | 0:e526ff8f7602 | 175 | return; |
AndyHope | 0:e526ff8f7602 | 176 | }// pulse |
AndyHope | 0:e526ff8f7602 | 177 | |
AndyHope | 0:e526ff8f7602 | 178 | |
AndyHope | 0:e526ff8f7602 | 179 | /* takes a command input and strobes the infrared LEDs */ |
AndyHope | 0:e526ff8f7602 | 180 | |
AndyHope | 0:e526ff8f7602 | 181 | void Infrared::sendCodeDish(unsigned long int command) |
AndyHope | 0:e526ff8f7602 | 182 | { |
AndyHope | 0:e526ff8f7602 | 183 | |
AndyHope | 0:e526ff8f7602 | 184 | data = command; |
AndyHope | 0:e526ff8f7602 | 185 | |
AndyHope | 0:e526ff8f7602 | 186 | header(); |
AndyHope | 0:e526ff8f7602 | 187 | strobeSpace(); |
AndyHope | 0:e526ff8f7602 | 188 | |
AndyHope | 0:e526ff8f7602 | 189 | header(); |
AndyHope | 0:e526ff8f7602 | 190 | strobeSpace(); |
AndyHope | 0:e526ff8f7602 | 191 | |
AndyHope | 0:e526ff8f7602 | 192 | header(); |
AndyHope | 0:e526ff8f7602 | 193 | strobeSpace(); |
AndyHope | 0:e526ff8f7602 | 194 | |
AndyHope | 0:e526ff8f7602 | 195 | pulse(ptrail); |
AndyHope | 0:e526ff8f7602 | 196 | |
AndyHope | 1:d1764facee30 | 197 | wait(gap1); |
AndyHope | 0:e526ff8f7602 | 198 | |
AndyHope | 0:e526ff8f7602 | 199 | return; |
AndyHope | 0:e526ff8f7602 | 200 | }//sendCodeDVR |
AndyHope | 0:e526ff8f7602 | 201 | |
AndyHope | 0:e526ff8f7602 | 202 | |
AndyHope | 0:e526ff8f7602 | 203 | void Infrared::sendCodeGETV(unsigned long int command) |
AndyHope | 0:e526ff8f7602 | 204 | { |
AndyHope | 0:e526ff8f7602 | 205 | |
AndyHope | 0:e526ff8f7602 | 206 | data = command; |
AndyHope | 0:e526ff8f7602 | 207 | |
AndyHope | 0:e526ff8f7602 | 208 | header(); |
AndyHope | 0:e526ff8f7602 | 209 | strobeSpace(); |
AndyHope | 0:e526ff8f7602 | 210 | pulse(ptrail); |
AndyHope | 0:e526ff8f7602 | 211 | |
AndyHope | 1:d1764facee30 | 212 | wait(gap1); |
AndyHope | 0:e526ff8f7602 | 213 | |
AndyHope | 0:e526ff8f7602 | 214 | header(); |
AndyHope | 0:e526ff8f7602 | 215 | strobeSpace(); |
AndyHope | 0:e526ff8f7602 | 216 | pulse(ptrail); |
AndyHope | 0:e526ff8f7602 | 217 | |
AndyHope | 1:d1764facee30 | 218 | wait(gap1); |
AndyHope | 0:e526ff8f7602 | 219 | |
AndyHope | 0:e526ff8f7602 | 220 | return; |
AndyHope | 0:e526ff8f7602 | 221 | }//sendCodeGETV |
AndyHope | 0:e526ff8f7602 | 222 | |
AndyHope | 0:e526ff8f7602 | 223 | void Infrared::sendCodeSharpTV(unsigned long int command) |
AndyHope | 0:e526ff8f7602 | 224 | { |
AndyHope | 0:e526ff8f7602 | 225 | |
AndyHope | 0:e526ff8f7602 | 226 | invertCode(inversionMask, command); |
AndyHope | 1:d1764facee30 | 227 | |
AndyHope | 1:d1764facee30 | 228 | gap1 = constLength(code); |
AndyHope | 1:d1764facee30 | 229 | gap2 = constLength(invCode); |
AndyHope | 1:d1764facee30 | 230 | |
AndyHope | 1:d1764facee30 | 231 | pc.printf("gap1: %f, gap2: %f\n", gap1, gap2); |
AndyHope | 1:d1764facee30 | 232 | |
AndyHope | 0:e526ff8f7602 | 233 | data = code; |
AndyHope | 0:e526ff8f7602 | 234 | |
AndyHope | 0:e526ff8f7602 | 235 | strobeSpace(); |
AndyHope | 0:e526ff8f7602 | 236 | pulse(ptrail); |
AndyHope | 0:e526ff8f7602 | 237 | |
AndyHope | 1:d1764facee30 | 238 | |
AndyHope | 1:d1764facee30 | 239 | wait(gap1); |
AndyHope | 0:e526ff8f7602 | 240 | |
AndyHope | 0:e526ff8f7602 | 241 | data = invCode; |
AndyHope | 0:e526ff8f7602 | 242 | |
AndyHope | 0:e526ff8f7602 | 243 | strobeSpace(); |
AndyHope | 0:e526ff8f7602 | 244 | pulse(ptrail); |
AndyHope | 0:e526ff8f7602 | 245 | |
AndyHope | 1:d1764facee30 | 246 | wait(gap2); |
AndyHope | 0:e526ff8f7602 | 247 | |
AndyHope | 0:e526ff8f7602 | 248 | data = code; |
AndyHope | 0:e526ff8f7602 | 249 | |
AndyHope | 0:e526ff8f7602 | 250 | strobeSpace(); |
AndyHope | 0:e526ff8f7602 | 251 | pulse(ptrail); |
AndyHope | 0:e526ff8f7602 | 252 | |
AndyHope | 1:d1764facee30 | 253 | wait(gap1); |
AndyHope | 0:e526ff8f7602 | 254 | |
AndyHope | 0:e526ff8f7602 | 255 | data = invCode; |
AndyHope | 0:e526ff8f7602 | 256 | |
AndyHope | 0:e526ff8f7602 | 257 | strobeSpace(); |
AndyHope | 0:e526ff8f7602 | 258 | pulse(ptrail); |
AndyHope | 0:e526ff8f7602 | 259 | |
AndyHope | 1:d1764facee30 | 260 | wait(gap2); |
AndyHope | 0:e526ff8f7602 | 261 | |
AndyHope | 0:e526ff8f7602 | 262 | return; |
AndyHope | 0:e526ff8f7602 | 263 | }//sendCodeSharpTV |
AndyHope | 0:e526ff8f7602 | 264 | |
AndyHope | 0:e526ff8f7602 | 265 | |
AndyHope | 0:e526ff8f7602 | 266 | /* Takes the values for the remote timing in the LIRC remote files |
AndyHope | 0:e526ff8f7602 | 267 | (which are in us, Ex. phead = 450) and converts them down to the |
AndyHope | 0:e526ff8f7602 | 268 | proper floating point value */ |
AndyHope | 0:e526ff8f7602 | 269 | |
AndyHope | 0:e526ff8f7602 | 270 | void Infrared::convertTiming() |
AndyHope | 0:e526ff8f7602 | 271 | { |
AndyHope | 0:e526ff8f7602 | 272 | |
AndyHope | 0:e526ff8f7602 | 273 | phead /= 1000000; // convert to u seconds |
AndyHope | 0:e526ff8f7602 | 274 | shead /= 1000000; |
AndyHope | 0:e526ff8f7602 | 275 | pone /= 1000000; |
AndyHope | 0:e526ff8f7602 | 276 | sone /= 1000000; |
AndyHope | 0:e526ff8f7602 | 277 | pzero /= 1000000; |
AndyHope | 0:e526ff8f7602 | 278 | szero /= 1000000; |
AndyHope | 0:e526ff8f7602 | 279 | ptoggle /= 1000000; |
AndyHope | 0:e526ff8f7602 | 280 | stoggle /= 1000000; |
AndyHope | 0:e526ff8f7602 | 281 | ptrail /= 1000000; |
AndyHope | 0:e526ff8f7602 | 282 | plead /= 1000000; |
AndyHope | 1:d1764facee30 | 283 | gap1 /= 1000000; |
AndyHope | 0:e526ff8f7602 | 284 | |
AndyHope | 0:e526ff8f7602 | 285 | cycleOn = dutycycle/100; // dutycycle is read in as a percentage value from 0 to 100 |
AndyHope | 0:e526ff8f7602 | 286 | cycleOff = 1-cycleOn; |
AndyHope | 0:e526ff8f7602 | 287 | irPeriod = 1/frequency; |
AndyHope | 0:e526ff8f7602 | 288 | cycleOn = irPeriod*cycleOn; |
AndyHope | 0:e526ff8f7602 | 289 | cycleOff = irPeriod*cycleOff; |
AndyHope | 0:e526ff8f7602 | 290 | |
AndyHope | 0:e526ff8f7602 | 291 | return; |
AndyHope | 0:e526ff8f7602 | 292 | }// convertTiming |
AndyHope | 0:e526ff8f7602 | 293 | |
AndyHope | 0:e526ff8f7602 | 294 | |
AndyHope | 0:e526ff8f7602 | 295 | |
AndyHope | 0:e526ff8f7602 | 296 | /* deciphers which mask is needed for sending |
AndyHope | 0:e526ff8f7602 | 297 | data out msb first with dynamic data lengths */ |
AndyHope | 0:e526ff8f7602 | 298 | |
AndyHope | 0:e526ff8f7602 | 299 | void Infrared::maskBit(void) |
AndyHope | 0:e526ff8f7602 | 300 | { |
AndyHope | 0:e526ff8f7602 | 301 | MSB = (0x01<<(dataBits-1)); |
AndyHope | 0:e526ff8f7602 | 302 | /* uses the dataBits and uses it to shift a one |
AndyHope | 0:e526ff8f7602 | 303 | to the position of the MSB of the datastream */ |
AndyHope | 0:e526ff8f7602 | 304 | |
AndyHope | 0:e526ff8f7602 | 305 | return; |
AndyHope | 0:e526ff8f7602 | 306 | }// maskBit |
AndyHope | 0:e526ff8f7602 | 307 | |
AndyHope | 0:e526ff8f7602 | 308 | |
AndyHope | 0:e526ff8f7602 | 309 | void Infrared::invertCode(int mask, int invertData) |
AndyHope | 0:e526ff8f7602 | 310 | { |
AndyHope | 0:e526ff8f7602 | 311 | |
AndyHope | 0:e526ff8f7602 | 312 | code = invertData; |
AndyHope | 0:e526ff8f7602 | 313 | invCode = invertData; |
AndyHope | 0:e526ff8f7602 | 314 | |
AndyHope | 0:e526ff8f7602 | 315 | for(char i = 0; i < mask; i++) |
AndyHope | 0:e526ff8f7602 | 316 | { |
AndyHope | 0:e526ff8f7602 | 317 | |
AndyHope | 0:e526ff8f7602 | 318 | invCode ^= (0x01<<i); |
AndyHope | 0:e526ff8f7602 | 319 | |
AndyHope | 0:e526ff8f7602 | 320 | }// for |
AndyHope | 0:e526ff8f7602 | 321 | |
AndyHope | 0:e526ff8f7602 | 322 | return; |
AndyHope | 0:e526ff8f7602 | 323 | }// invertCode |
AndyHope | 0:e526ff8f7602 | 324 | |
AndyHope | 1:d1764facee30 | 325 | |
AndyHope | 1:d1764facee30 | 326 | double Infrared::constLength(int sent) |
AndyHope | 1:d1764facee30 | 327 | { |
AndyHope | 1:d1764facee30 | 328 | int mask; |
AndyHope | 1:d1764facee30 | 329 | double gap = 0; |
AndyHope | 1:d1764facee30 | 330 | |
AndyHope | 1:d1764facee30 | 331 | for(char i = 0; i < dataBits; i++) |
AndyHope | 1:d1764facee30 | 332 | { |
AndyHope | 1:d1764facee30 | 333 | mask = 0x01<<i; |
AndyHope | 1:d1764facee30 | 334 | |
AndyHope | 1:d1764facee30 | 335 | if(sent & mask) |
AndyHope | 1:d1764facee30 | 336 | { |
AndyHope | 1:d1764facee30 | 337 | gap += pone; |
AndyHope | 1:d1764facee30 | 338 | gap += sone; |
AndyHope | 1:d1764facee30 | 339 | }// if |
AndyHope | 1:d1764facee30 | 340 | |
AndyHope | 1:d1764facee30 | 341 | else |
AndyHope | 1:d1764facee30 | 342 | { |
AndyHope | 1:d1764facee30 | 343 | gap += pzero; |
AndyHope | 1:d1764facee30 | 344 | gap += szero; |
AndyHope | 1:d1764facee30 | 345 | }// else |
AndyHope | 1:d1764facee30 | 346 | }// for |
AndyHope | 1:d1764facee30 | 347 | |
AndyHope | 1:d1764facee30 | 348 | if(ptrail){ |
AndyHope | 1:d1764facee30 | 349 | gap += ptrail;} |
AndyHope | 1:d1764facee30 | 350 | |
AndyHope | 1:d1764facee30 | 351 | pc.printf("\ngap: %f\n", gap); |
AndyHope | 1:d1764facee30 | 352 | |
AndyHope | 1:d1764facee30 | 353 | return(gap); |
AndyHope | 1:d1764facee30 | 354 | |
AndyHope | 1:d1764facee30 | 355 | }// constLength |
AndyHope | 1:d1764facee30 | 356 |