The IR Puck can mimic arbitrary infrared remote controls. Built on the Puck IOT platform.

Dependencies:   Puck IRSender mbed

The IR Puck is a puck that can mimic arbitrary infrared remote controls. This is useful for controlling things like TVs, radios, airconditioners, window blinds, and just about anything and everything that can be otherwise be controlled by a regular remote control.

A tutorial for the IR Puck is available on GitHub.

Tutorials and in-depth documentation for the Puck platform is available at the project's GitHub page

Committer:
sigveseb
Date:
Fri Aug 01 12:37:29 2014 +0000
Revision:
13:f016a0bc4a7d
Parent:
5:3642c0af497e
Child:
14:b00d0c5ba8e3
Start changing IR bt interface

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sigveseb 0:c94311378ec1 1 #include "mbed.h"
sigveseb 13:f016a0bc4a7d 2 #include "TxIR.hpp"
sigveseb 0:c94311378ec1 3
sigveseb 5:3642c0af497e 4 #define LOG_LEVEL_VERBOSE
sigveseb 5:3642c0af497e 5 #include "Puck.h"
sigveseb 0:c94311378ec1 6
sigveseb 5:3642c0af497e 7 Puck* puck = &Puck::getPuck();
sigveseb 0:c94311378ec1 8
sigveseb 13:f016a0bc4a7d 9 TxIR txir(p14);
sigveseb 13:f016a0bc4a7d 10
sigveseb 5:3642c0af497e 11 const UUID IR_SERVICE_UUID = stringToUUID("bftj ir ");
sigveseb 13:f016a0bc4a7d 12 const UUID COMMAND_UUID = stringToUUID("bftj ir command ");
sigveseb 13:f016a0bc4a7d 13 const UUID DATA_UUID = stringToUUID("bftj ir data ");
sigveseb 13:f016a0bc4a7d 14 const UUID PERIOD_UUID = stringToUUID("bftj ir period ");
sigveseb 13:f016a0bc4a7d 15
sigveseb 13:f016a0bc4a7d 16 unsigned int dataBuffer[100];
sigveseb 13:f016a0bc4a7d 17 uint8_t period = 26;
sigveseb 13:f016a0bc4a7d 18 int receiveIndex;
sigveseb 13:f016a0bc4a7d 19
sigveseb 13:f016a0bc4a7d 20 #define COMMAND_BEGIN_CODE_TRANSMISSION 0
sigveseb 13:f016a0bc4a7d 21 #define COMMAND_END_CODE_TRANSMISSION 1
sigveseb 0:c94311378ec1 22
stiaje 4:24d9873936e6 23
sigveseb 13:f016a0bc4a7d 24 void onCommandWrite(uint8_t* value) {
sigveseb 13:f016a0bc4a7d 25 LOG_VERBOSE("Got command: %i\n", value[0]);
sigveseb 13:f016a0bc4a7d 26 switch(value[0]) {
sigveseb 13:f016a0bc4a7d 27 case COMMAND_BEGIN_CODE_TRANSMISSION:
sigveseb 13:f016a0bc4a7d 28 receiveIndex = 0;
sigveseb 13:f016a0bc4a7d 29 break;
sigveseb 13:f016a0bc4a7d 30 case COMMAND_END_CODE_TRANSMISSION:
sigveseb 13:f016a0bc4a7d 31 LOG_INFO("Going to fire IR code...\n");
sigveseb 13:f016a0bc4a7d 32 txir.txSeq(period, 200, dataBuffer);
sigveseb 13:f016a0bc4a7d 33 LOG_INFO("Fire complete!\n");
sigveseb 13:f016a0bc4a7d 34 break;
sigveseb 13:f016a0bc4a7d 35 }
sigveseb 13:f016a0bc4a7d 36 }
sigveseb 13:f016a0bc4a7d 37
sigveseb 13:f016a0bc4a7d 38
sigveseb 13:f016a0bc4a7d 39 void onDataWrite(uint8_t* value) {
sigveseb 13:f016a0bc4a7d 40 LOG_VERBOSE("Got data, index: %i\n", receiveIndex);
sigveseb 13:f016a0bc4a7d 41 for(int i = 0; i < 20 && receiveIndex < 100; i += 2) {
sigveseb 13:f016a0bc4a7d 42 dataBuffer[receiveIndex++] = (value[i] << 8) | value[i + 1];
sigveseb 13:f016a0bc4a7d 43 }
sigveseb 13:f016a0bc4a7d 44 }
sigveseb 13:f016a0bc4a7d 45
sigveseb 13:f016a0bc4a7d 46
sigveseb 13:f016a0bc4a7d 47 void onPeriodWrite(uint8_t* value) {
sigveseb 13:f016a0bc4a7d 48 period = value[0];
sigveseb 13:f016a0bc4a7d 49 LOG_VERBOSE("Period is now: %i\n", period);
sigveseb 0:c94311378ec1 50 }
sigveseb 0:c94311378ec1 51
sigveseb 0:c94311378ec1 52
sigveseb 5:3642c0af497e 53 int main() {
sigveseb 13:f016a0bc4a7d 54 puck->addCharacteristic(IR_SERVICE_UUID, COMMAND_UUID, 1);
sigveseb 13:f016a0bc4a7d 55 puck->addCharacteristic(IR_SERVICE_UUID, DATA_UUID, 20);
sigveseb 13:f016a0bc4a7d 56 puck->addCharacteristic(IR_SERVICE_UUID, PERIOD_UUID, 1);
sigveseb 5:3642c0af497e 57 puck->init(0xABBA);
sigveseb 13:f016a0bc4a7d 58 puck->onCharacteristicWrite(COMMAND_UUID, onCommandWrite);
sigveseb 13:f016a0bc4a7d 59 puck->onCharacteristicWrite(DATA_UUID, onDataWrite);
sigveseb 13:f016a0bc4a7d 60 puck->onCharacteristicWrite(PERIOD_UUID, onPeriodWrite);
sigveseb 5:3642c0af497e 61 while (puck->drive());
sigveseb 0:c94311378ec1 62 }