Restructure
[liquid-crystal-terminal.git] / terminal / terminal.ino
1 #include <LiquidCrystal.h>
2
3 #include "button.h"
4 #include "lcd.h"
5 #include "leds.h"
6 #include "term.h"
7
8 struct terminal term;
9
10 char message[] =
11 "Beste Mart, van harte gefeliciteerd! \x01\x00\r\n"
12 "Hier een herprogrammeerbare terminal. ";
13
14 void setup()
15 {
16 Serial.begin(115200);
17
18 lcd_setup();
19 leds_setup();
20 button_setup();
21
22 for (byte i = 0; i < ROWS * COLS; i++)
23 term.contents[i] = ' ';
24
25 for (byte i = 0; i < sizeof(message) - 1; i++)
26 write(&term, message[i]);
27
28 leds.a = LED_GRN | LED_BLINK;
29 leds.b = LED_RED | LED_BLINK;
30 leds.c = LED_GRN | LED_BLINK;
31 leds.d = LED_RED | LED_BLINK;
32 }
33
34 enum read_state {
35 S_DEFAULT,
36 S_LED,
37 S_BACKLIGHT
38 };
39 enum read_state read_state;
40
41 void handle_character(char c)
42 {
43 switch (read_state) {
44 case S_DEFAULT:
45 switch (c) {
46 case '\x11':
47 read_state = S_LED;
48 break;
49 case '\x12':
50 read_state = S_BACKLIGHT;
51 break;
52 default:
53 write(&term, c);
54 break;
55 }
56 break;
57
58 case S_LED:
59 switch (c & 0x30) {
60 case 0x00: leds.a = c & 0x0f; break;
61 case 0x10: leds.b = c & 0x0f; break;
62 case 0x20: leds.c = c & 0x0f; break;
63 case 0x30: leds.d = c & 0x0f; break;
64 }
65 read_state = S_DEFAULT;
66 break;
67
68 case S_BACKLIGHT:
69 bl_set((enum backlight_state) c);
70 read_state = S_DEFAULT;
71 break;
72 }
73 }
74
75 void loop()
76 {
77 leds_tasks();
78 button_tasks();
79 bl_tasks();
80
81 while (Serial.available())
82 handle_character(Serial.read());
83 }