void popSerialData(); // read serial data
uint32_t atou(char* chars, uint32_t defvalue); // ansi to unsigned
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
popSerialData();
}
void onCommand(char* cmd) {
if (strcmp(cmd, "on") == 0) {
digitalWrite(LED_BUILTIN, 1);
}
else if (strcmp(cmd, "off") == 0) {
digitalWrite(LED_BUILTIN, 0);
} else {
Serial.println(atou(cmd, 4294967295), 16);
}
}
//------------ ANSI TO UNSIGNED INT ------------
uint32_t atou(char* chars, uint32_t onfail) {
uint32_t result = 0;
for (uint8_t i=0; chars[i] != 0; i++) {
if (chars[i] - '0' < 10) {
result = result * 10 + (chars[i] - '0');
} else {
return onfail;
}
}
return result;
}
//------------ SERIAL DATA READER ---------------
static uint32_t bx = 0;
const uint32_t bm = 30;
static char buff[bm] = {0};
void popSerialData() {
while ( Serial.available()) {
char c = Serial.read();
if (c == 13) continue;
else if (c == 10) {
buff[bx] = 0;
onCommand(buff);
bx = 0;
}
else {
buff[bx] = c;
bx += 1;
if (bx >= bm) {
bx = 0;
}
}
}
}