59 lines
1.2 KiB
C++
59 lines
1.2 KiB
C++
// main.cpp
|
|
|
|
#include "mbed.h"
|
|
|
|
#define MAXIMUM_BUFFER_SIZE 32
|
|
|
|
DigitalOut led1(LED1);
|
|
static BufferedSerial serial_port(USBTX, USBRX);
|
|
|
|
class Led {
|
|
private:
|
|
Ticker ticker;
|
|
bool ledState;
|
|
|
|
public:
|
|
Led() : ledState(false) {
|
|
led1 = ledState;
|
|
}
|
|
|
|
void setBlinkPeriod(float period) {
|
|
ticker.detach();
|
|
ticker.attach(callback(this, &Led::tickerHandler), period / 2.0f);
|
|
}
|
|
|
|
void tickerHandler() {
|
|
ledState = !ledState;
|
|
led1 = ledState;
|
|
}
|
|
};
|
|
|
|
int main()
|
|
{
|
|
serial_port.set_baud(9600);
|
|
serial_port.set_format(
|
|
/* bits */ 8,
|
|
/* parity */ BufferedSerial::None,
|
|
/* stop bit */ 1
|
|
);
|
|
|
|
char buf[MAXIMUM_BUFFER_SIZE] = {0};
|
|
Led ledController;
|
|
ledController.setBlinkPeriod(1.0f);
|
|
|
|
while (1) {
|
|
if (uint32_t num = serial_port.read(buf, sizeof(buf))) {
|
|
if (buf[0] >= '0' && buf[0] <= '9') {
|
|
float period = buf[0] - '0';
|
|
if (period > 0) {
|
|
ledController.setBlinkPeriod(period);
|
|
} else {
|
|
ledController.setBlinkPeriod(0.1f);
|
|
}
|
|
}
|
|
serial_port.write(buf, num);
|
|
}
|
|
ThisThread::sleep_for(100ms);
|
|
}
|
|
}
|