From 772376e2147234fff53e5c4e87cba891ee9c6873 Mon Sep 17 00:00:00 2001 From: Fabian Schlenz Date: Tue, 28 Jul 2020 06:54:14 +0200 Subject: [PATCH] Added code to allow DirectOutput to connect to the ESP8266. --- include/main.h | 1 + src/main.cpp | 67 ++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 50 insertions(+), 18 deletions(-) diff --git a/include/main.h b/include/main.h index 6cab8b4..11ed67b 100644 --- a/include/main.h +++ b/include/main.h @@ -20,6 +20,7 @@ void loop(); void set_blink(uint8_t mode); void blink(); +void fill(CRGB color); uint8_t receive_byte(); uint16_t receive_word(); diff --git a/src/main.cpp b/src/main.cpp index 91e5da5..c2e61d7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -14,41 +14,65 @@ uint16_t led_count; uint8_t blink_mode = 0; unsigned long blink_timer_ts; unsigned long blink_mode_timeout_timer_ts; +unsigned long last_data_at = 0; +bool connected = false; void setup() { + //Serial.setRxBufferSize(1); Serial.begin(9600); - Serial.setTimeout(1); + + + //send_ack(); //Serial.println("Online!"); led_count = 256; leds = new CRGB[256]; //FastLED.addLeds(leds, 256); - FastLED.addLeds(leds, 256); + FastLED.addLeds(leds, 256); FastLED[0].setLeds(leds, 256); pinMode(STATUS_LED_PIN, OUTPUT); set_blink(0); blink_timer_ts = blink_mode_timeout_timer_ts = millis(); + + /* fill(CRGB::DarkRed); + delay(250); + fill(CRGB::DarkGreen); + delay(250); + fill(CRGB::DarkBlue); + delay(250); */ + fill(CRGB::Black); + + // CLear the receive buffer + while (Serial.available()) { Serial.read(); } + } void loop() { - Serial.setTimeout(1); - byte buffer=0; - size_t received = Serial.readBytes(&buffer, 1); - if (received==1) { - switch(buffer) { - case 'L': cmd_length(); break; - case 'F': cmd_fill(); break; - case 'R': cmd_receive(); break; - case 'O': cmd_output(); break; - case 'C': cmd_clear(); break; - case 'V': cmd_version(); break; - case 'M': cmd_get_max(); break; + if (connected && last_data_at + 1000 < millis()) connected=false; + byte cmd; + if (Serial.available()) { + cmd = Serial.read(); + + switch(cmd) { + case 'L': cmd_length(); break; + case 'F': cmd_fill(); break; + case 'R': cmd_receive(); break; + case 'O': cmd_output(); break; + case 'C': cmd_clear(); break; + case 'V': cmd_version(); break; + case 'M': cmd_get_max(); break; case 'r': cmd_random_color(); break; - case 't': cmd_test(); break; - case '?': cmd_help(); break; - default: send_nack(); break; + case 't': cmd_test(); break; + case '?': cmd_help(); break; + case 0: if (!connected) { + connected = true; + send_ack(); + } + break; + default: send_nack(); break; } set_blink(1); + last_data_at = millis(); } blink(); } @@ -110,6 +134,13 @@ void blink() { } } +void fill(CRGB color) { + for (int i=0; i0 && first_led + cmd_leds + 1 <= led_count) { + if (first_led <= led_count && cmd_leds>0 && first_led + cmd_leds <= led_count) { uint16_t end_led = first_led + cmd_leds; for(uint16_t i=first_led; i