diff options
author | Florian Pritz <bluewind@xinu.at> | 2013-04-13 16:30:44 +0200 |
---|---|---|
committer | Florian Pritz <bluewind@xinu.at> | 2013-04-13 16:30:44 +0200 |
commit | 3592bd18dd45171387460a8c7ac94508559b9582 (patch) | |
tree | bdd1a103f102111550f722dd6f7a2e9719e65a99 | |
parent | bc0dd803e84498406bfbf7d2f8e852ea59222990 (diff) | |
download | mpd-box-3592bd18dd45171387460a8c7ac94508559b9582.tar.gz mpd-box-3592bd18dd45171387460a8c7ac94508559b9582.tar.xz |
Signed-off-by: Florian Pritz <bluewind@xinu.at>
-rw-r--r-- | src/main.cpp | 47 |
1 files changed, 35 insertions, 12 deletions
diff --git a/src/main.cpp b/src/main.cpp index f246e3a..8c67729 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,8 +5,18 @@ void setup(); void loop(); -#define BUFFER_SIZE 64 +// buffer size must be > LCD_CHARS +#define BUFFER_SIZE 80 +char display_data[BUFFER_SIZE]; char buf[BUFFER_SIZE]; +int buffered = 0; + +#define LCD_ROWS 2 +#define LCD_COLS 16 +#define LCD_CHARS (LCD_COLS * LCD_ROWS) +#if LCD_CHARS > BUFFER_SIZE +#error "BUFFER too small" +#endif // initialize the library with the numbers of the interface pins #ifdef ENERGIA @@ -28,7 +38,7 @@ Bounce bounce_buttons[NUMBUTTONS]; void setup() { byte i; - lcd.begin(16, 2); + lcd.begin(LCD_COLS, LCD_ROWS); // The usb chip hangs if it tries to send data and no-one listens // so we give the client time to start up first @@ -54,7 +64,8 @@ void setup() { } Serial.println("ready"); - lcd.print("Serial ready"); + memset(display_data, ' ', BUFFER_SIZE); + strcpy(display_data, "Waiting for data"); } bool button_just_pressed(int i) { @@ -75,16 +86,28 @@ void loop() { Serial.println("next"); } - // output what we got over serial - if (Serial.available() >= 32) { - lcd.setCursor(0, 0); - Serial.readBytes(buf, 32); - for (int i = 0; i < 32; i++) { - if (i == 16) { - lcd.setCursor(0, 1); - } - lcd.write(buf[i]); + // buffer serial input ourselves + if (Serial.available() >= 1) { + buffered += Serial.readBytes(buf + buffered, LCD_CHARS - buffered); + } + + if (buffered >= LCD_CHARS) { + strcpy(display_data, buf); + buffered = 0; + } + + // update display + lcd.setCursor(0, 0); + int line = -1; + for (int i = 0; i < LCD_CHARS; i++) { + if (display_data[i] == '\0') { + break; + } + if (i % LCD_COLS == 0) { + line++; + lcd.setCursor(0, line); } + lcd.write(display_data[i]); } } |