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 13:06:27 2014 +0000
Revision:
14:b00d0c5ba8e3
Parent:
13:f016a0bc4a7d
Child:
15:cf6c517f31ad
Change 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 14:b00d0c5ba8e3 16 #define DATA_BUFFER_SIZE 100
sigveseb 14:b00d0c5ba8e3 17 unsigned int dataBuffer[DATA_BUFFER_SIZE];
sigveseb 13:f016a0bc4a7d 18 uint8_t period = 26;
sigveseb 13:f016a0bc4a7d 19 int receiveIndex;
sigveseb 13:f016a0bc4a7d 20
sigveseb 13:f016a0bc4a7d 21 #define COMMAND_BEGIN_CODE_TRANSMISSION 0
sigveseb 13:f016a0bc4a7d 22 #define COMMAND_END_CODE_TRANSMISSION 1
sigveseb 0:c94311378ec1 23
stiaje 4:24d9873936e6 24
sigveseb 13:f016a0bc4a7d 25 void onCommandWrite(uint8_t* value) {
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 14:b00d0c5ba8e3 32 txir.txSeq(period, DATA_BUFFER_SIZE, 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 14:b00d0c5ba8e3 40 for(int i = 0; i < 20 && receiveIndex < DATA_BUFFER_SIZE; i += 2) {
sigveseb 13:f016a0bc4a7d 41 dataBuffer[receiveIndex++] = (value[i] << 8) | value[i + 1];
sigveseb 13:f016a0bc4a7d 42 }
sigveseb 13:f016a0bc4a7d 43 }
sigveseb 13:f016a0bc4a7d 44
sigveseb 13:f016a0bc4a7d 45
sigveseb 13:f016a0bc4a7d 46 void onPeriodWrite(uint8_t* value) {
sigveseb 13:f016a0bc4a7d 47 period = value[0];
sigveseb 0:c94311378ec1 48 }
sigveseb 0:c94311378ec1 49
sigveseb 0:c94311378ec1 50
sigveseb 5:3642c0af497e 51 int main() {
sigveseb 13:f016a0bc4a7d 52 puck->addCharacteristic(IR_SERVICE_UUID, COMMAND_UUID, 1);
sigveseb 13:f016a0bc4a7d 53 puck->addCharacteristic(IR_SERVICE_UUID, DATA_UUID, 20);
sigveseb 13:f016a0bc4a7d 54 puck->addCharacteristic(IR_SERVICE_UUID, PERIOD_UUID, 1);
sigveseb 5:3642c0af497e 55 puck->init(0xABBA);
sigveseb 14:b00d0c5ba8e3 56 puck->onCharacteristicWrite(&COMMAND_UUID, onCommandWrite);
sigveseb 14:b00d0c5ba8e3 57 puck->onCharacteristicWrite(&DATA_UUID, onDataWrite);
sigveseb 14:b00d0c5ba8e3 58 puck->onCharacteristicWrite(&PERIOD_UUID, onPeriodWrite);
sigveseb 5:3642c0af497e 59 while (puck->drive());
sigveseb 0:c94311378ec1 60 }