Lib for sending IR signals from mbed.
Dependents: ir-puck ir-puck2 ir-puck
IRSender.cpp
- Committer:
- cristea
- Date:
- 2014-07-25
- Revision:
- 0:741de6c95ae9
- Child:
- 2:4576fcd93ffd
File content as of revision 0:741de6c95ae9:
#include "mbed.h" #include "IRSender.h" bool IRSender::irSeq(unsigned freq, unsigned len, const unsigned *data) { // TODO: implement a lock or semaphore here if (_inUse) { return false; } _inUse = true; int pos = 0; senderPin.write(0.0); senderPin.period_us(freq); int times[len]; for (int i=0; i<len; i++) { times[i] = 0; } int bit = 1; LOG("Start\n"); senderPin.write(0.5); timer.start(); int time = timer.read_us(); int old_time = time; int dt = 0; while (pos < len) { // TODO: Handle timer overflow // Consider using GPIOTE old_time = time; time = timer.read_us(); dt += time - old_time; while (dt > data[pos] && pos < len) { dt -= data[pos]; bit = !bit; senderPin.write(0.5 * bit); times[pos] = dt; pos++; } } timer.stop(); senderPin.write(0); LOG("Success, wrote %i/%i\n", pos, len); LOG("Miss timings: %i", times[0]); for (int i=1; i<len; i++) { APPEND(", %i", times[i]); } APPEND("]\n"); _inUse = false; return true; }