Johannes Stratmann
/
IRMP_Receiver
Sample code for IRMP library
main.cpp
- Committer:
- JojoS
- Date:
- 2016-01-09
- Revision:
- 1:57d9ea192a5e
- Parent:
- 0:4146c9dd6aa5
File content as of revision 1:57d9ea192a5e:
#include "mbed.h" #include "irmp.h" #define LED_ON 0 #define LED_OFF 1 // LED as test output DigitalOut led(P0_14, LED_OFF); DigitalOut flash(P0_12, LED_OFF); // cyclic interrupt for IRMP ISR worker Ticker t; // only for performance test Timer timerPerfTest; int timeISRMax = 0; float timeISRAvg; int timeISRAvgSum = 0; int countISRCalls = 0; // this ISR must be called cyclic void irmpISR(void) { int t1 = timerPerfTest.read_us(); // read performance timer irmp_ISR(); // call irmp ISR int timeISR = timerPerfTest.read_us() - t1; // calc time spent in worker ISR if (timeISR > timeISRMax) // store maximum timeISRMax = timeISR; timeISRAvgSum += timeISR; // sum for avg countISRCalls++; } int main() { printf("IRMP on mbed\n"); led = LED_OFF; timerPerfTest.start(); // irmp_data holds result of received IR code IRMP_DATA irmp_data; irmp_init(); // initialize irmp t.attach_us(&irmpISR, 1E6 / F_INTERRUPTS); // call ISR 15.000 / s // infinite loop, interrupts will blink PORTD pins and handle UART communications. while (1) { flash = !flash; // test output. flashes at 15/2 kHz, you will not see it blinking // check for received IR commands if (irmp_get_data (&irmp_data)) { // ir signal decoded, do something here... // irmp_data.protocol is the protocol, see irmp.h // irmp_data.address is the address/manufacturer code of ir sender // irmp_data.command is the command code // irm_data.flags is press/release information // irmp_protocol_names[irmp_data.protocol] is the protocol name (if enabled, see irmpconfig.h) // printf("proto %d addr %d cmd %d\n", irmp_data.protocol, irmp_data.address, irmp_data.command ); // sample decoding, turn LED on / off if (irmp_data.protocol == IRMP_RC5_PROTOCOL && irmp_data.address == 5) // old RC5 VCR Remote. TV uses address 0 { if (irmp_data.flags == 0) // switch only on button press { switch (irmp_data.command) { case 0: // Key '0' led = LED_OFF; break; case 1: // Key '1' led = LED_ON; break; case 53: // Key 'play' printf("bring me a beer!\n"); break; case 54: // Key 'stop' timeISRAvg = (float)timeISRAvgSum / countISRCalls; timeISRAvgSum = 0; countISRCalls = 0; printf("ISR max / avg runtime [microseconds] : %d / %5.2f\n", timeISRMax, timeISRAvg); timeISRMax = 0; break; } } } // log to stdout printf("proto %d addr %d cmd %d flags %x name %s\n", irmp_data.protocol, irmp_data.address, irmp_data.command, irmp_data.flags, irmp_protocol_names[irmp_data.protocol] ); } } }