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 14:02:19 2014 +0000
Revision:
16:0891823672f4
Parent:
15:cf6c517f31ad
Child:
17:6375c75a88a5
Reduce padding requirements, increase buffer size

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
cristea 10:35d78d589580 4 #define LOG_LEVEL_ERROR
cristea 10:35d78d589580 5 #include "Log.h"
sigveseb 5:3642c0af497e 6 #include "Puck.h"
sigveseb 0:c94311378ec1 7
sigveseb 5:3642c0af497e 8 Puck* puck = &Puck::getPuck();
sigveseb 0:c94311378ec1 9
sigveseb 13:f016a0bc4a7d 10 TxIR txir(p14);
sigveseb 13:f016a0bc4a7d 11
sigveseb 5:3642c0af497e 12 const UUID IR_SERVICE_UUID = stringToUUID("bftj ir ");
sigveseb 13:f016a0bc4a7d 13 const UUID COMMAND_UUID = stringToUUID("bftj ir command ");
sigveseb 13:f016a0bc4a7d 14 const UUID DATA_UUID = stringToUUID("bftj ir data ");
sigveseb 13:f016a0bc4a7d 15 const UUID PERIOD_UUID = stringToUUID("bftj ir period ");
sigveseb 13:f016a0bc4a7d 16
sigveseb 16:0891823672f4 17 #define DATA_BUFFER_SIZE 200
sigveseb 14:b00d0c5ba8e3 18 unsigned int dataBuffer[DATA_BUFFER_SIZE];
sigveseb 13:f016a0bc4a7d 19 uint8_t period = 26;
sigveseb 13:f016a0bc4a7d 20 int receiveIndex;
sigveseb 13:f016a0bc4a7d 21
sigveseb 13:f016a0bc4a7d 22 #define COMMAND_BEGIN_CODE_TRANSMISSION 0
sigveseb 13:f016a0bc4a7d 23 #define COMMAND_END_CODE_TRANSMISSION 1
sigveseb 0:c94311378ec1 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:
stiaje 15:cf6c517f31ad 31 puck->getBle().disconnect();
sigveseb 13:f016a0bc4a7d 32 LOG_INFO("Going to fire IR code...\n");
sigveseb 16:0891823672f4 33 txir.txSeq(period, receiveIndex, dataBuffer);
sigveseb 13:f016a0bc4a7d 34 LOG_INFO("Fire complete!\n");
sigveseb 13:f016a0bc4a7d 35 break;
sigveseb 13:f016a0bc4a7d 36 }
sigveseb 13:f016a0bc4a7d 37 }
sigveseb 0:c94311378ec1 38
stiaje 4:24d9873936e6 39
sigveseb 13:f016a0bc4a7d 40 void onDataWrite(uint8_t* value) {
sigveseb 14:b00d0c5ba8e3 41 for(int i = 0; i < 20 && receiveIndex < DATA_BUFFER_SIZE; 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 0:c94311378ec1 49 }
sigveseb 0:c94311378ec1 50
sigveseb 0:c94311378ec1 51
sigveseb 5:3642c0af497e 52 int main() {
sigveseb 13:f016a0bc4a7d 53 puck->addCharacteristic(IR_SERVICE_UUID, COMMAND_UUID, 1);
sigveseb 13:f016a0bc4a7d 54 puck->addCharacteristic(IR_SERVICE_UUID, DATA_UUID, 20);
sigveseb 13:f016a0bc4a7d 55 puck->addCharacteristic(IR_SERVICE_UUID, PERIOD_UUID, 1);
sigveseb 5:3642c0af497e 56 puck->init(0xABBA);
stiaje 15:cf6c517f31ad 57
sigveseb 14:b00d0c5ba8e3 58 puck->onCharacteristicWrite(&COMMAND_UUID, onCommandWrite);
sigveseb 14:b00d0c5ba8e3 59 puck->onCharacteristicWrite(&DATA_UUID, onDataWrite);
sigveseb 14:b00d0c5ba8e3 60 puck->onCharacteristicWrite(&PERIOD_UUID, onPeriodWrite);
stiaje 15:cf6c517f31ad 61
sigveseb 5:3642c0af497e 62 while (puck->drive());
sigveseb 0:c94311378ec1 63 }