Components and supplies
Wemos D1 Mini
Arduino Nano R3
General Purpose Transistor NPN
USB-A to Micro-USB Cable
Plastic Enclosure (clear lid)
Generic IR LED (940nm)
Veroboard
NodeMCU ESP8266 Breakout Board
IR receiver (generic)
resistor 470 Ohm
ESP8266 ESP-12E
Resistor 330 ohm
Generic RGB LED
Tools and machines
Soldering iron (generic)
Apps and platforms
Arduino IDE
Project description
Code
This is the ESP8266 - NodeMCU version of the code
This is very cool and useful widget.
Trans-coder for Arduino Nano
c_cpp
Version 0.75 First very rough cut - Proof of concept Done back in 2016 so coding is very rough but does work and solve the problem
1//------------------------------------------------------------------------------ 2// Include the IRremote library header 3// 4#include <IRremote.h> 5 6#define DECODE_NEC 1 7#define TVONOFF 0xFB38C7 8#define TVAV 0xFBE817 // signal source 9#define TVVOLUP 0xFBD22D 10#define TVVOLDN 0xFBF20D 11#define TVCHUP 0xFB906F 12#define TVCHDN 0xFBA05F 13#define TV1PAD 0xFB2AD5 14#define TV2PAD 0xFB6897 15#define TV3PAD 0xFBA857 16#define TV4PAD 0xFB0AF5 17#define TV5PAD 0xFB48B7 18#define TV6PAD 0xFB8877 19#define TV7PAD 0xFB32CD 20#define TV8PAD 0xFB708F 21#define TV9PAD 0xFBB04F 22#define TV0PAD 0xFB30CF 23#define TVLNAV 0xFBE21D 24#define TVRNAV 0xFBE01F 25#define TVUNAV 0xFB58A7 26#define TVDNAV 0xFB12ED 27#define TVOKNAV 0xFB609F 28#define TVAPMENU 0xFB18E7 29#define TVEXITNAV 0xFB50AF 30#define TVMUTE 0xFB10EF 31#define TVPLAY 0xFB5AA5 32#define TVPAUSE 0xFB4AB5 33#define TVSTOP 0xFBBA45 34#define TVWTF 0xFB3AC5 35#define TVREW 0xFBAA55 36#define TVFF 0xFB7A85 37#define TVPREV 0xFB8A75 38#define TVNEXT 0xFB9A65 39#define TVTEXT 0xFB9A65 40#define TVSUBTTL 0xFBFA05 41#define TVFREEZE 0xFB9867 42#define TVINFO 0xFB1AE5 43#define TVRED 0xFB6A95 44#define TVGREEN 0xFBEA15 45#define TVYELLOW 0xFBF807 46#define TVBLUE 0xFBDA25 47 48 49IRsend irsend; 50long PrevCode; 51int iMode = 0; 52bool bTransmit=false; 53bool bRepeat=false; 54//------------------------------------------------------------------------------ 55// Tell IRremote which Arduino pin is connected to the IR Receiver (TSOP4838) 56// 57int recvPin = 11; 58IRrecv irrecv(recvPin); 59 60 61//+============================================================================= 62// Configure the Arduino 63// 64void setup ( ) 65{ 66 Serial.begin(115200); // Status message will be sent to PC at 9600 baud 67 Serial.println("Start"); 68 pinMode(3,OUTPUT); // IR LED 69 pinMode(4,OUTPUT); // RGB LED FOR MODE INDICATOR 70 pinMode(5,OUTPUT); 71 pinMode(6,OUTPUT); 72 irrecv.enableIRIn(); // Start the receiver 73 irrecv.blink13(1); 74} 75 76//+============================================================================= 77// Display IR code 78// 79void ircode (decode_results *results) 80{ 81 // Panasonic has an Address 82 if (results->decode_type == PANASONIC) { 83 Serial.print(results->address, HEX); 84 Serial.print(":"); 85 } 86 87 // Print Code 88 Serial.print(results->value, HEX); 89} 90 91//+============================================================================= 92// Display encoding type 93// 94void encoding (decode_results *results) 95{ 96 switch (results->decode_type) { 97 default: 98 case UNKNOWN: Serial.print("UNKNOWN"); break ; 99 case NEC: Serial.print("NEC"); break ; 100 case SONY: Serial.print("SONY"); break ; 101 case RC5: Serial.print("RC5"); break ; 102 case RC6: Serial.print("RC6"); break ; 103 case DISH: Serial.print("DISH"); break ; 104 case SHARP: Serial.print("SHARP"); break ; 105 case JVC: Serial.print("JVC"); break ; 106 case SANYO: Serial.print("SANYO"); break ; 107 case MITSUBISHI: Serial.print("MITSUBISHI"); break ; 108 case SAMSUNG: Serial.print("SAMSUNG"); break ; 109 case LG: Serial.print("LG"); break ; 110 case WHYNTER: Serial.print("WHYNTER"); break ; 111 case AIWA_RC_T501: Serial.print("AIWA_RC_T501"); break ; 112 case PANASONIC: Serial.print("PANASONIC"); break ; 113 case DENON: Serial.print("Denon"); break ; 114 } 115} 116 117//+============================================================================= 118// Dump out the decode_results structure. 119// 120void dumpInfo (decode_results *results) 121{ 122 // Check if the buffer overflowed 123 if (results->overflow) { 124 Serial.println("IR code too long. Edit IRremoteInt.h and increase RAWLEN"); 125 return; 126 } 127 128 // Show Encoding standard 129 Serial.print("Encoding : "); 130 encoding(results); 131 Serial.println(""); 132 133 // Show Code & length 134 Serial.print("Code : "); 135 ircode(results); 136 Serial.print(" ("); 137 Serial.print(results->bits, DEC); 138 Serial.println(" bits)"); 139} 140 141//+============================================================================= 142// Dump out the decode_results structure. 143// 144void dumpRaw (decode_results *results) 145{ 146 // Print Raw data 147 Serial.print("Timing["); 148 Serial.print(results->rawlen-1, DEC); 149 Serial.println("]: "); 150 151 for (int i = 1; i < results->rawlen; i++) { 152 unsigned long x = results->rawbuf[i] * USECPERTICK; 153 if (!(i & 1)) { // even 154 Serial.print("-"); 155 if (x < 1000) Serial.print(" ") ; 156 if (x < 100) Serial.print(" ") ; 157 Serial.print(x, DEC); 158 } else { // odd 159 Serial.print(" "); 160 Serial.print("+"); 161 if (x < 1000) Serial.print(" ") ; 162 if (x < 100) Serial.print(" ") ; 163 Serial.print(x, DEC); 164 if (i < results->rawlen-1) Serial.print(", "); //',' not needed for last one 165 } 166 if (!(i % 8)) Serial.println(""); 167 } 168 Serial.println(""); // Newline 169} 170 171//+============================================================================= 172// Dump out the decode_results structure. 173// 174void dumpCode (decode_results *results) 175{ 176 // Start declaration 177 Serial.print("unsigned int "); // variable type 178 Serial.print("rawData["); // array name 179 Serial.print(results->rawlen - 1, DEC); // array size 180 Serial.print("] = {"); // Start declaration 181 182 // Dump data 183 for (int i = 1; i < results->rawlen; i++) { 184 Serial.print(results->rawbuf[i] * USECPERTICK, DEC); 185 if ( i < results->rawlen-1 ) Serial.print(","); // ',' not needed on last one 186 if (!(i & 1)) Serial.print(" "); 187 } 188 189 // End declaration 190 Serial.print("};"); // 191 192 // Comment 193 Serial.print(" // "); 194 encoding(results); 195 Serial.print(" "); 196 ircode(results); 197 198 // Newline 199 Serial.println(""); 200 201 // Now dump "known" codes 202 if (results->decode_type != UNKNOWN) { 203 204 // Some protocols have an address 205 if (results->decode_type == PANASONIC) { 206 Serial.print("unsigned int addr = 0x"); 207 Serial.print(results->address, HEX); 208 Serial.println(";"); 209 } 210 211 // All protocols have data 212 Serial.print("unsigned int data = 0x"); 213 Serial.print(results->value, HEX); 214 Serial.println(";"); 215 } 216} 217 218//+============================================================================= 219// The repeating section of the code 220// 221void loop ( ) 222{ 223 decode_results results; // Somewhere to store the results 224 225 if (irrecv.decode(&results)) { // Grab an IR code 226 dumpInfo(&results); // Output the results 227 dumpRaw(&results); // Output the results in RAW format 228 dumpCode(&results); // Output the results as source code 229 Serial.println(""); // Blank line between entries 230 231 232// Serial.println(iMode); 233 Serial.print("R "); 234 Serial.println(results.value, HEX); 235 236 bTransmit = false ; 237 switch(results.value){ 238 case 0x18E710EF: // TV on off 239 PrevCode = TVONOFF ; 240 bTransmit = true ; 241 bRepeat = false ; 242 iMode = 0 ; 243 break; 244 case 0x18E750AF: // AV 245 PrevCode = TVAV ; 246 bTransmit = true ; 247 bRepeat = false ; 248 iMode = 0 ; 249 break; 250 case 0x18E740BF: // VOL + 251 PrevCode = TVVOLUP ; 252 bTransmit = true ; 253 bRepeat = true ; 254 iMode = 0 ; 255 break; 256 case 0x18E7C03F: // VOL - 257 PrevCode = TVVOLDN ; 258 bTransmit = true ; 259 bRepeat = true ; 260 iMode = 0 ; 261 break; 262 case 0x18E700FF: // CH + 263 PrevCode = TVCHUP ; 264 bTransmit = true ; 265 bRepeat = false ; 266 iMode = 0 ; 267 break; 268 case 0x18E7807F: // CH- 269 PrevCode = TVCHDN ; 270 bTransmit = true ; 271 bRepeat = false ; 272 iMode = 0 ; 273 break; 274 case 0xFFFFFFFF: // repeat code 275 if ( bRepeat == true ){ 276 bTransmit = true ; 277 } 278 break; 279 280 case 0xD880287: // blue button 281 if ( iMode != 1 ){ 282 iMode = 1; 283 }else{ 284 iMode = 0; 285 } 286 bRepeat = false ; 287 break; 288 case 0xD88C247: // yellow button 289 PrevCode = TVMUTE ; 290 bTransmit = true ; 291 bRepeat = false ; 292 iMode = 0 ; 293 break; 294 case 0xD8842C7: // green button 295 if ( iMode != 3 ){ 296 iMode = 2; 297 }else{ 298 iMode = 0; 299 } 300 bRepeat = false ; 301 break; 302 case 0xD888207: // red button 303 if ( iMode != 4 ){ 304 iMode = 3; 305 }else{ 306 iMode = 0; 307 } 308 bRepeat = false ; 309 break; 310 case 0xD08E1E4: // left nav 311 if ( iMode == 1 ){ 312 PrevCode = TVLNAV ; 313 bTransmit = true ; 314 bRepeat = false ; 315 } 316 break; 317 case 0xD081114: // right nav 318 if ( iMode == 1 ){ 319 PrevCode = TVRNAV ; 320 bTransmit = true ; 321 bRepeat = false ; 322 } 323 break; 324 case 0xD086164: // down nav 325 if ( iMode == 1 ){ 326 PrevCode = TVDNAV ; 327 bTransmit = true ; 328 bRepeat = false ; 329 } 330 break; 331 case 0xD08A1A4: // up nav 332 if ( iMode == 1 ){ 333 PrevCode = TVUNAV ; 334 bTransmit = true ; 335 bRepeat = false ; 336 } 337 break; 338 case 0xD084144: // ok nav 339 if ( iMode == 1 ){ 340 PrevCode = TVOKNAV ; 341 bTransmit = true ; 342 bRepeat = false ; 343 } 344 break; 345 case 0xD888A0F: // exit nav 346 if ( iMode == 1 ){ 347 PrevCode = TVEXITNAV ; 348 bTransmit = true ; 349 bRepeat = false ; 350 } 351 break; 352 case 0xD086663: // status nav 353 bRepeat = false ; 354 break; 355 case 0xD088184: // return nav 356 bRepeat = false ; 357 break; 358 case 0xD08080D: // 1 nav pad 359 if ( iMode == 1 ){ 360 PrevCode = TV1PAD ; 361 bTransmit = true ; 362 bRepeat = false ; 363 } 364 break; 365 case 0xD08888D: // 2 nav pad 366 if ( iMode == 1 ){ 367 PrevCode = TV2PAD ; 368 bTransmit = true ; 369 bRepeat = false ; 370 } 371 break; 372 case 0xD08484D: // 3 nav pad 373 if ( iMode == 1 ){ 374 PrevCode = TV3PAD ; 375 bTransmit = true ; 376 bRepeat = false ; 377 } 378 break; 379 case 0xD08C8CD: // 4 nav pad 380 if ( iMode == 1 ){ 381 PrevCode = TV4PAD ; 382 bTransmit = true ; 383 bRepeat = false ; 384 } 385 break; 386 case 0xD08282D: // 5 nav pad 387 if ( iMode == 1 ){ 388 PrevCode = TV5PAD ; 389 bTransmit = true ; 390 bRepeat = false ; 391 } 392 break; 393 case 0xD08A8AD: // 6 nav pad 394 if ( iMode == 1 ){ 395 PrevCode = TV6PAD ; 396 bTransmit = true ; 397 bRepeat = false ; 398 } 399 break; 400 case 0xD08686D: // 7 nav pad 401 if ( iMode == 1 ){ 402 PrevCode = TV7PAD ; 403 bTransmit = true ; 404 bRepeat = false ; 405 } 406 break; 407 case 0xD08E8ED: // 8 nav pad 408 if ( iMode == 1 ){ 409 PrevCode = TV8PAD ; 410 bTransmit = true ; 411 bRepeat = false ; 412 } 413 break; 414 case 0xD08181D: // 9 nav pad 415 if ( iMode == 1 ){ 416 PrevCode = TV9PAD ; 417 bTransmit = true ; 418 bRepeat = false ; 419 } 420 break; 421 case 0xD08989D: // 0 nav pad 422 if ( iMode == 1 ){ 423 PrevCode = TV0PAD ; 424 bTransmit = true ; 425 bRepeat = false ; 426 } 427 break; 428 default: 429 bTransmit = false ; 430 bRepeat = false ; 431 break; 432 } 433 if ( bTransmit ){ 434 Serial.print("T "); 435 Serial.println(PrevCode, HEX); 436 irsend.sendNEC(PrevCode,32); 437 bTransmit = false ; 438 } 439 delay(50); 440 irrecv.resume(); // Prepare for the next value 441 442 irrecv.enableIRIn(); // Start the receiver 443 irrecv.blink13(1); 444 445 } 446 447} 448
Trans-coder for Arduino Nano
c_cpp
Version 0.75 First very rough cut - Proof of concept Done back in 2016 so coding is very rough but does work and solve the problem
1//------------------------------------------------------------------------------ 2// Include the IRremote library header 3// 4#include <IRremote.h> 5 6#define DECODE_NEC 1 7#define TVONOFF 0xFB38C7 8#define TVAV 0xFBE817 // signal source 9#define TVVOLUP 0xFBD22D 10#define TVVOLDN 0xFBF20D 11#define TVCHUP 0xFB906F 12#define TVCHDN 0xFBA05F 13#define TV1PAD 0xFB2AD5 14#define TV2PAD 0xFB6897 15#define TV3PAD 0xFBA857 16#define TV4PAD 0xFB0AF5 17#define TV5PAD 0xFB48B7 18#define TV6PAD 0xFB8877 19#define TV7PAD 0xFB32CD 20#define TV8PAD 0xFB708F 21#define TV9PAD 0xFBB04F 22#define TV0PAD 0xFB30CF 23#define TVLNAV 0xFBE21D 24#define TVRNAV 0xFBE01F 25#define TVUNAV 0xFB58A7 26#define TVDNAV 0xFB12ED 27#define TVOKNAV 0xFB609F 28#define TVAPMENU 0xFB18E7 29#define TVEXITNAV 0xFB50AF 30#define TVMUTE 0xFB10EF 31#define TVPLAY 0xFB5AA5 32#define TVPAUSE 0xFB4AB5 33#define TVSTOP 0xFBBA45 34#define TVWTF 0xFB3AC5 35#define TVREW 0xFBAA55 36#define TVFF 0xFB7A85 37#define TVPREV 0xFB8A75 38#define TVNEXT 0xFB9A65 39#define TVTEXT 0xFB9A65 40#define TVSUBTTL 0xFBFA05 41#define TVFREEZE 0xFB9867 42#define TVINFO 0xFB1AE5 43#define TVRED 0xFB6A95 44#define TVGREEN 0xFBEA15 45#define TVYELLOW 0xFBF807 46#define TVBLUE 0xFBDA25 47 48 49IRsend irsend; 50long PrevCode; 51int iMode = 0; 52bool bTransmit=false; 53bool bRepeat=false; 54//------------------------------------------------------------------------------ 55// Tell IRremote which Arduino pin is connected to the IR Receiver (TSOP4838) 56// 57int recvPin = 11; 58IRrecv irrecv(recvPin); 59 60 61//+============================================================================= 62// Configure the Arduino 63// 64void setup ( ) 65{ 66 Serial.begin(115200); // Status message will be sent to PC at 9600 baud 67 Serial.println("Start"); 68 pinMode(3,OUTPUT); // IR LED 69 pinMode(4,OUTPUT); // RGB LED FOR MODE INDICATOR 70 pinMode(5,OUTPUT); 71 pinMode(6,OUTPUT); 72 irrecv.enableIRIn(); // Start the receiver 73 irrecv.blink13(1); 74} 75 76//+============================================================================= 77// Display IR code 78// 79void ircode (decode_results *results) 80{ 81 // Panasonic has an Address 82 if (results->decode_type == PANASONIC) { 83 Serial.print(results->address, HEX); 84 Serial.print(":"); 85 } 86 87 // Print Code 88 Serial.print(results->value, HEX); 89} 90 91//+============================================================================= 92// Display encoding type 93// 94void encoding (decode_results *results) 95{ 96 switch (results->decode_type) { 97 default: 98 case UNKNOWN: Serial.print("UNKNOWN"); break ; 99 case NEC: Serial.print("NEC"); break ; 100 case SONY: Serial.print("SONY"); break ; 101 case RC5: Serial.print("RC5"); break ; 102 case RC6: Serial.print("RC6"); break ; 103 case DISH: Serial.print("DISH"); break ; 104 case SHARP: Serial.print("SHARP"); break ; 105 case JVC: Serial.print("JVC"); break ; 106 case SANYO: Serial.print("SANYO"); break ; 107 case MITSUBISHI: Serial.print("MITSUBISHI"); break ; 108 case SAMSUNG: Serial.print("SAMSUNG"); break ; 109 case LG: Serial.print("LG"); break ; 110 case WHYNTER: Serial.print("WHYNTER"); break ; 111 case AIWA_RC_T501: Serial.print("AIWA_RC_T501"); break ; 112 case PANASONIC: Serial.print("PANASONIC"); break ; 113 case DENON: Serial.print("Denon"); break ; 114 } 115} 116 117//+============================================================================= 118// Dump out the decode_results structure. 119// 120void dumpInfo (decode_results *results) 121{ 122 // Check if the buffer overflowed 123 if (results->overflow) { 124 Serial.println("IR code too long. Edit IRremoteInt.h and increase RAWLEN"); 125 return; 126 } 127 128 // Show Encoding standard 129 Serial.print("Encoding : "); 130 encoding(results); 131 Serial.println(""); 132 133 // Show Code & length 134 Serial.print("Code : "); 135 ircode(results); 136 Serial.print(" ("); 137 Serial.print(results->bits, DEC); 138 Serial.println(" bits)"); 139} 140 141//+============================================================================= 142// Dump out the decode_results structure. 143// 144void dumpRaw (decode_results *results) 145{ 146 // Print Raw data 147 Serial.print("Timing["); 148 Serial.print(results->rawlen-1, DEC); 149 Serial.println("]: "); 150 151 for (int i = 1; i < results->rawlen; i++) { 152 unsigned long x = results->rawbuf[i] * USECPERTICK; 153 if (!(i & 1)) { // even 154 Serial.print("-"); 155 if (x < 1000) Serial.print(" ") ; 156 if (x < 100) Serial.print(" ") ; 157 Serial.print(x, DEC); 158 } else { // odd 159 Serial.print(" "); 160 Serial.print("+"); 161 if (x < 1000) Serial.print(" ") ; 162 if (x < 100) Serial.print(" ") ; 163 Serial.print(x, DEC); 164 if (i < results->rawlen-1) Serial.print(", "); //',' not needed for last one 165 } 166 if (!(i % 8)) Serial.println(""); 167 } 168 Serial.println(""); // Newline 169} 170 171//+============================================================================= 172// Dump out the decode_results structure. 173// 174void dumpCode (decode_results *results) 175{ 176 // Start declaration 177 Serial.print("unsigned int "); // variable type 178 Serial.print("rawData["); // array name 179 Serial.print(results->rawlen - 1, DEC); // array size 180 Serial.print("] = {"); // Start declaration 181 182 // Dump data 183 for (int i = 1; i < results->rawlen; i++) { 184 Serial.print(results->rawbuf[i] * USECPERTICK, DEC); 185 if ( i < results->rawlen-1 ) Serial.print(","); // ',' not needed on last one 186 if (!(i & 1)) Serial.print(" "); 187 } 188 189 // End declaration 190 Serial.print("};"); // 191 192 // Comment 193 Serial.print(" // "); 194 encoding(results); 195 Serial.print(" "); 196 ircode(results); 197 198 // Newline 199 Serial.println(""); 200 201 // Now dump "known" codes 202 if (results->decode_type != UNKNOWN) { 203 204 // Some protocols have an address 205 if (results->decode_type == PANASONIC) { 206 Serial.print("unsigned int addr = 0x"); 207 Serial.print(results->address, HEX); 208 Serial.println(";"); 209 } 210 211 // All protocols have data 212 Serial.print("unsigned int data = 0x"); 213 Serial.print(results->value, HEX); 214 Serial.println(";"); 215 } 216} 217 218//+============================================================================= 219// The repeating section of the code 220// 221void loop ( ) 222{ 223 decode_results results; // Somewhere to store the results 224 225 if (irrecv.decode(&results)) { // Grab an IR code 226 dumpInfo(&results); // Output the results 227 dumpRaw(&results); // Output the results in RAW format 228 dumpCode(&results); // Output the results as source code 229 Serial.println(""); // Blank line between entries 230 231 232// Serial.println(iMode); 233 Serial.print("R "); 234 Serial.println(results.value, HEX); 235 236 bTransmit = false ; 237 switch(results.value){ 238 case 0x18E710EF: // TV on off 239 PrevCode = TVONOFF ; 240 bTransmit = true ; 241 bRepeat = false ; 242 iMode = 0 ; 243 break; 244 case 0x18E750AF: // AV 245 PrevCode = TVAV ; 246 bTransmit = true ; 247 bRepeat = false ; 248 iMode = 0 ; 249 break; 250 case 0x18E740BF: // VOL + 251 PrevCode = TVVOLUP ; 252 bTransmit = true ; 253 bRepeat = true ; 254 iMode = 0 ; 255 break; 256 case 0x18E7C03F: // VOL - 257 PrevCode = TVVOLDN ; 258 bTransmit = true ; 259 bRepeat = true ; 260 iMode = 0 ; 261 break; 262 case 0x18E700FF: // CH + 263 PrevCode = TVCHUP ; 264 bTransmit = true ; 265 bRepeat = false ; 266 iMode = 0 ; 267 break; 268 case 0x18E7807F: // CH- 269 PrevCode = TVCHDN ; 270 bTransmit = true ; 271 bRepeat = false ; 272 iMode = 0 ; 273 break; 274 case 0xFFFFFFFF: // repeat code 275 if ( bRepeat == true ){ 276 bTransmit = true ; 277 } 278 break; 279 280 case 0xD880287: // blue button 281 if ( iMode != 1 ){ 282 iMode = 1; 283 }else{ 284 iMode = 0; 285 } 286 bRepeat = false ; 287 break; 288 case 0xD88C247: // yellow button 289 PrevCode = TVMUTE ; 290 bTransmit = true ; 291 bRepeat = false ; 292 iMode = 0 ; 293 break; 294 case 0xD8842C7: // green button 295 if ( iMode != 3 ){ 296 iMode = 2; 297 }else{ 298 iMode = 0; 299 } 300 bRepeat = false ; 301 break; 302 case 0xD888207: // red button 303 if ( iMode != 4 ){ 304 iMode = 3; 305 }else{ 306 iMode = 0; 307 } 308 bRepeat = false ; 309 break; 310 case 0xD08E1E4: // left nav 311 if ( iMode == 1 ){ 312 PrevCode = TVLNAV ; 313 bTransmit = true ; 314 bRepeat = false ; 315 } 316 break; 317 case 0xD081114: // right nav 318 if ( iMode == 1 ){ 319 PrevCode = TVRNAV ; 320 bTransmit = true ; 321 bRepeat = false ; 322 } 323 break; 324 case 0xD086164: // down nav 325 if ( iMode == 1 ){ 326 PrevCode = TVDNAV ; 327 bTransmit = true ; 328 bRepeat = false ; 329 } 330 break; 331 case 0xD08A1A4: // up nav 332 if ( iMode == 1 ){ 333 PrevCode = TVUNAV ; 334 bTransmit = true ; 335 bRepeat = false ; 336 } 337 break; 338 case 0xD084144: // ok nav 339 if ( iMode == 1 ){ 340 PrevCode = TVOKNAV ; 341 bTransmit = true ; 342 bRepeat = false ; 343 } 344 break; 345 case 0xD888A0F: // exit nav 346 if ( iMode == 1 ){ 347 PrevCode = TVEXITNAV ; 348 bTransmit = true ; 349 bRepeat = false ; 350 } 351 break; 352 case 0xD086663: // status nav 353 bRepeat = false ; 354 break; 355 case 0xD088184: // return nav 356 bRepeat = false ; 357 break; 358 case 0xD08080D: // 1 nav pad 359 if ( iMode == 1 ){ 360 PrevCode = TV1PAD ; 361 bTransmit = true ; 362 bRepeat = false ; 363 } 364 break; 365 case 0xD08888D: // 2 nav pad 366 if ( iMode == 1 ){ 367 PrevCode = TV2PAD ; 368 bTransmit = true ; 369 bRepeat = false ; 370 } 371 break; 372 case 0xD08484D: // 3 nav pad 373 if ( iMode == 1 ){ 374 PrevCode = TV3PAD ; 375 bTransmit = true ; 376 bRepeat = false ; 377 } 378 break; 379 case 0xD08C8CD: // 4 nav pad 380 if ( iMode == 1 ){ 381 PrevCode = TV4PAD ; 382 bTransmit = true ; 383 bRepeat = false ; 384 } 385 break; 386 case 0xD08282D: // 5 nav pad 387 if ( iMode == 1 ){ 388 PrevCode = TV5PAD ; 389 bTransmit = true ; 390 bRepeat = false ; 391 } 392 break; 393 case 0xD08A8AD: // 6 nav pad 394 if ( iMode == 1 ){ 395 PrevCode = TV6PAD ; 396 bTransmit = true ; 397 bRepeat = false ; 398 } 399 break; 400 case 0xD08686D: // 7 nav pad 401 if ( iMode == 1 ){ 402 PrevCode = TV7PAD ; 403 bTransmit = true ; 404 bRepeat = false ; 405 } 406 break; 407 case 0xD08E8ED: // 8 nav pad 408 if ( iMode == 1 ){ 409 PrevCode = TV8PAD ; 410 bTransmit = true ; 411 bRepeat = false ; 412 } 413 break; 414 case 0xD08181D: // 9 nav pad 415 if ( iMode == 1 ){ 416 PrevCode = TV9PAD ; 417 bTransmit = true ; 418 bRepeat = false ; 419 } 420 break; 421 case 0xD08989D: // 0 nav pad 422 if ( iMode == 1 ){ 423 PrevCode = TV0PAD ; 424 bTransmit = true ; 425 bRepeat = false ; 426 } 427 break; 428 default: 429 bTransmit = false ; 430 bRepeat = false ; 431 break; 432 } 433 if ( bTransmit ){ 434 Serial.print("T "); 435 Serial.println(PrevCode, HEX); 436 irsend.sendNEC(PrevCode,32); 437 bTransmit = false ; 438 } 439 delay(50); 440 irrecv.resume(); // Prepare for the next value 441 442 irrecv.enableIRIn(); // Start the receiver 443 irrecv.blink13(1); 444 445 } 446 447} 448
This is the ESP8266 - NodeMCU version of the code
This is very cool and useful widget.
Downloadable files
Simple Schematic
Simple Schematic
Simple Schematic
Simple Schematic
The ESP8266 version
Sorry... The tri-color LED is shown the wrong polarity
The ESP8266 version
Comments
Only logged in users can leave comments