├── .gitattributes ├── BabelFish └── BabelFish.ino └── README.md /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /BabelFish/BabelFish.ino: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int RECV_PIN = 11; 4 | int BEEP_PIN = 6; 5 | 6 | unsigned long INTERVALL; 7 | 8 | 9 | unsigned long SamsTVon = 0xE0E040BF; 10 | unsigned long SamsVolPlus = 0xE0E0E01F; 11 | unsigned long SamsVolMinus = 0xE0E0D02F; 12 | unsigned long SamsVolMute = 0xE0E0F00F; 13 | 14 | unsigned long SonyTVon = 0xA90; 15 | unsigned long SonyTVMinus = 0xC90; 16 | 17 | unsigned long YvolPlus = 0x5EA158A7; 18 | unsigned long YvolMinus = 0x5EA1D827; 19 | unsigned long YvolMute = 0x5EA138C7; 20 | 21 | long lastMovement; 22 | int NBRVOLUME = 5; 23 | 24 | 25 | IRrecv irrecv(RECV_PIN); 26 | 27 | IRsend irsend; 28 | 29 | decode_results results; 30 | 31 | void setup() 32 | { 33 | // setup LED pins 34 | pinMode(BEEP_PIN, OUTPUT); 35 | Serial.begin(9600); 36 | // In case the interrupt driver crashes on setup, give a clue 37 | // to the user what's going on. 38 | Serial.println("Enabling IRin"); 39 | irrecv.enableIRIn(); // Start the receiver 40 | Serial.println("Enabled IRin"); 41 | lastMovement = millis(); 42 | 43 | INTERVALL = 20 * 60000; // 20 minutes 44 | } 45 | 46 | void loop() { 47 | if (millis() > lastMovement + INTERVALL) { 48 | lastMovement = millis(); 49 | Serial.println("Watchdog"); 50 | beep(); 51 | for (int i = 0; i < 8; i++) { 52 | irsend.sendSony(SonyTVMinus, 12); 53 | delay(20); 54 | } 55 | irrecv.enableIRIn(); 56 | } 57 | if (irrecv.decode(&results)) { 58 | Serial.println(results.value , HEX); 59 | irrecv.resume(); // Receive the next value 60 | if (results.value == SamsVolPlus) { 61 | beep(); 62 | sendPlus(NBRVOLUME); 63 | lastMovement = millis(); 64 | } 65 | if (results.value == SamsVolMinus) { 66 | beep(); 67 | sendMinus(NBRVOLUME); 68 | lastMovement = millis(); 69 | } 70 | if (results.value == SamsVolMute) { 71 | beep(); 72 | Serial.println("Mute"); 73 | irsend.sendNEC(YvolMute, 32); 74 | irrecv.enableIRIn(); 75 | lastMovement = millis(); 76 | } 77 | if (results.value == SamsTVon) { 78 | beep(); 79 | Serial.println("TV on"); 80 | for (int i = 0; i < 10; i++) { 81 | irsend.sendSony(0xA90, 12); 82 | delay(40); 83 | } 84 | irrecv.enableIRIn(); 85 | lastMovement = millis(); 86 | } 87 | } 88 | } 89 | 90 | void sendPlus(int nbr) { 91 | int i = nbr; 92 | Serial.println("Plus"); 93 | while (i > 1) { 94 | irsend.sendNEC(YvolPlus, 32); 95 | irrecv.enableIRIn(); 96 | delay(400); 97 | i--; 98 | } 99 | irsend.sendNEC(YvolPlus, 32); 100 | irrecv.enableIRIn(); 101 | } 102 | 103 | void sendMinus(int nbr) { 104 | int i = nbr; 105 | Serial.println("Minus"); 106 | while (i > 1) { 107 | irsend.sendNEC(YvolMinus, 32); 108 | irrecv.enableIRIn(); 109 | delay(400); 110 | i--; 111 | } 112 | irsend.sendNEC(YvolMinus, 32); 113 | irrecv.enableIRIn(); 114 | 115 | } 116 | 117 | void beep() { 118 | digitalWrite(BEEP_PIN, HIGH); 119 | delay(100); 120 | digitalWrite(BEEP_PIN, LOW); 121 | } 122 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # IR-Babelfish 2 | 3 | 4 | Code for video: https://youtu.be/5yyy7h7qh80 5 | --------------------------------------------------------------------------------