* Project Real-time Bus Arrival Alarm * Parts - WIZwiki-W7500 Platform - Seeed Grove OLED display - Seeed Grove 4-digit display - Seeed Grove Buzzer * Detailed description Real Time Bus Information will show you when your bus is due to arrive at your bus stop. * Target Bus Information System - GyeongGi Bus Information, Korea (www.gbis.go.kr)
Dependencies: WIZnetInterface mbed DigitDisplay HTTPClient NTPClient SeeedGrayOLED
main.cpp@0:879add9a219d, 2015-08-26 (annotated)
- Committer:
- hkjung
- Date:
- Wed Aug 26 05:12:36 2015 +0000
- Revision:
- 0:879add9a219d
Real-time Bus Arrival Alarm based on ARM mbed WIZwiki-W7500 Platform
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hkjung | 0:879add9a219d | 1 | #include "mbed.h" |
hkjung | 0:879add9a219d | 2 | #include "EthernetInterface.h" |
hkjung | 0:879add9a219d | 3 | |
hkjung | 0:879add9a219d | 4 | #include "HTTPClient.h" // HTTP Client library |
hkjung | 0:879add9a219d | 5 | #include "NTPClient.h" // NTP Client library (Network Time Protocol) |
hkjung | 0:879add9a219d | 6 | |
hkjung | 0:879add9a219d | 7 | #include "DigitDisplay.h" // Seeed Grove: 4-digit Display |
hkjung | 0:879add9a219d | 8 | #include "SeeedGrayOLED.h" // Seeed Grove: OLED Display 0.96" 96x96 |
hkjung | 0:879add9a219d | 9 | |
hkjung | 0:879add9a219d | 10 | Serial pc(USBTX, USBRX); |
hkjung | 0:879add9a219d | 11 | |
hkjung | 0:879add9a219d | 12 | PwmOut Buzzer(D6); |
hkjung | 0:879add9a219d | 13 | DigitDisplay display(D0, D1); // 4-Digit Display connected to UART Grove connector |
hkjung | 0:879add9a219d | 14 | SeeedGrayOLED SeeedGrayOled(D14, D15); |
hkjung | 0:879add9a219d | 15 | DigitalOut myled(LED1); |
hkjung | 0:879add9a219d | 16 | |
hkjung | 0:879add9a219d | 17 | Ticker tick; |
hkjung | 0:879add9a219d | 18 | |
hkjung | 0:879add9a219d | 19 | //////////////////////////////////////////////////////////////// |
hkjung | 0:879add9a219d | 20 | // Defines |
hkjung | 0:879add9a219d | 21 | //////////////////////////////////////////////////////////////// |
hkjung | 0:879add9a219d | 22 | |
hkjung | 0:879add9a219d | 23 | /* User adjustable defines */ |
hkjung | 0:879add9a219d | 24 | //////////////////////////////////////////////////////////////// |
hkjung | 0:879add9a219d | 25 | /* Debug Message Enable */ |
hkjung | 0:879add9a219d | 26 | #define _DEBUG_BUS_ARRIVAL_ALARM_ 0 |
hkjung | 0:879add9a219d | 27 | |
hkjung | 0:879add9a219d | 28 | /* Number of Displayed Bus Info */ |
hkjung | 0:879add9a219d | 29 | #define MAX_BUS_INFO 3 // The maximum bus information request can be up to Three (3) |
hkjung | 0:879add9a219d | 30 | |
hkjung | 0:879add9a219d | 31 | /* Display mode */ |
hkjung | 0:879add9a219d | 32 | #define DISPLAY_MODE_CHANGE_CNT_SEC 10 // The OLED display holding time(sec) for each bus information displayed |
hkjung | 0:879add9a219d | 33 | #define BUS_NUM_BLINK_ENABLE 1 // blink the 4-digit display when displayed bus numbers |
hkjung | 0:879add9a219d | 34 | |
hkjung | 0:879add9a219d | 35 | /* Alarm Sound Enabled and Time */ |
hkjung | 0:879add9a219d | 36 | #define ALARM_SOUND_ENABLE 1 |
hkjung | 0:879add9a219d | 37 | #define SOUND_START_HOUR 6 |
hkjung | 0:879add9a219d | 38 | #define SOUND_START_MIN 15 |
hkjung | 0:879add9a219d | 39 | #define SOUND_END_HOUR 07 |
hkjung | 0:879add9a219d | 40 | #define SOUND_END_MIN 00 |
hkjung | 0:879add9a219d | 41 | |
hkjung | 0:879add9a219d | 42 | /* HTTP client */ |
hkjung | 0:879add9a219d | 43 | //#define MAX_HTTPC_RETRY_CNT 2 // not used |
hkjung | 0:879add9a219d | 44 | //////////////////////////////////////////////////////////////// |
hkjung | 0:879add9a219d | 45 | |
hkjung | 0:879add9a219d | 46 | /* Buzzer */ |
hkjung | 0:879add9a219d | 47 | #define VOLUME 0.2 // 0.02 |
hkjung | 0:879add9a219d | 48 | #define BPM 100.0 |
hkjung | 0:879add9a219d | 49 | |
hkjung | 0:879add9a219d | 50 | /* Display mode define */ |
hkjung | 0:879add9a219d | 51 | #define DISPLAY_TIME_MODE 0 // do not change! |
hkjung | 0:879add9a219d | 52 | |
hkjung | 0:879add9a219d | 53 | /* Bus and Station (Busstop) info for GBIS openAPI */ |
hkjung | 0:879add9a219d | 54 | #define DEFAULT_STATION_NUM 38270 //(Gwangju -> Seoul) |
hkjung | 0:879add9a219d | 55 | #define DEFAULT_STATION_ID 234000302 |
hkjung | 0:879add9a219d | 56 | // for test |
hkjung | 0:879add9a219d | 57 | //#define DEFAULT_STATION_NUM 38269 //(Seoul -> Gwangju) |
hkjung | 0:879add9a219d | 58 | //#define DEFAULT_STATION_ID 234000294 |
hkjung | 0:879add9a219d | 59 | |
hkjung | 0:879add9a219d | 60 | typedef struct |
hkjung | 0:879add9a219d | 61 | { |
hkjung | 0:879add9a219d | 62 | uint8_t * busNum; // Bus number, This value should be input at initialize stage |
hkjung | 0:879add9a219d | 63 | uint16_t stationNum; // Station number, notused, This value should be input at initialize stage |
hkjung | 0:879add9a219d | 64 | uint32_t routeId; // Bus route id for openAPI querying (openapi.gbis.go.kr) // This value should be input at initialize stage |
hkjung | 0:879add9a219d | 65 | uint32_t stationId; // Bus station id for openAPI querying (openapi.gbis.go.kr) // This value should be input at initialize stage |
hkjung | 0:879add9a219d | 66 | uint8_t resultCode; // 0; success, 4; bus info none |
hkjung | 0:879add9a219d | 67 | uint8_t predictTime1; // 1st bus arrival predict time ('1' means the bus gone) |
hkjung | 0:879add9a219d | 68 | uint8_t predictTime2; // 2st bus arrival predict time ('1' means the none of next bus info) |
hkjung | 0:879add9a219d | 69 | uint8_t remainSeatCnt1; // 1st bus remain seat count |
hkjung | 0:879add9a219d | 70 | uint8_t remainSeatCnt2; // 2st bus remain seat count |
hkjung | 0:879add9a219d | 71 | }BUSINFO; |
hkjung | 0:879add9a219d | 72 | |
hkjung | 0:879add9a219d | 73 | //////////////////////////////////////////////////////////////// |
hkjung | 0:879add9a219d | 74 | // Function declaration |
hkjung | 0:879add9a219d | 75 | //////////////////////////////////////////////////////////////// |
hkjung | 0:879add9a219d | 76 | void BuzzerSound(void); // Buzzer |
hkjung | 0:879add9a219d | 77 | void Display_BusNumber(uint8_t * busnum); // 4-digit display |
hkjung | 0:879add9a219d | 78 | uint8_t get_businfo(BUSINFO * bus); // Get Bus information (HTTP client) |
hkjung | 0:879add9a219d | 79 | |
hkjung | 0:879add9a219d | 80 | // OLED display |
hkjung | 0:879add9a219d | 81 | void Draw_OLED_init(void); |
hkjung | 0:879add9a219d | 82 | void Draw_OLED_default(void); |
hkjung | 0:879add9a219d | 83 | void Draw_OLED_busInfo(uint8_t * busnum, uint8_t seats); |
hkjung | 0:879add9a219d | 84 | void Draw_OLED_arrivalMin(uint8_t min); |
hkjung | 0:879add9a219d | 85 | void Draw_OLED_nextMin(uint8_t nextmin); |
hkjung | 0:879add9a219d | 86 | void Draw_OLED_busList(void); |
hkjung | 0:879add9a219d | 87 | |
hkjung | 0:879add9a219d | 88 | // for ticker |
hkjung | 0:879add9a219d | 89 | void beat(); |
hkjung | 0:879add9a219d | 90 | |
hkjung | 0:879add9a219d | 91 | //////////////////////////////////////////////////////////////// |
hkjung | 0:879add9a219d | 92 | // Global variable declaration |
hkjung | 0:879add9a219d | 93 | //////////////////////////////////////////////////////////////// |
hkjung | 0:879add9a219d | 94 | BUSINFO businfo[MAX_BUS_INFO]; |
hkjung | 0:879add9a219d | 95 | uint8_t flag_display_mode[MAX_BUS_INFO+1] = {0, }; |
hkjung | 0:879add9a219d | 96 | uint8_t display_mode = 0; |
hkjung | 0:879add9a219d | 97 | uint8_t buzzer_sound_enable = 0; |
hkjung | 0:879add9a219d | 98 | |
hkjung | 0:879add9a219d | 99 | time_t beat_cTime; |
hkjung | 0:879add9a219d | 100 | struct tm *beat_localtime; |
hkjung | 0:879add9a219d | 101 | |
hkjung | 0:879add9a219d | 102 | uint8_t mac[6] = {0x00,0x08,0xDC,0x01,0x02,0x03}; // MAC address, It must be modified as users MAC address |
hkjung | 0:879add9a219d | 103 | |
hkjung | 0:879add9a219d | 104 | int main() |
hkjung | 0:879add9a219d | 105 | { |
hkjung | 0:879add9a219d | 106 | pc.baud(115200); |
hkjung | 0:879add9a219d | 107 | EthernetInterface ethernet; |
hkjung | 0:879add9a219d | 108 | |
hkjung | 0:879add9a219d | 109 | uint8_t i; |
hkjung | 0:879add9a219d | 110 | |
hkjung | 0:879add9a219d | 111 | //////////////////////////////////////////////////////////////// |
hkjung | 0:879add9a219d | 112 | // Realtime Bus Information: Initialization |
hkjung | 0:879add9a219d | 113 | //////////////////////////////////////////////////////////////// |
hkjung | 0:879add9a219d | 114 | |
hkjung | 0:879add9a219d | 115 | /* Bus number and route ID */ |
hkjung | 0:879add9a219d | 116 | uint8_t busnum_1117[4] = {1, 1, 1, 7}; |
hkjung | 0:879add9a219d | 117 | uint32_t busnum_1117_routeId = 234000069; |
hkjung | 0:879add9a219d | 118 | |
hkjung | 0:879add9a219d | 119 | uint8_t busnum_1113[4] = {1, 1, 1, 3}; |
hkjung | 0:879add9a219d | 120 | uint32_t busnum_1113_routeId = 234000042; |
hkjung | 0:879add9a219d | 121 | |
hkjung | 0:879add9a219d | 122 | uint8_t busnum_1005[4] = {1, 0, 0, 5}; |
hkjung | 0:879add9a219d | 123 | uint32_t busnum_1005_routeId = 234000065; |
hkjung | 0:879add9a219d | 124 | |
hkjung | 0:879add9a219d | 125 | // Bus info structure initialize |
hkjung | 0:879add9a219d | 126 | businfo[0].busNum = busnum_1117; |
hkjung | 0:879add9a219d | 127 | businfo[0].stationNum = DEFAULT_STATION_NUM; |
hkjung | 0:879add9a219d | 128 | businfo[0].routeId = busnum_1117_routeId; |
hkjung | 0:879add9a219d | 129 | businfo[0].stationId = DEFAULT_STATION_ID; |
hkjung | 0:879add9a219d | 130 | |
hkjung | 0:879add9a219d | 131 | businfo[1].busNum = busnum_1113; |
hkjung | 0:879add9a219d | 132 | businfo[1].stationNum = DEFAULT_STATION_NUM; |
hkjung | 0:879add9a219d | 133 | businfo[1].routeId = busnum_1113_routeId; |
hkjung | 0:879add9a219d | 134 | businfo[1].stationId = DEFAULT_STATION_ID; |
hkjung | 0:879add9a219d | 135 | |
hkjung | 0:879add9a219d | 136 | businfo[2].busNum = busnum_1005; |
hkjung | 0:879add9a219d | 137 | businfo[2].stationNum = DEFAULT_STATION_NUM; |
hkjung | 0:879add9a219d | 138 | businfo[2].routeId = busnum_1005_routeId; |
hkjung | 0:879add9a219d | 139 | businfo[2].stationId = DEFAULT_STATION_ID; |
hkjung | 0:879add9a219d | 140 | |
hkjung | 0:879add9a219d | 141 | // OLED display initialize |
hkjung | 0:879add9a219d | 142 | SeeedGrayOled.init(); // Initialize SEEED OLED display |
hkjung | 0:879add9a219d | 143 | SeeedGrayOled.clearDisplay(); // Clear Display |
hkjung | 0:879add9a219d | 144 | SeeedGrayOled.setNormalDisplay(); // Set Normal Display Mode |
hkjung | 0:879add9a219d | 145 | |
hkjung | 0:879add9a219d | 146 | // OLED display initial draw |
hkjung | 0:879add9a219d | 147 | Draw_OLED_default(); //Draw_OLED_init(); |
hkjung | 0:879add9a219d | 148 | |
hkjung | 0:879add9a219d | 149 | printf("\r\n==========================================\r\n"); |
hkjung | 0:879add9a219d | 150 | printf(" Real-time Bus Arrival Alarm\r\n"); |
hkjung | 0:879add9a219d | 151 | printf("==========================================\r\n"); |
hkjung | 0:879add9a219d | 152 | printf(" Buzzer Sound START Time: %d:%.2d\r\n", SOUND_START_HOUR, SOUND_START_MIN); |
hkjung | 0:879add9a219d | 153 | printf(" Buzzer Sound END Time : %d:%.2d\r\n", SOUND_END_HOUR, SOUND_END_MIN); |
hkjung | 0:879add9a219d | 154 | printf("==========================================\r\n"); |
hkjung | 0:879add9a219d | 155 | |
hkjung | 0:879add9a219d | 156 | // Ethernet initialize |
hkjung | 0:879add9a219d | 157 | int ret = ethernet.init(mac); |
hkjung | 0:879add9a219d | 158 | printf("\r\nWIZwiki-W7500 Networking Started\r\n"); |
hkjung | 0:879add9a219d | 159 | wait(1); // 1 second for stable state |
hkjung | 0:879add9a219d | 160 | |
hkjung | 0:879add9a219d | 161 | if (!ret) { |
hkjung | 0:879add9a219d | 162 | printf("Initialized, MAC: %s\r\n", ethernet.getMACAddress()); |
hkjung | 0:879add9a219d | 163 | ret = ethernet.connect(); |
hkjung | 0:879add9a219d | 164 | if (!ret) { |
hkjung | 0:879add9a219d | 165 | printf("IP: %s, MASK: %s, GW: %s\r\n", |
hkjung | 0:879add9a219d | 166 | ethernet.getIPAddress(), ethernet.getNetworkMask(), ethernet.getGateway()); |
hkjung | 0:879add9a219d | 167 | } else { |
hkjung | 0:879add9a219d | 168 | printf("Error ethernet.connect() - ret = %d\r\n", ret); |
hkjung | 0:879add9a219d | 169 | exit(0); |
hkjung | 0:879add9a219d | 170 | } |
hkjung | 0:879add9a219d | 171 | } else { |
hkjung | 0:879add9a219d | 172 | printf("Error ethernet.init() - ret = %d\r\n", ret); |
hkjung | 0:879add9a219d | 173 | exit(0); |
hkjung | 0:879add9a219d | 174 | } |
hkjung | 0:879add9a219d | 175 | |
hkjung | 0:879add9a219d | 176 | // NTP initialize |
hkjung | 0:879add9a219d | 177 | NTPClient ntp; |
hkjung | 0:879add9a219d | 178 | printf("\r\nTrying to update time...\r\n"); |
hkjung | 0:879add9a219d | 179 | if (ntp.setTime("211.233.40.78") == 0) |
hkjung | 0:879add9a219d | 180 | { |
hkjung | 0:879add9a219d | 181 | printf("Set time successfully\r\n"); |
hkjung | 0:879add9a219d | 182 | time_t ctTime; |
hkjung | 0:879add9a219d | 183 | ctTime = time(NULL); |
hkjung | 0:879add9a219d | 184 | ctTime += 32400; // GMT+9/Seoul |
hkjung | 0:879add9a219d | 185 | printf("Time is set to (GMT+9): %s\r\n", ctime(&ctTime)); |
hkjung | 0:879add9a219d | 186 | } |
hkjung | 0:879add9a219d | 187 | else |
hkjung | 0:879add9a219d | 188 | { |
hkjung | 0:879add9a219d | 189 | printf("Error\r\n"); |
hkjung | 0:879add9a219d | 190 | } |
hkjung | 0:879add9a219d | 191 | |
hkjung | 0:879add9a219d | 192 | // 4-Digit display initialize |
hkjung | 0:879add9a219d | 193 | display.write(0, 0); |
hkjung | 0:879add9a219d | 194 | display.write(1, 0); |
hkjung | 0:879add9a219d | 195 | display.write(2, 0); |
hkjung | 0:879add9a219d | 196 | display.write(3, 0); |
hkjung | 0:879add9a219d | 197 | display.setColon(true); |
hkjung | 0:879add9a219d | 198 | tick.attach(&beat, 0.5); |
hkjung | 0:879add9a219d | 199 | |
hkjung | 0:879add9a219d | 200 | // Initial flag setting for get the bus info |
hkjung | 0:879add9a219d | 201 | flag_display_mode[DISPLAY_TIME_MODE] = 1; |
hkjung | 0:879add9a219d | 202 | |
hkjung | 0:879add9a219d | 203 | printf(">> Initialize Done\r\n"); |
hkjung | 0:879add9a219d | 204 | |
hkjung | 0:879add9a219d | 205 | // Main routine |
hkjung | 0:879add9a219d | 206 | while(1) { |
hkjung | 0:879add9a219d | 207 | |
hkjung | 0:879add9a219d | 208 | if(display_mode == DISPLAY_TIME_MODE) // Display: Time mode |
hkjung | 0:879add9a219d | 209 | { |
hkjung | 0:879add9a219d | 210 | if(flag_display_mode[display_mode]) |
hkjung | 0:879add9a219d | 211 | { |
hkjung | 0:879add9a219d | 212 | Draw_OLED_default(); |
hkjung | 0:879add9a219d | 213 | flag_display_mode[display_mode] = 0; |
hkjung | 0:879add9a219d | 214 | |
hkjung | 0:879add9a219d | 215 | // Get the buses info: Bus arrival time preparation (beforehand) |
hkjung | 0:879add9a219d | 216 | for(i = 0; i < MAX_BUS_INFO; i++) |
hkjung | 0:879add9a219d | 217 | { |
hkjung | 0:879add9a219d | 218 | get_businfo(&businfo[i]); |
hkjung | 0:879add9a219d | 219 | |
hkjung | 0:879add9a219d | 220 | #if (_DEBUG_BUS_ARRIVAL_ALARM_) //Debug message |
hkjung | 0:879add9a219d | 221 | printf("Businfo #%d\r\n", i); |
hkjung | 0:879add9a219d | 222 | printf("bus.resultCode = %c\r\n", businfo[i].resultCode); |
hkjung | 0:879add9a219d | 223 | printf("1st Bus arrive after %d min\r\n", businfo[i].predictTime1); |
hkjung | 0:879add9a219d | 224 | printf("1st Bus remain seats %d\r\n", businfo[i].remainSeatCnt1); |
hkjung | 0:879add9a219d | 225 | printf("2nd Bus arrive after %d min\r\n", businfo[i].predictTime2); |
hkjung | 0:879add9a219d | 226 | printf("2nd Bus remain seats %d\r\n\r\n", businfo[i].remainSeatCnt2); |
hkjung | 0:879add9a219d | 227 | #endif |
hkjung | 0:879add9a219d | 228 | } |
hkjung | 0:879add9a219d | 229 | } |
hkjung | 0:879add9a219d | 230 | } |
hkjung | 0:879add9a219d | 231 | else // Display: Bus info mode |
hkjung | 0:879add9a219d | 232 | { |
hkjung | 0:879add9a219d | 233 | i = display_mode - 1; |
hkjung | 0:879add9a219d | 234 | if(flag_display_mode[display_mode]) |
hkjung | 0:879add9a219d | 235 | { |
hkjung | 0:879add9a219d | 236 | Draw_OLED_busInfo(businfo[i].busNum, businfo[i].remainSeatCnt1); |
hkjung | 0:879add9a219d | 237 | Draw_OLED_arrivalMin(businfo[i].predictTime1); |
hkjung | 0:879add9a219d | 238 | if(businfo[i].predictTime2 == 1) |
hkjung | 0:879add9a219d | 239 | { |
hkjung | 0:879add9a219d | 240 | Draw_OLED_nextMin(0); |
hkjung | 0:879add9a219d | 241 | } |
hkjung | 0:879add9a219d | 242 | else |
hkjung | 0:879add9a219d | 243 | { |
hkjung | 0:879add9a219d | 244 | Draw_OLED_nextMin(businfo[i].predictTime2); |
hkjung | 0:879add9a219d | 245 | } |
hkjung | 0:879add9a219d | 246 | |
hkjung | 0:879add9a219d | 247 | // Buzzer sound! |
hkjung | 0:879add9a219d | 248 | // Each case means the displayed time(Remaining time until the bus arrival, minute) to ringing the buzzer |
hkjung | 0:879add9a219d | 249 | switch(businfo[i].predictTime1) |
hkjung | 0:879add9a219d | 250 | { |
hkjung | 0:879add9a219d | 251 | case 5: |
hkjung | 0:879add9a219d | 252 | case 6: |
hkjung | 0:879add9a219d | 253 | case 7: |
hkjung | 0:879add9a219d | 254 | case 8: |
hkjung | 0:879add9a219d | 255 | case 9: |
hkjung | 0:879add9a219d | 256 | case 10: |
hkjung | 0:879add9a219d | 257 | BuzzerSound(); |
hkjung | 0:879add9a219d | 258 | break; |
hkjung | 0:879add9a219d | 259 | default: |
hkjung | 0:879add9a219d | 260 | break; |
hkjung | 0:879add9a219d | 261 | } |
hkjung | 0:879add9a219d | 262 | |
hkjung | 0:879add9a219d | 263 | flag_display_mode[display_mode] = 0; |
hkjung | 0:879add9a219d | 264 | } |
hkjung | 0:879add9a219d | 265 | } |
hkjung | 0:879add9a219d | 266 | } |
hkjung | 0:879add9a219d | 267 | } |
hkjung | 0:879add9a219d | 268 | |
hkjung | 0:879add9a219d | 269 | //////////////////////////////////////////////////////////////// |
hkjung | 0:879add9a219d | 270 | // Member function of Ticker interface (attaching to a ticker) |
hkjung | 0:879add9a219d | 271 | //////////////////////////////////////////////////////////////// |
hkjung | 0:879add9a219d | 272 | void beat() |
hkjung | 0:879add9a219d | 273 | { |
hkjung | 0:879add9a219d | 274 | static uint8_t colon = 0; |
hkjung | 0:879add9a219d | 275 | static uint8_t myled_blink = 1; |
hkjung | 0:879add9a219d | 276 | static uint8_t display_mode_change_cnt = 0; // initial count value; 5 sec reduced |
hkjung | 0:879add9a219d | 277 | |
hkjung | 0:879add9a219d | 278 | // Get current local time info |
hkjung | 0:879add9a219d | 279 | beat_cTime = time(NULL); |
hkjung | 0:879add9a219d | 280 | beat_cTime += 32400; // GMT+9/Seoul |
hkjung | 0:879add9a219d | 281 | beat_localtime = localtime(&beat_cTime); |
hkjung | 0:879add9a219d | 282 | |
hkjung | 0:879add9a219d | 283 | // Display Mode change handler (Time / Bus mode) |
hkjung | 0:879add9a219d | 284 | display_mode_change_cnt++; // ++ every 0.5sec |
hkjung | 0:879add9a219d | 285 | if((display_mode_change_cnt/2) >= DISPLAY_MODE_CHANGE_CNT_SEC) |
hkjung | 0:879add9a219d | 286 | { |
hkjung | 0:879add9a219d | 287 | display_mode++; |
hkjung | 0:879add9a219d | 288 | |
hkjung | 0:879add9a219d | 289 | if(display_mode > MAX_BUS_INFO) |
hkjung | 0:879add9a219d | 290 | { |
hkjung | 0:879add9a219d | 291 | display_mode = DISPLAY_TIME_MODE; // 0 |
hkjung | 0:879add9a219d | 292 | } |
hkjung | 0:879add9a219d | 293 | |
hkjung | 0:879add9a219d | 294 | // Skip: (resultCode == 4) means 'Bus arrival info does not appear' |
hkjung | 0:879add9a219d | 295 | while((display_mode != DISPLAY_TIME_MODE) && (businfo[display_mode-1].resultCode == 4)) |
hkjung | 0:879add9a219d | 296 | { |
hkjung | 0:879add9a219d | 297 | display_mode++; |
hkjung | 0:879add9a219d | 298 | |
hkjung | 0:879add9a219d | 299 | if(display_mode > MAX_BUS_INFO) |
hkjung | 0:879add9a219d | 300 | { |
hkjung | 0:879add9a219d | 301 | display_mode = DISPLAY_TIME_MODE; // 0 |
hkjung | 0:879add9a219d | 302 | } |
hkjung | 0:879add9a219d | 303 | } |
hkjung | 0:879add9a219d | 304 | |
hkjung | 0:879add9a219d | 305 | flag_display_mode[display_mode] = 1; |
hkjung | 0:879add9a219d | 306 | display_mode_change_cnt = 0; |
hkjung | 0:879add9a219d | 307 | } |
hkjung | 0:879add9a219d | 308 | |
hkjung | 0:879add9a219d | 309 | // 4-Digit Display handler |
hkjung | 0:879add9a219d | 310 | if(display_mode == DISPLAY_TIME_MODE) // Time mode |
hkjung | 0:879add9a219d | 311 | { |
hkjung | 0:879add9a219d | 312 | display.on(); |
hkjung | 0:879add9a219d | 313 | display.setColon(colon); |
hkjung | 0:879add9a219d | 314 | if (colon) { |
hkjung | 0:879add9a219d | 315 | display.write(0, beat_localtime->tm_hour / 10); |
hkjung | 0:879add9a219d | 316 | display.write(1, beat_localtime->tm_hour % 10); |
hkjung | 0:879add9a219d | 317 | display.write(2, beat_localtime->tm_min / 10); |
hkjung | 0:879add9a219d | 318 | display.write(3, beat_localtime->tm_min % 10); |
hkjung | 0:879add9a219d | 319 | } |
hkjung | 0:879add9a219d | 320 | //colon = 1 - colon; // moved below |
hkjung | 0:879add9a219d | 321 | } |
hkjung | 0:879add9a219d | 322 | else // Bus info mode |
hkjung | 0:879add9a219d | 323 | { |
hkjung | 0:879add9a219d | 324 | #if (BUS_NUM_BLINK_ENABLE) |
hkjung | 0:879add9a219d | 325 | if(colon) |
hkjung | 0:879add9a219d | 326 | { |
hkjung | 0:879add9a219d | 327 | Display_BusNumber(businfo[display_mode-1].busNum); |
hkjung | 0:879add9a219d | 328 | } |
hkjung | 0:879add9a219d | 329 | else |
hkjung | 0:879add9a219d | 330 | { |
hkjung | 0:879add9a219d | 331 | Display_BusNumber(NULL); |
hkjung | 0:879add9a219d | 332 | } |
hkjung | 0:879add9a219d | 333 | #else |
hkjung | 0:879add9a219d | 334 | Display_BusNumber(businfo[display_mode-1].busNum); |
hkjung | 0:879add9a219d | 335 | #endif |
hkjung | 0:879add9a219d | 336 | |
hkjung | 0:879add9a219d | 337 | } |
hkjung | 0:879add9a219d | 338 | |
hkjung | 0:879add9a219d | 339 | // Buzzer sound enable handler |
hkjung | 0:879add9a219d | 340 | buzzer_sound_enable = 0; |
hkjung | 0:879add9a219d | 341 | #if (ALARM_SOUND_ENABLE) |
hkjung | 0:879add9a219d | 342 | if(((beat_localtime->tm_hour == SOUND_START_HOUR) && (beat_localtime->tm_min >= SOUND_START_MIN)) || (beat_localtime->tm_hour > SOUND_START_HOUR)) |
hkjung | 0:879add9a219d | 343 | { |
hkjung | 0:879add9a219d | 344 | if((beat_localtime->tm_hour < SOUND_END_HOUR) || ((beat_localtime->tm_hour == SOUND_END_HOUR) && (beat_localtime->tm_min < SOUND_END_MIN))) |
hkjung | 0:879add9a219d | 345 | { |
hkjung | 0:879add9a219d | 346 | buzzer_sound_enable = 1; |
hkjung | 0:879add9a219d | 347 | } |
hkjung | 0:879add9a219d | 348 | } |
hkjung | 0:879add9a219d | 349 | #endif |
hkjung | 0:879add9a219d | 350 | |
hkjung | 0:879add9a219d | 351 | // LED blink; Device working indicator |
hkjung | 0:879add9a219d | 352 | myled_blink ^= 1; |
hkjung | 0:879add9a219d | 353 | myled = myled_blink ; |
hkjung | 0:879add9a219d | 354 | |
hkjung | 0:879add9a219d | 355 | // Invert every 0.5sec |
hkjung | 0:879add9a219d | 356 | colon = 1 - colon; |
hkjung | 0:879add9a219d | 357 | } |
hkjung | 0:879add9a219d | 358 | |
hkjung | 0:879add9a219d | 359 | //////////////////////////////////////////////////////////////// |
hkjung | 0:879add9a219d | 360 | // Get Bus Information (HTTP client) Functions |
hkjung | 0:879add9a219d | 361 | //////////////////////////////////////////////////////////////// |
hkjung | 0:879add9a219d | 362 | uint8_t get_businfo(BUSINFO * bus) |
hkjung | 0:879add9a219d | 363 | { |
hkjung | 0:879add9a219d | 364 | uint8_t ret = 0; |
hkjung | 0:879add9a219d | 365 | char str[2048] = {0, }; |
hkjung | 0:879add9a219d | 366 | char get_req[512] = {0, }; |
hkjung | 0:879add9a219d | 367 | char predictTime1[3], predictTime2[3]; |
hkjung | 0:879add9a219d | 368 | char remainSeatCnt1[3], remainSeatCnt2[3]; |
hkjung | 0:879add9a219d | 369 | char *CurrentAddr = 0; |
hkjung | 0:879add9a219d | 370 | |
hkjung | 0:879add9a219d | 371 | //uint8_t retry_cnt = 0; // Unimplemented, MAX_HTTPC_RETRY_CNT |
hkjung | 0:879add9a219d | 372 | |
hkjung | 0:879add9a219d | 373 | HTTPClient httpc; |
hkjung | 0:879add9a219d | 374 | |
hkjung | 0:879add9a219d | 375 | sprintf(get_req, "http://openapi.gbis.go.kr/ws/rest/busarrivalservice?serviceKey=test&routeId=%ld&stationId=%ld", bus->routeId, bus->stationId); |
hkjung | 0:879add9a219d | 376 | httpc.get(get_req, str, sizeof(str), 1000); |
hkjung | 0:879add9a219d | 377 | |
hkjung | 0:879add9a219d | 378 | CurrentAddr = strstr(str,"<resultCode>"); |
hkjung | 0:879add9a219d | 379 | bus->resultCode = *(CurrentAddr+12); |
hkjung | 0:879add9a219d | 380 | |
hkjung | 0:879add9a219d | 381 | if(bus->resultCode == '0') |
hkjung | 0:879add9a219d | 382 | { |
hkjung | 0:879add9a219d | 383 | CurrentAddr = strstr(str,"<predictTime1>"); |
hkjung | 0:879add9a219d | 384 | if((*(CurrentAddr+15)) == '<') |
hkjung | 0:879add9a219d | 385 | { |
hkjung | 0:879add9a219d | 386 | predictTime1[0] = *(CurrentAddr+14); |
hkjung | 0:879add9a219d | 387 | predictTime1[1] = 0; |
hkjung | 0:879add9a219d | 388 | predictTime1[2] = 0; |
hkjung | 0:879add9a219d | 389 | } |
hkjung | 0:879add9a219d | 390 | else |
hkjung | 0:879add9a219d | 391 | { |
hkjung | 0:879add9a219d | 392 | predictTime1[0] = *(CurrentAddr+14); |
hkjung | 0:879add9a219d | 393 | predictTime1[1] = *(CurrentAddr+15); |
hkjung | 0:879add9a219d | 394 | predictTime1[2] = 0; |
hkjung | 0:879add9a219d | 395 | } |
hkjung | 0:879add9a219d | 396 | bus->predictTime1 = (uint8_t)atoi(predictTime1); |
hkjung | 0:879add9a219d | 397 | |
hkjung | 0:879add9a219d | 398 | CurrentAddr = strstr(str,"<predictTime2>"); |
hkjung | 0:879add9a219d | 399 | if((*(CurrentAddr+15)) == '<') |
hkjung | 0:879add9a219d | 400 | { |
hkjung | 0:879add9a219d | 401 | predictTime2[0] = *(CurrentAddr+14); |
hkjung | 0:879add9a219d | 402 | predictTime2[1] = 0; |
hkjung | 0:879add9a219d | 403 | predictTime2[2] = 0; |
hkjung | 0:879add9a219d | 404 | } |
hkjung | 0:879add9a219d | 405 | else |
hkjung | 0:879add9a219d | 406 | { |
hkjung | 0:879add9a219d | 407 | predictTime2[0] = *(CurrentAddr+14); |
hkjung | 0:879add9a219d | 408 | predictTime2[1] = *(CurrentAddr+15); |
hkjung | 0:879add9a219d | 409 | predictTime2[2] = 0; |
hkjung | 0:879add9a219d | 410 | } |
hkjung | 0:879add9a219d | 411 | bus->predictTime2 = (uint8_t)atoi(predictTime2); |
hkjung | 0:879add9a219d | 412 | |
hkjung | 0:879add9a219d | 413 | CurrentAddr = strstr(str,"<remainSeatCnt1>"); |
hkjung | 0:879add9a219d | 414 | if((*(CurrentAddr+17)) == '<') |
hkjung | 0:879add9a219d | 415 | { |
hkjung | 0:879add9a219d | 416 | remainSeatCnt1[0] = *(CurrentAddr+16); |
hkjung | 0:879add9a219d | 417 | remainSeatCnt1[1] = 0; |
hkjung | 0:879add9a219d | 418 | remainSeatCnt1[2] = 0; |
hkjung | 0:879add9a219d | 419 | } |
hkjung | 0:879add9a219d | 420 | else |
hkjung | 0:879add9a219d | 421 | { |
hkjung | 0:879add9a219d | 422 | remainSeatCnt1[0] = *(CurrentAddr+16); |
hkjung | 0:879add9a219d | 423 | remainSeatCnt1[1] = *(CurrentAddr+17); |
hkjung | 0:879add9a219d | 424 | remainSeatCnt1[2] = 0; |
hkjung | 0:879add9a219d | 425 | } |
hkjung | 0:879add9a219d | 426 | bus->remainSeatCnt1 = (uint8_t)atoi(remainSeatCnt1); |
hkjung | 0:879add9a219d | 427 | |
hkjung | 0:879add9a219d | 428 | if(bus->predictTime2 > 1) // (predictTime2 == 1) => The next bus information is not confirmed. |
hkjung | 0:879add9a219d | 429 | { |
hkjung | 0:879add9a219d | 430 | CurrentAddr = strstr(str,"<remainSeatCnt2>"); |
hkjung | 0:879add9a219d | 431 | if((*(CurrentAddr+17)) == '<') |
hkjung | 0:879add9a219d | 432 | { |
hkjung | 0:879add9a219d | 433 | remainSeatCnt2[0] = *(CurrentAddr+16); |
hkjung | 0:879add9a219d | 434 | remainSeatCnt2[1] = 0; |
hkjung | 0:879add9a219d | 435 | remainSeatCnt2[2] = 0; |
hkjung | 0:879add9a219d | 436 | } |
hkjung | 0:879add9a219d | 437 | else |
hkjung | 0:879add9a219d | 438 | { |
hkjung | 0:879add9a219d | 439 | remainSeatCnt2[0] = *(CurrentAddr+16); |
hkjung | 0:879add9a219d | 440 | remainSeatCnt2[1] = *(CurrentAddr+17); |
hkjung | 0:879add9a219d | 441 | remainSeatCnt2[2] = 0; |
hkjung | 0:879add9a219d | 442 | } |
hkjung | 0:879add9a219d | 443 | bus->remainSeatCnt2 = (uint8_t)atoi(remainSeatCnt2); |
hkjung | 0:879add9a219d | 444 | } |
hkjung | 0:879add9a219d | 445 | |
hkjung | 0:879add9a219d | 446 | ret = 1; |
hkjung | 0:879add9a219d | 447 | } |
hkjung | 0:879add9a219d | 448 | |
hkjung | 0:879add9a219d | 449 | return ret; |
hkjung | 0:879add9a219d | 450 | } |
hkjung | 0:879add9a219d | 451 | |
hkjung | 0:879add9a219d | 452 | //////////////////////////////////////////////////////////////// |
hkjung | 0:879add9a219d | 453 | // Piezo Buzzer Functions |
hkjung | 0:879add9a219d | 454 | //////////////////////////////////////////////////////////////// |
hkjung | 0:879add9a219d | 455 | |
hkjung | 0:879add9a219d | 456 | void playNote(float frequency, float duration, float volume) |
hkjung | 0:879add9a219d | 457 | { |
hkjung | 0:879add9a219d | 458 | Buzzer.period(1.0/(double)frequency); |
hkjung | 0:879add9a219d | 459 | Buzzer = ((double)volume/2.0); |
hkjung | 0:879add9a219d | 460 | wait(duration); |
hkjung | 0:879add9a219d | 461 | Buzzer = 0.0; |
hkjung | 0:879add9a219d | 462 | } |
hkjung | 0:879add9a219d | 463 | |
hkjung | 0:879add9a219d | 464 | void BuzzerSound(void) |
hkjung | 0:879add9a219d | 465 | { |
hkjung | 0:879add9a219d | 466 | // Calculate duration of a quarter note from bpm |
hkjung | 0:879add9a219d | 467 | float beat_duration = 60.0 / BPM; |
hkjung | 0:879add9a219d | 468 | |
hkjung | 0:879add9a219d | 469 | if(buzzer_sound_enable) |
hkjung | 0:879add9a219d | 470 | { |
hkjung | 0:879add9a219d | 471 | //playNote(329.628, (0.75 * (double)beat_duration), VOLUME); |
hkjung | 0:879add9a219d | 472 | //playNote(261.626, (0.75 * (double)beat_duration), VOLUME); |
hkjung | 0:879add9a219d | 473 | playNote(529.628, (0.50 * (double)beat_duration), VOLUME); |
hkjung | 0:879add9a219d | 474 | playNote(301.626, (0.50 * (double)beat_duration), VOLUME); |
hkjung | 0:879add9a219d | 475 | } |
hkjung | 0:879add9a219d | 476 | } |
hkjung | 0:879add9a219d | 477 | |
hkjung | 0:879add9a219d | 478 | //////////////////////////////////////////////////////////////// |
hkjung | 0:879add9a219d | 479 | // 4-Digit Display Functions |
hkjung | 0:879add9a219d | 480 | //////////////////////////////////////////////////////////////// |
hkjung | 0:879add9a219d | 481 | |
hkjung | 0:879add9a219d | 482 | void Display_BusNumber(uint8_t * busnum) |
hkjung | 0:879add9a219d | 483 | { |
hkjung | 0:879add9a219d | 484 | display.setColon(false); |
hkjung | 0:879add9a219d | 485 | |
hkjung | 0:879add9a219d | 486 | if(busnum != NULL) |
hkjung | 0:879add9a219d | 487 | { |
hkjung | 0:879add9a219d | 488 | display.on(); |
hkjung | 0:879add9a219d | 489 | display.write(0, busnum[0]); |
hkjung | 0:879add9a219d | 490 | display.write(1, busnum[1]); |
hkjung | 0:879add9a219d | 491 | display.write(2, busnum[2]); |
hkjung | 0:879add9a219d | 492 | display.write(3, busnum[3]); |
hkjung | 0:879add9a219d | 493 | } |
hkjung | 0:879add9a219d | 494 | else |
hkjung | 0:879add9a219d | 495 | { |
hkjung | 0:879add9a219d | 496 | display.off(); |
hkjung | 0:879add9a219d | 497 | } |
hkjung | 0:879add9a219d | 498 | } |
hkjung | 0:879add9a219d | 499 | |
hkjung | 0:879add9a219d | 500 | //////////////////////////////////////////////////////////////// |
hkjung | 0:879add9a219d | 501 | // OLED Display Functions |
hkjung | 0:879add9a219d | 502 | //////////////////////////////////////////////////////////////// |
hkjung | 0:879add9a219d | 503 | |
hkjung | 0:879add9a219d | 504 | void Draw_OLED_init(void) |
hkjung | 0:879add9a219d | 505 | { |
hkjung | 0:879add9a219d | 506 | uint8_t empty_busnum[4] = {0, 0, 0, 0}; |
hkjung | 0:879add9a219d | 507 | |
hkjung | 0:879add9a219d | 508 | Draw_OLED_busInfo(empty_busnum, 0); |
hkjung | 0:879add9a219d | 509 | Draw_OLED_nextMin(0); |
hkjung | 0:879add9a219d | 510 | } |
hkjung | 0:879add9a219d | 511 | |
hkjung | 0:879add9a219d | 512 | void Draw_OLED_default(void) |
hkjung | 0:879add9a219d | 513 | { |
hkjung | 0:879add9a219d | 514 | SeeedGrayOled.setTextXY(0, 1); |
hkjung | 0:879add9a219d | 515 | SeeedGrayOled.putString("Bus NearBy "); |
hkjung | 0:879add9a219d | 516 | SeeedGrayOled.setTextXY(1, 1); |
hkjung | 0:879add9a219d | 517 | SeeedGrayOled.putString("========== "); |
hkjung | 0:879add9a219d | 518 | |
hkjung | 0:879add9a219d | 519 | Draw_OLED_arrivalMin('b'); |
hkjung | 0:879add9a219d | 520 | |
hkjung | 0:879add9a219d | 521 | SeeedGrayOled.setTextXY(11, 0); |
hkjung | 0:879add9a219d | 522 | SeeedGrayOled.putString("WIZnet::Eric"); |
hkjung | 0:879add9a219d | 523 | } |
hkjung | 0:879add9a219d | 524 | |
hkjung | 0:879add9a219d | 525 | void Draw_OLED_busList(void) |
hkjung | 0:879add9a219d | 526 | { |
hkjung | 0:879add9a219d | 527 | uint8_t i; |
hkjung | 0:879add9a219d | 528 | char buf[15] = {0, }; |
hkjung | 0:879add9a219d | 529 | |
hkjung | 0:879add9a219d | 530 | SeeedGrayOled.setTextXY(0, 1); |
hkjung | 0:879add9a219d | 531 | SeeedGrayOled.putString(" "); |
hkjung | 0:879add9a219d | 532 | SeeedGrayOled.setTextXY(1, 1); |
hkjung | 0:879add9a219d | 533 | SeeedGrayOled.putString("Bus List:"); |
hkjung | 0:879add9a219d | 534 | |
hkjung | 0:879add9a219d | 535 | Draw_OLED_arrivalMin('t'); |
hkjung | 0:879add9a219d | 536 | |
hkjung | 0:879add9a219d | 537 | for(i = 0; i < MAX_BUS_INFO; i++) |
hkjung | 0:879add9a219d | 538 | { |
hkjung | 0:879add9a219d | 539 | SeeedGrayOled.setTextXY(3+i, 2); |
hkjung | 0:879add9a219d | 540 | sprintf(buf, "- %.1d%.1d%.1d%.1d", businfo[i].busNum[0], businfo[i].busNum[1], businfo[i].busNum[2], businfo[i].busNum[3]); |
hkjung | 0:879add9a219d | 541 | SeeedGrayOled.putString(buf); |
hkjung | 0:879add9a219d | 542 | } |
hkjung | 0:879add9a219d | 543 | |
hkjung | 0:879add9a219d | 544 | SeeedGrayOled.setTextXY(11, 1); |
hkjung | 0:879add9a219d | 545 | SeeedGrayOled.putString(" "); |
hkjung | 0:879add9a219d | 546 | } |
hkjung | 0:879add9a219d | 547 | |
hkjung | 0:879add9a219d | 548 | void Draw_OLED_busInfo(uint8_t * busnum, uint8_t seats) |
hkjung | 0:879add9a219d | 549 | { |
hkjung | 0:879add9a219d | 550 | char buf[15] = {0, }; |
hkjung | 0:879add9a219d | 551 | sprintf(buf, "Bus %.1d%.1d%.1d%.1d ", busnum[0], busnum[1], busnum[2], busnum[3]); |
hkjung | 0:879add9a219d | 552 | SeeedGrayOled.setTextXY(0, 1); |
hkjung | 0:879add9a219d | 553 | SeeedGrayOled.putString(buf); |
hkjung | 0:879add9a219d | 554 | sprintf(buf, "Seats %.2d ", seats); |
hkjung | 0:879add9a219d | 555 | SeeedGrayOled.setTextXY(1, 1); |
hkjung | 0:879add9a219d | 556 | SeeedGrayOled.putString(buf); |
hkjung | 0:879add9a219d | 557 | } |
hkjung | 0:879add9a219d | 558 | |
hkjung | 0:879add9a219d | 559 | void Draw_OLED_nextMin(uint8_t nextmin) |
hkjung | 0:879add9a219d | 560 | { |
hkjung | 0:879add9a219d | 561 | char buf[15] = {0, }; |
hkjung | 0:879add9a219d | 562 | if(nextmin == 0) |
hkjung | 0:879add9a219d | 563 | { |
hkjung | 0:879add9a219d | 564 | sprintf(buf, "Next: -- min"); |
hkjung | 0:879add9a219d | 565 | } |
hkjung | 0:879add9a219d | 566 | else |
hkjung | 0:879add9a219d | 567 | { |
hkjung | 0:879add9a219d | 568 | sprintf(buf, "Next: %.2d min", nextmin); |
hkjung | 0:879add9a219d | 569 | } |
hkjung | 0:879add9a219d | 570 | |
hkjung | 0:879add9a219d | 571 | SeeedGrayOled.setTextXY(11, 0); |
hkjung | 0:879add9a219d | 572 | SeeedGrayOled.putString(buf); |
hkjung | 0:879add9a219d | 573 | } |
hkjung | 0:879add9a219d | 574 | |
hkjung | 0:879add9a219d | 575 | void Draw_OLED_arrivalMin(uint8_t min) |
hkjung | 0:879add9a219d | 576 | { |
hkjung | 0:879add9a219d | 577 | switch(min) |
hkjung | 0:879add9a219d | 578 | { |
hkjung | 0:879add9a219d | 579 | case 't': |
hkjung | 0:879add9a219d | 580 | SeeedGrayOled.setTextXY(3, 0); |
hkjung | 0:879add9a219d | 581 | SeeedGrayOled.putString(" "); |
hkjung | 0:879add9a219d | 582 | SeeedGrayOled.setTextXY(4, 0); |
hkjung | 0:879add9a219d | 583 | SeeedGrayOled.putString(" "); |
hkjung | 0:879add9a219d | 584 | SeeedGrayOled.setTextXY(5, 0); |
hkjung | 0:879add9a219d | 585 | SeeedGrayOled.putString(" "); |
hkjung | 0:879add9a219d | 586 | SeeedGrayOled.setTextXY(6, 0); |
hkjung | 0:879add9a219d | 587 | SeeedGrayOled.putString(" "); |
hkjung | 0:879add9a219d | 588 | SeeedGrayOled.setTextXY(7, 0); |
hkjung | 0:879add9a219d | 589 | SeeedGrayOled.putString(" "); |
hkjung | 0:879add9a219d | 590 | SeeedGrayOled.setTextXY(8, 0); |
hkjung | 0:879add9a219d | 591 | SeeedGrayOled.putString(" "); |
hkjung | 0:879add9a219d | 592 | SeeedGrayOled.setTextXY(9, 0); |
hkjung | 0:879add9a219d | 593 | SeeedGrayOled.putString(" "); |
hkjung | 0:879add9a219d | 594 | break; |
hkjung | 0:879add9a219d | 595 | case 'b': |
hkjung | 0:879add9a219d | 596 | SeeedGrayOled.setTextXY(3, 0); |
hkjung | 0:879add9a219d | 597 | SeeedGrayOled.putString(" ~~~~~ "); |
hkjung | 0:879add9a219d | 598 | SeeedGrayOled.setTextXY(4, 0); |
hkjung | 0:879add9a219d | 599 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 600 | SeeedGrayOled.setTextXY(5, 0); |
hkjung | 0:879add9a219d | 601 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 602 | SeeedGrayOled.setTextXY(6, 0); |
hkjung | 0:879add9a219d | 603 | SeeedGrayOled.putString(" ~~~~~~~ "); |
hkjung | 0:879add9a219d | 604 | SeeedGrayOled.setTextXY(7, 0); |
hkjung | 0:879add9a219d | 605 | SeeedGrayOled.putString(" ~ ~~~ ~ "); |
hkjung | 0:879add9a219d | 606 | SeeedGrayOled.setTextXY(8, 0); |
hkjung | 0:879add9a219d | 607 | SeeedGrayOled.putString(" ~~~~~~~ "); |
hkjung | 0:879add9a219d | 608 | SeeedGrayOled.setTextXY(9, 0); |
hkjung | 0:879add9a219d | 609 | SeeedGrayOled.putString(" ~~ ~~ "); |
hkjung | 0:879add9a219d | 610 | break; |
hkjung | 0:879add9a219d | 611 | case 0: |
hkjung | 0:879add9a219d | 612 | SeeedGrayOled.setTextXY(3, 0); |
hkjung | 0:879add9a219d | 613 | SeeedGrayOled.putString(" ~~~~ ~~~~ "); |
hkjung | 0:879add9a219d | 614 | SeeedGrayOled.setTextXY(4, 0); |
hkjung | 0:879add9a219d | 615 | SeeedGrayOled.putString(" ~ ~ ~ ~ "); |
hkjung | 0:879add9a219d | 616 | SeeedGrayOled.setTextXY(5, 0); |
hkjung | 0:879add9a219d | 617 | SeeedGrayOled.putString(" ~ ~ ~ ~ "); |
hkjung | 0:879add9a219d | 618 | SeeedGrayOled.setTextXY(6, 0); |
hkjung | 0:879add9a219d | 619 | SeeedGrayOled.putString(" ~ ~ ~ ~ "); |
hkjung | 0:879add9a219d | 620 | SeeedGrayOled.setTextXY(7, 0); |
hkjung | 0:879add9a219d | 621 | SeeedGrayOled.putString(" ~ ~ ~ ~ "); |
hkjung | 0:879add9a219d | 622 | SeeedGrayOled.setTextXY(8, 0); |
hkjung | 0:879add9a219d | 623 | SeeedGrayOled.putString(" ~ ~ ~ ~ "); |
hkjung | 0:879add9a219d | 624 | SeeedGrayOled.setTextXY(9, 0); |
hkjung | 0:879add9a219d | 625 | SeeedGrayOled.putString(" ~~~~ ~~~~ "); |
hkjung | 0:879add9a219d | 626 | break; |
hkjung | 0:879add9a219d | 627 | case 1: |
hkjung | 0:879add9a219d | 628 | SeeedGrayOled.setTextXY(3, 0); |
hkjung | 0:879add9a219d | 629 | SeeedGrayOled.putString(" "); |
hkjung | 0:879add9a219d | 630 | SeeedGrayOled.setTextXY(4, 0); |
hkjung | 0:879add9a219d | 631 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 632 | SeeedGrayOled.setTextXY(5, 0); |
hkjung | 0:879add9a219d | 633 | SeeedGrayOled.putString(" ~~ "); |
hkjung | 0:879add9a219d | 634 | SeeedGrayOled.setTextXY(6, 0); |
hkjung | 0:879add9a219d | 635 | SeeedGrayOled.putString(" ~~~~~~~ "); |
hkjung | 0:879add9a219d | 636 | SeeedGrayOled.setTextXY(7, 0); |
hkjung | 0:879add9a219d | 637 | SeeedGrayOled.putString(" ~~ "); |
hkjung | 0:879add9a219d | 638 | SeeedGrayOled.setTextXY(8, 0); |
hkjung | 0:879add9a219d | 639 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 640 | SeeedGrayOled.setTextXY(9, 0); |
hkjung | 0:879add9a219d | 641 | SeeedGrayOled.putString(" Gone! "); |
hkjung | 0:879add9a219d | 642 | break; |
hkjung | 0:879add9a219d | 643 | case 2: |
hkjung | 0:879add9a219d | 644 | SeeedGrayOled.setTextXY(3, 0); |
hkjung | 0:879add9a219d | 645 | SeeedGrayOled.putString(" ~~~~ "); |
hkjung | 0:879add9a219d | 646 | SeeedGrayOled.setTextXY(4, 0); |
hkjung | 0:879add9a219d | 647 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 648 | SeeedGrayOled.setTextXY(5, 0); |
hkjung | 0:879add9a219d | 649 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 650 | SeeedGrayOled.setTextXY(6, 0); |
hkjung | 0:879add9a219d | 651 | SeeedGrayOled.putString(" ~~~~ "); |
hkjung | 0:879add9a219d | 652 | SeeedGrayOled.setTextXY(7, 0); |
hkjung | 0:879add9a219d | 653 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 654 | SeeedGrayOled.setTextXY(8, 0); |
hkjung | 0:879add9a219d | 655 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 656 | SeeedGrayOled.setTextXY(9, 0); |
hkjung | 0:879add9a219d | 657 | SeeedGrayOled.putString(" ~~~~ "); |
hkjung | 0:879add9a219d | 658 | break; |
hkjung | 0:879add9a219d | 659 | case 3: |
hkjung | 0:879add9a219d | 660 | SeeedGrayOled.setTextXY(3, 0); |
hkjung | 0:879add9a219d | 661 | SeeedGrayOled.putString(" ~~~~ "); |
hkjung | 0:879add9a219d | 662 | SeeedGrayOled.setTextXY(4, 0); |
hkjung | 0:879add9a219d | 663 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 664 | SeeedGrayOled.setTextXY(5, 0); |
hkjung | 0:879add9a219d | 665 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 666 | SeeedGrayOled.setTextXY(6, 0); |
hkjung | 0:879add9a219d | 667 | SeeedGrayOled.putString(" ~~~~ "); |
hkjung | 0:879add9a219d | 668 | SeeedGrayOled.setTextXY(7, 0); |
hkjung | 0:879add9a219d | 669 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 670 | SeeedGrayOled.setTextXY(8, 0); |
hkjung | 0:879add9a219d | 671 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 672 | SeeedGrayOled.setTextXY(9, 0); |
hkjung | 0:879add9a219d | 673 | SeeedGrayOled.putString(" ~~~~ "); |
hkjung | 0:879add9a219d | 674 | break; |
hkjung | 0:879add9a219d | 675 | case 4: |
hkjung | 0:879add9a219d | 676 | SeeedGrayOled.setTextXY(3, 0); |
hkjung | 0:879add9a219d | 677 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 678 | SeeedGrayOled.setTextXY(4, 0); |
hkjung | 0:879add9a219d | 679 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 680 | SeeedGrayOled.setTextXY(5, 0); |
hkjung | 0:879add9a219d | 681 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 682 | SeeedGrayOled.setTextXY(6, 0); |
hkjung | 0:879add9a219d | 683 | SeeedGrayOled.putString(" ~~~~ "); |
hkjung | 0:879add9a219d | 684 | SeeedGrayOled.setTextXY(7, 0); |
hkjung | 0:879add9a219d | 685 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 686 | SeeedGrayOled.setTextXY(8, 0); |
hkjung | 0:879add9a219d | 687 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 688 | SeeedGrayOled.setTextXY(9, 0); |
hkjung | 0:879add9a219d | 689 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 690 | break; |
hkjung | 0:879add9a219d | 691 | case 5: |
hkjung | 0:879add9a219d | 692 | SeeedGrayOled.setTextXY(3, 0); |
hkjung | 0:879add9a219d | 693 | SeeedGrayOled.putString(" ~~~~ "); |
hkjung | 0:879add9a219d | 694 | SeeedGrayOled.setTextXY(4, 0); |
hkjung | 0:879add9a219d | 695 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 696 | SeeedGrayOled.setTextXY(5, 0); |
hkjung | 0:879add9a219d | 697 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 698 | SeeedGrayOled.setTextXY(6, 0); |
hkjung | 0:879add9a219d | 699 | SeeedGrayOled.putString(" ~~~~ "); |
hkjung | 0:879add9a219d | 700 | SeeedGrayOled.setTextXY(7, 0); |
hkjung | 0:879add9a219d | 701 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 702 | SeeedGrayOled.setTextXY(8, 0); |
hkjung | 0:879add9a219d | 703 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 704 | SeeedGrayOled.setTextXY(9, 0); |
hkjung | 0:879add9a219d | 705 | SeeedGrayOled.putString(" ~~~~ "); |
hkjung | 0:879add9a219d | 706 | break; |
hkjung | 0:879add9a219d | 707 | case 6: |
hkjung | 0:879add9a219d | 708 | SeeedGrayOled.setTextXY(3, 0); |
hkjung | 0:879add9a219d | 709 | SeeedGrayOled.putString(" ~~~~ "); |
hkjung | 0:879add9a219d | 710 | SeeedGrayOled.setTextXY(4, 0); |
hkjung | 0:879add9a219d | 711 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 712 | SeeedGrayOled.setTextXY(5, 0); |
hkjung | 0:879add9a219d | 713 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 714 | SeeedGrayOled.setTextXY(6, 0); |
hkjung | 0:879add9a219d | 715 | SeeedGrayOled.putString(" ~~~~ "); |
hkjung | 0:879add9a219d | 716 | SeeedGrayOled.setTextXY(7, 0); |
hkjung | 0:879add9a219d | 717 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 718 | SeeedGrayOled.setTextXY(8, 0); |
hkjung | 0:879add9a219d | 719 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 720 | SeeedGrayOled.setTextXY(9, 0); |
hkjung | 0:879add9a219d | 721 | SeeedGrayOled.putString(" ~~~~ "); |
hkjung | 0:879add9a219d | 722 | break; |
hkjung | 0:879add9a219d | 723 | case 7: |
hkjung | 0:879add9a219d | 724 | SeeedGrayOled.setTextXY(3, 0); |
hkjung | 0:879add9a219d | 725 | SeeedGrayOled.putString(" ~~~~ "); |
hkjung | 0:879add9a219d | 726 | SeeedGrayOled.setTextXY(4, 0); |
hkjung | 0:879add9a219d | 727 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 728 | SeeedGrayOled.setTextXY(5, 0); |
hkjung | 0:879add9a219d | 729 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 730 | SeeedGrayOled.setTextXY(6, 0); |
hkjung | 0:879add9a219d | 731 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 732 | SeeedGrayOled.setTextXY(7, 0); |
hkjung | 0:879add9a219d | 733 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 734 | SeeedGrayOled.setTextXY(8, 0); |
hkjung | 0:879add9a219d | 735 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 736 | SeeedGrayOled.setTextXY(9, 0); |
hkjung | 0:879add9a219d | 737 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 738 | break; |
hkjung | 0:879add9a219d | 739 | case 8: |
hkjung | 0:879add9a219d | 740 | SeeedGrayOled.setTextXY(3, 0); |
hkjung | 0:879add9a219d | 741 | SeeedGrayOled.putString(" ~~~~ "); |
hkjung | 0:879add9a219d | 742 | SeeedGrayOled.setTextXY(4, 0); |
hkjung | 0:879add9a219d | 743 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 744 | SeeedGrayOled.setTextXY(5, 0); |
hkjung | 0:879add9a219d | 745 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 746 | SeeedGrayOled.setTextXY(6, 0); |
hkjung | 0:879add9a219d | 747 | SeeedGrayOled.putString(" ~~~~ "); |
hkjung | 0:879add9a219d | 748 | SeeedGrayOled.setTextXY(7, 0); |
hkjung | 0:879add9a219d | 749 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 750 | SeeedGrayOled.setTextXY(8, 0); |
hkjung | 0:879add9a219d | 751 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 752 | SeeedGrayOled.setTextXY(9, 0); |
hkjung | 0:879add9a219d | 753 | SeeedGrayOled.putString(" ~~~~ "); |
hkjung | 0:879add9a219d | 754 | break; |
hkjung | 0:879add9a219d | 755 | case 9: |
hkjung | 0:879add9a219d | 756 | SeeedGrayOled.setTextXY(3, 0); |
hkjung | 0:879add9a219d | 757 | SeeedGrayOled.putString(" ~~~~ "); |
hkjung | 0:879add9a219d | 758 | SeeedGrayOled.setTextXY(4, 0); |
hkjung | 0:879add9a219d | 759 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 760 | SeeedGrayOled.setTextXY(5, 0); |
hkjung | 0:879add9a219d | 761 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 762 | SeeedGrayOled.setTextXY(6, 0); |
hkjung | 0:879add9a219d | 763 | SeeedGrayOled.putString(" ~~~~ "); |
hkjung | 0:879add9a219d | 764 | SeeedGrayOled.setTextXY(7, 0); |
hkjung | 0:879add9a219d | 765 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 766 | SeeedGrayOled.setTextXY(8, 0); |
hkjung | 0:879add9a219d | 767 | SeeedGrayOled.putString(" ~ "); |
hkjung | 0:879add9a219d | 768 | SeeedGrayOled.setTextXY(9, 0); |
hkjung | 0:879add9a219d | 769 | SeeedGrayOled.putString(" ~~~~ "); |
hkjung | 0:879add9a219d | 770 | break; |
hkjung | 0:879add9a219d | 771 | case 10: |
hkjung | 0:879add9a219d | 772 | case 11: // 10 |
hkjung | 0:879add9a219d | 773 | SeeedGrayOled.setTextXY(3, 0); |
hkjung | 0:879add9a219d | 774 | SeeedGrayOled.putString(" ~~ ~~~~ "); |
hkjung | 0:879add9a219d | 775 | SeeedGrayOled.setTextXY(4, 0); |
hkjung | 0:879add9a219d | 776 | SeeedGrayOled.putString(" ~ ~ ~ "); |
hkjung | 0:879add9a219d | 777 | SeeedGrayOled.setTextXY(5, 0); |
hkjung | 0:879add9a219d | 778 | SeeedGrayOled.putString(" ~ ~ ~ "); |
hkjung | 0:879add9a219d | 779 | SeeedGrayOled.setTextXY(6, 0); |
hkjung | 0:879add9a219d | 780 | SeeedGrayOled.putString(" ~ ~ ~ "); |
hkjung | 0:879add9a219d | 781 | SeeedGrayOled.setTextXY(7, 0); |
hkjung | 0:879add9a219d | 782 | SeeedGrayOled.putString(" ~ ~ ~ "); |
hkjung | 0:879add9a219d | 783 | SeeedGrayOled.setTextXY(8, 0); |
hkjung | 0:879add9a219d | 784 | SeeedGrayOled.putString(" ~ ~ ~ "); |
hkjung | 0:879add9a219d | 785 | SeeedGrayOled.setTextXY(9, 0); |
hkjung | 0:879add9a219d | 786 | SeeedGrayOled.putString(" ~ ~~~~ "); |
hkjung | 0:879add9a219d | 787 | break; |
hkjung | 0:879add9a219d | 788 | case 12: |
hkjung | 0:879add9a219d | 789 | case 13: |
hkjung | 0:879add9a219d | 790 | case 14: // 12 |
hkjung | 0:879add9a219d | 791 | SeeedGrayOled.setTextXY(3, 0); |
hkjung | 0:879add9a219d | 792 | SeeedGrayOled.putString(" ~~ ~~~~ "); |
hkjung | 0:879add9a219d | 793 | SeeedGrayOled.setTextXY(4, 0); |
hkjung | 0:879add9a219d | 794 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 795 | SeeedGrayOled.setTextXY(5, 0); |
hkjung | 0:879add9a219d | 796 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 797 | SeeedGrayOled.setTextXY(6, 0); |
hkjung | 0:879add9a219d | 798 | SeeedGrayOled.putString(" ~ ~~~~ "); |
hkjung | 0:879add9a219d | 799 | SeeedGrayOled.setTextXY(7, 0); |
hkjung | 0:879add9a219d | 800 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 801 | SeeedGrayOled.setTextXY(8, 0); |
hkjung | 0:879add9a219d | 802 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 803 | SeeedGrayOled.setTextXY(9, 0); |
hkjung | 0:879add9a219d | 804 | SeeedGrayOled.putString(" ~ ~~~~ "); |
hkjung | 0:879add9a219d | 805 | break; |
hkjung | 0:879add9a219d | 806 | case 15: |
hkjung | 0:879add9a219d | 807 | case 16: // 15 |
hkjung | 0:879add9a219d | 808 | SeeedGrayOled.setTextXY(3, 0); |
hkjung | 0:879add9a219d | 809 | SeeedGrayOled.putString(" ~~ ~~~~ "); |
hkjung | 0:879add9a219d | 810 | SeeedGrayOled.setTextXY(4, 0); |
hkjung | 0:879add9a219d | 811 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 812 | SeeedGrayOled.setTextXY(5, 0); |
hkjung | 0:879add9a219d | 813 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 814 | SeeedGrayOled.setTextXY(6, 0); |
hkjung | 0:879add9a219d | 815 | SeeedGrayOled.putString(" ~ ~~~~ "); |
hkjung | 0:879add9a219d | 816 | SeeedGrayOled.setTextXY(7, 0); |
hkjung | 0:879add9a219d | 817 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 818 | SeeedGrayOled.setTextXY(8, 0); |
hkjung | 0:879add9a219d | 819 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 820 | SeeedGrayOled.setTextXY(9, 0); |
hkjung | 0:879add9a219d | 821 | SeeedGrayOled.putString(" ~ ~~~~ "); |
hkjung | 0:879add9a219d | 822 | break; |
hkjung | 0:879add9a219d | 823 | case 17: |
hkjung | 0:879add9a219d | 824 | case 18: // 17 |
hkjung | 0:879add9a219d | 825 | case 19: // 17 |
hkjung | 0:879add9a219d | 826 | SeeedGrayOled.setTextXY(3, 0); |
hkjung | 0:879add9a219d | 827 | SeeedGrayOled.putString(" ~~ ~~~~ "); |
hkjung | 0:879add9a219d | 828 | SeeedGrayOled.setTextXY(4, 0); |
hkjung | 0:879add9a219d | 829 | SeeedGrayOled.putString(" ~ ~ ~ "); |
hkjung | 0:879add9a219d | 830 | SeeedGrayOled.setTextXY(5, 0); |
hkjung | 0:879add9a219d | 831 | SeeedGrayOled.putString(" ~ ~ ~ "); |
hkjung | 0:879add9a219d | 832 | SeeedGrayOled.setTextXY(6, 0); |
hkjung | 0:879add9a219d | 833 | SeeedGrayOled.putString(" ~ ~ ~ "); |
hkjung | 0:879add9a219d | 834 | SeeedGrayOled.setTextXY(7, 0); |
hkjung | 0:879add9a219d | 835 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 836 | SeeedGrayOled.setTextXY(8, 0); |
hkjung | 0:879add9a219d | 837 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 838 | SeeedGrayOled.setTextXY(9, 0); |
hkjung | 0:879add9a219d | 839 | SeeedGrayOled.putString(" ~ ~ "); |
hkjung | 0:879add9a219d | 840 | break; |
hkjung | 0:879add9a219d | 841 | case 20: // 20 |
hkjung | 0:879add9a219d | 842 | SeeedGrayOled.setTextXY(3, 0); |
hkjung | 0:879add9a219d | 843 | SeeedGrayOled.putString(" ~~~~ ~~~~ "); |
hkjung | 0:879add9a219d | 844 | SeeedGrayOled.setTextXY(4, 0); |
hkjung | 0:879add9a219d | 845 | SeeedGrayOled.putString(" ~ ~ ~ "); |
hkjung | 0:879add9a219d | 846 | SeeedGrayOled.setTextXY(5, 0); |
hkjung | 0:879add9a219d | 847 | SeeedGrayOled.putString(" ~ ~ ~ "); |
hkjung | 0:879add9a219d | 848 | SeeedGrayOled.setTextXY(6, 0); |
hkjung | 0:879add9a219d | 849 | SeeedGrayOled.putString(" ~~~~ ~ ~ "); |
hkjung | 0:879add9a219d | 850 | SeeedGrayOled.setTextXY(7, 0); |
hkjung | 0:879add9a219d | 851 | SeeedGrayOled.putString(" ~ ~ ~ "); |
hkjung | 0:879add9a219d | 852 | SeeedGrayOled.setTextXY(8, 0); |
hkjung | 0:879add9a219d | 853 | SeeedGrayOled.putString(" ~ ~ ~ "); |
hkjung | 0:879add9a219d | 854 | SeeedGrayOled.setTextXY(9, 0); |
hkjung | 0:879add9a219d | 855 | SeeedGrayOled.putString(" ~~~~ ~~~~ "); |
hkjung | 0:879add9a219d | 856 | break; |
hkjung | 0:879add9a219d | 857 | default: // 20 |
hkjung | 0:879add9a219d | 858 | SeeedGrayOled.setTextXY(3, 0); |
hkjung | 0:879add9a219d | 859 | SeeedGrayOled.putString(" ~~~~ ~~~~ "); |
hkjung | 0:879add9a219d | 860 | SeeedGrayOled.setTextXY(4, 0); |
hkjung | 0:879add9a219d | 861 | SeeedGrayOled.putString(" ~ ~ ~ "); |
hkjung | 0:879add9a219d | 862 | SeeedGrayOled.setTextXY(5, 0); |
hkjung | 0:879add9a219d | 863 | SeeedGrayOled.putString(" ~ ~ ~ "); |
hkjung | 0:879add9a219d | 864 | SeeedGrayOled.setTextXY(6, 0); |
hkjung | 0:879add9a219d | 865 | SeeedGrayOled.putString(" ~~~~ ~ ~ "); |
hkjung | 0:879add9a219d | 866 | SeeedGrayOled.setTextXY(7, 0); |
hkjung | 0:879add9a219d | 867 | SeeedGrayOled.putString(" ~ ~ ~ "); |
hkjung | 0:879add9a219d | 868 | SeeedGrayOled.setTextXY(8, 0); |
hkjung | 0:879add9a219d | 869 | SeeedGrayOled.putString(" ~ ~ ~ "); |
hkjung | 0:879add9a219d | 870 | SeeedGrayOled.setTextXY(9, 0); |
hkjung | 0:879add9a219d | 871 | SeeedGrayOled.putString(" ~~~~ ~~~~ ~"); |
hkjung | 0:879add9a219d | 872 | break; |
hkjung | 0:879add9a219d | 873 | } |
hkjung | 0:879add9a219d | 874 | } |