Johannes Stratmann
/
IRMP_Receiver
Sample code for IRMP library
main.cpp
- Committer:
- JojoS
- Date:
- 2016-01-09
- Revision:
- 0:4146c9dd6aa5
- Child:
- 1:57d9ea192a5e
File content as of revision 0:4146c9dd6aa5:
#include "mbed.h" #include "irmp.h" #define LED_ON 0 #define LED_OFF 1 DigitalOut led(P0_14, 1); DigitalOut flash(P0_12, 1); Ticker t; // only for performance test Timer timerPerfTest; int timeISRMax = 0; float timeISRAvg; int timeISRAvgSum = 0; int countISRCalls = 0; void irmpISR(void) { int t1 = timerPerfTest.read_us(); 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 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; 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] ); } } }