├── ESP32_OscilloscopeClock_01.jpg ├── ESP32_OscilloscopeClock_Excel.jpg ├── ESP32_OscilloscopeClock_v1.0.png ├── ESP32_OscilloscopeClock_v1.0.xlsx ├── README.md └── ESP32_OscilloscopeClock_v1.0 ├── ESP32_OscilloscopeClock_v1.0.ino └── DataTable.h /ESP32_OscilloscopeClock_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maurohh/ESP32_OscilloscopeClock/HEAD/ESP32_OscilloscopeClock_01.jpg -------------------------------------------------------------------------------- /ESP32_OscilloscopeClock_Excel.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maurohh/ESP32_OscilloscopeClock/HEAD/ESP32_OscilloscopeClock_Excel.jpg -------------------------------------------------------------------------------- /ESP32_OscilloscopeClock_v1.0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maurohh/ESP32_OscilloscopeClock/HEAD/ESP32_OscilloscopeClock_v1.0.png -------------------------------------------------------------------------------- /ESP32_OscilloscopeClock_v1.0.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maurohh/ESP32_OscilloscopeClock/HEAD/ESP32_OscilloscopeClock_v1.0.xlsx -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ESP32 Oscilloscope Clock by Mauro Pintus 2 | 3 | ESP32 Oscilloscope Clock using internal DACs, with WiFi ntp sync 4 | 5 | Mauro Pintus , Milano 2018/05/25 6 | 7 | ![](https://github.com/maurohh/ESP32_OscilloscopeClock/blob/master/ESP32_OscilloscopeClock_01.jpg) 8 | 9 | How to use it: 10 | 11 | Load this sketch on a ESP32 board using the Arduino IDE 1.8.7 12 | See Andreas Spiess video linked below if you don't know how to... 13 | Connect your oscilloscope channels to GPIO25 and GPIO26 of the ESP32 14 | Connect the ground of the oscilloscope to the GND of the ESP32 board 15 | Put your Oscilloscope in XY mode 16 | Adjust the vertical scale of the used channels to fit the clock 17 | 18 | Enjoy Your new Oscilloscope Clock!!! :) 19 | 20 | Additional notes: 21 | 22 | NTP Sync 23 | 24 | By default this sketch will start from a fix time 10:08:37 everityme 25 | you reset the board. 26 | 27 | To change it, modify the variables h,m,s below. 28 | To synchronize the clock with an NTP server, you have to install 29 | the library NTPtimeESP from Andreas Spiess. 30 | Then ncomment the line //#define NTP, removing the //. 31 | Edit the WiFi credential in place of Your SSID and Your PASS. 32 | Check in the serial monitor if it can reach the NTP server. 33 | You mignt need to chouse a different pool server for your country. 34 | 35 | The NTPtimeESP library was meant for the ESP8266 and you need to adit the file NTPtimeESP.h to use it with the ESP32. 36 | Open up the "NTPtimeESP.h" inside the library and replace the "#include " with "#include ". 37 | 38 | TimeZone Change 39 | 40 | You needed to modify the "NTPch.getNTPtime(1.0, 1);" request to fit your TimeZone. 41 | Simply change the first argument with your required GMT offset. So for Italy (GMT +1) I've set it to 1.0. 42 | For Pacific Coastal Zone (GMT -8), you need to change "NTPch.getNTPtime(1.0, 1);" to "NTPch.getNTPtime(-8.0, 1);". 43 | 44 | EXCEL XY Coordinates Test 45 | 46 | If you want there is also a special mode that can be enabled uncommenting 47 | the line //#define EXCEL, removing the //. In this mode, the sketch 48 | will run once and will output on the serial monitor all the coordinates 49 | it has generated. You can use this coordinates to draw the clock 50 | using the graph function in Excel or LibreOffice 51 | This is useful to test anything you want to display on the oscilloscope 52 | to verify the actual points that will be generated. 53 | 54 | GitHub Repository 55 | https://github.com/maurohh/ESP32_OscilloscopeClock 56 | 57 | Twitter Page 58 | https://twitter.com/PintusMauro 59 | 60 | Youtube Channel 61 | www.youtube.com/channel/UCZ93JYpVb9rEbg5cbcVG_WA/ 62 | 63 | Old Web Site 64 | www.mauroh.com 65 | 66 | Credits: 67 | Andreas Spiess 68 | https://www.youtube.com/watch?v=DgaKlh081tU 69 | 70 | Andreas Spiess NTP Library 71 | https://github.com/SensorsIot/NTPtimeESP 72 | 73 | My project is based on this one: 74 | http://www.dutchtronix.com/ScopeClock.htm 75 | 76 | Thank you!! 77 | 78 | ![](https://github.com/maurohh/ESP32_OscilloscopeClock/blob/master/ESP32_OscilloscopeClock_Excel.jpg) 79 | -------------------------------------------------------------------------------- /ESP32_OscilloscopeClock_v1.0/ESP32_OscilloscopeClock_v1.0.ino: -------------------------------------------------------------------------------- 1 | /****************************************************************************** 2 | 3 | ESP32 Oscilloscope Clock 4 | using internal DACs, with WiFi and ntp sync. 5 | 6 | Mauro Pintus , Milano 2018/05/25 7 | 8 | How to use it: 9 | Load this sketch on a ESP32 board using the Arduino IDE 1.8.7 10 | See Andreas Spiess video linked below if you dont know how to... 11 | Connect your oscilloscope channels to GPIO25 and GPIO26 of the ESP32 12 | Connect the ground of the oscilloscope to the GND of the ESP32 board 13 | Put your Oscilloscope in XY mode 14 | Adjust the vertical scale of the used channels to fit the clock 15 | 16 | Enjoy Your new Oscilloscope Clock!!! :) 17 | 18 | Additional notes: 19 | By default this sketch will start from a fix time 10:08:37 everityme 20 | you reset the board. 21 | To change it, modify the variables h,m,s below. 22 | 23 | To synchronize the clock with an NTP server, you have to install 24 | the library NTPtimeESP from Andreas Spiess. 25 | Then ncomment the line //#define NTP, removing the //. 26 | Edit the WiFi credential in place of Your SSID and Your PASS. 27 | Check in the serial monitor if it can reach the NTP server. 28 | You mignt need to chouse a different pool server for your country. 29 | 30 | If you want there is also a special mode that can be enabled uncommenting 31 | the line //#define EXCEL, removing the //. In this mode, the sketch 32 | will run once and will output on the serial monitor all the coordinates 33 | it has generated. You can use this coordinates to draw the clock 34 | using the graph function in Excel or LibreOffice 35 | This is useful to test anything you want to display on the oscilloscope 36 | to verify the actual points that will be generated. 37 | 38 | GitHub Repository 39 | https://github.com/maurohh/ESP32_OscilloscopeClock 40 | 41 | Twitter Page 42 | https://twitter.com/PintusMauro 43 | 44 | Youtube Channel 45 | www.youtube.com/channel/UCZ93JYpVb9rEbg5cbcVG_WA/ 46 | 47 | Old Web Site 48 | www.mauroh.com 49 | 50 | Credits: 51 | Andreas Spiess 52 | https://www.youtube.com/watch?v=DgaKlh081tU 53 | 54 | Andreas Spiess NTP Library 55 | https://github.com/SensorsIot/NTPtimeESP 56 | 57 | My project is based on this one: 58 | http://www.dutchtronix.com/ScopeClock.htm 59 | 60 | Thank you!! 61 | 62 | ******************************************************************************/ 63 | 64 | #include 65 | #include 66 | #include 67 | #include "DataTable.h" 68 | 69 | 70 | //#define EXCEL 71 | //#define NTP 72 | 73 | 74 | #if defined NTP 75 | #include 76 | #include 77 | 78 | NTPtime NTPch("europe.pool.ntp.org"); // Choose your server pool 79 | char *ssid = "Your SSID"; // Set you WiFi SSID 80 | char *password = "Your PASS"; // Set you WiFi password 81 | 82 | int status = WL_IDLE_STATUS; 83 | strDateTime dateTime; 84 | #endif // 85 | 86 | // Change this to set the initial Time 87 | // Now is 10:08:37 (12h) 88 | int h=10; //Start Hour 89 | int m=8; //Start Minutes 90 | int s=37; //Start Seconds 91 | 92 | //Variables 93 | int lastx,lasty; 94 | unsigned long currentMillis = 0; 95 | unsigned long previousMillis = 0; 96 | int Timeout = 20; 97 | const long interval = 990; //milliseconds, you should twick this 98 | //to get a better accuracy 99 | 100 | 101 | //***************************************************************************** 102 | // PlotTable 103 | //***************************************************************************** 104 | 105 | void PlotTable(byte *SubTable, int SubTableSize, int skip, int opt, int offset) 106 | { 107 | int i=offset; 108 | while (i dy) { // < 45 187 | acc = (dx >> 1); 188 | for (; x1 <= x2; x1++) { 189 | Dot(x1, y1); 190 | acc -= dy; 191 | if (acc < 0) { 192 | y1++; 193 | acc += dx; 194 | } 195 | } 196 | } 197 | else { // > 45 198 | acc = dy >> 1; 199 | for (; y1 <= y2; y1++) { 200 | Dot(x1, y1); 201 | acc -= dx; 202 | if (acc < 0) { 203 | x1++; 204 | acc += dy; 205 | } 206 | } 207 | } 208 | } 209 | else { // quadrant 2 210 | byte dx = x1 - x2; 211 | if (dx > dy) { // < 45 212 | acc = dx >> 1; 213 | for (; x1 >= x2; x1--) { 214 | Dot(x1, y1); 215 | acc -= dy; 216 | if (acc < 0) { 217 | y1++; 218 | acc += dx; 219 | } 220 | } 221 | } 222 | else { // > 45 223 | acc = dy >> 1; 224 | for (; y1 <= y2; y1++) { 225 | Dot(x1, y1); 226 | acc -= dx; 227 | if (acc < 0) { 228 | x1--; 229 | acc += dy; 230 | } 231 | } 232 | } 233 | } 234 | } 235 | else { // quadrant 3 or 4 236 | byte dy = y1 - y2; 237 | if (x1 < x2) { // quadrant 4 238 | byte dx = x2 - x1; 239 | if (dx > dy) { // < 45 240 | acc = dx >> 1; 241 | for (; x1 <= x2; x1++) { 242 | Dot(x1, y1); 243 | acc -= dy; 244 | if (acc < 0) { 245 | y1--; 246 | acc += dx; 247 | } 248 | } 249 | 250 | } 251 | else { // > 45 252 | acc = dy >> 1; 253 | for (; y1 >= y2; y1--) { 254 | Dot(x1, y1); 255 | acc -= dx; 256 | if (acc < 0) { 257 | x1++; 258 | acc += dy; 259 | } 260 | } 261 | 262 | } 263 | } 264 | else { // quadrant 3 265 | byte dx = x1 - x2; 266 | if (dx > dy) { // < 45 267 | acc = dx >> 1; 268 | for (; x1 >= x2; x1--) { 269 | Dot(x1, y1); 270 | acc -= dy; 271 | if (acc < 0) { 272 | y1--; 273 | acc += dx; 274 | } 275 | } 276 | 277 | } 278 | else { // > 45 279 | acc = dy >> 1; 280 | for (; y1 >= y2; y1--) { 281 | Dot(x1, y1); 282 | acc -= dx; 283 | if (acc < 0) { 284 | x1--; 285 | acc += dy; 286 | } 287 | } 288 | } 289 | } 290 | 291 | } 292 | } 293 | 294 | // End Line 295 | //***************************************************************************** 296 | 297 | 298 | 299 | //***************************************************************************** 300 | // setup 301 | //***************************************************************************** 302 | 303 | void setup() 304 | { 305 | Serial.begin(115200); 306 | Serial.println("\nESP32 Oscilloscope Clock v1.0"); 307 | Serial.println("Mauro Pintus 2018\nwww.mauroh.com"); 308 | //rtc_clk_cpu_freq_set(RTC_CPU_FREQ_240M); 309 | Serial.println("CPU Clockspeed: "); 310 | Serial.println(rtc_clk_cpu_freq_value(rtc_clk_cpu_freq_get())); 311 | 312 | dac_output_enable(DAC_CHANNEL_1); 313 | dac_output_enable(DAC_CHANNEL_2); 314 | 315 | if (h > 12) h=h-12; 316 | 317 | #if defined NTP 318 | Serial.println("Connecting to Wi-Fi"); 319 | 320 | WiFi.begin (ssid, password); 321 | while (WiFi.status() != WL_CONNECTED) { 322 | Serial.print("."); 323 | delay(1000); 324 | Timeout--; 325 | if (Timeout==0){ 326 | Serial.println("\nWiFi Timeout"); 327 | break; 328 | } 329 | } 330 | 331 | if (Timeout!=0){ 332 | Serial.println("\nWiFi connected"); 333 | Serial.println("NTP request sent to Server."); 334 | dateTime = NTPch.getNTPtime(1.0, 1); 335 | Timeout=20; 336 | 337 | while (!dateTime.valid) { 338 | dateTime = NTPch.getNTPtime(1.0, 1); 339 | Serial.print("."); 340 | delay(1000); 341 | Timeout--; 342 | if (Timeout==0){ 343 | Serial.println("\nNTP Server Timeout"); 344 | break; 345 | } 346 | } 347 | 348 | if (Timeout!=0){ 349 | 350 | Serial.println("\nUsing NTP Time"); 351 | NTPch.printDateTime(dateTime); 352 | 353 | byte actualHour = dateTime.hour; 354 | byte actualMinute = dateTime.minute; 355 | byte actualsecond = dateTime.second; 356 | int actualyear = dateTime.year; 357 | byte actualMonth = dateTime.month; 358 | byte actualday = dateTime.day; 359 | byte actualdayofWeek = dateTime.dayofWeek; 360 | 361 | if (actualHour > 12) actualHour=actualHour-12; 362 | 363 | h=actualHour; 364 | m=actualMinute; 365 | s=actualsecond; 366 | } 367 | else{ 368 | Serial.println("\nUsing Fix Time"); 369 | } 370 | } 371 | #endif 372 | 373 | #if !defined NTP 374 | Serial.println("Using Fix Time"); 375 | #endif 376 | 377 | if (h<10) Serial.print("0"); 378 | Serial.print(h); 379 | Serial.print(":"); 380 | if (m<10) Serial.print("0"); 381 | Serial.print(m); 382 | Serial.print(":"); 383 | if (s<10) Serial.print("0"); 384 | Serial.println(s); 385 | h=(h*5)+m/12; 386 | } 387 | 388 | // End setup 389 | //***************************************************************************** 390 | 391 | 392 | 393 | //***************************************************************************** 394 | // loop 395 | //***************************************************************************** 396 | 397 | void loop() { 398 | 399 | currentMillis = millis(); 400 | 401 | if (currentMillis - previousMillis >= interval) { 402 | previousMillis = currentMillis; 403 | s++; 404 | } 405 | if (s==60) { 406 | s=0; 407 | m++; 408 | if ((m==12)||(m==24)||(m==36)||(m==48)) { 409 | h++; 410 | } 411 | } 412 | if (m==60) { 413 | m=0; 414 | h++; 415 | } 416 | if (h==60) { 417 | h=0; 418 | } 419 | 420 | //Optionals 421 | //PlotTable(DialDots,sizeof(DialDots),0x00,1,0); 422 | //PlotTable(TestData,sizeof(TestData),0x00,0,00); //Full 423 | //PlotTable(TestData,sizeof(TestData),0x00,0,11); //Without square 424 | 425 | int i; 426 | //Serial.println("Out Ring"); //2 to back trace 427 | //for (i=0; i < 1000; i++) PlotTable(DialData,sizeof(DialData),0x00,2,0); 428 | 429 | //Serial.println("Diagonals"); //2 to back trace 430 | //for (i=0; i < 2000; i++) PlotTable(DialData,sizeof(DialData),0x00,0,0); 431 | 432 | PlotTable(DialData,sizeof(DialData),0x00,1,0); //2 to back trace 433 | PlotTable(DialDigits12,sizeof(DialDigits12),0x00,1,0);//2 to back trace 434 | PlotTable(HrPtrData, sizeof(HrPtrData), 0xFF,0,9*h); // 9*h 435 | PlotTable(MinPtrData,sizeof(MinPtrData),0xFF,0,9*m); // 9*m 436 | PlotTable(SecPtrData,sizeof(SecPtrData),0xFF,0,5*s); // 5*s 437 | 438 | #if defined EXCEL 439 | while(1); 440 | #endif 441 | 442 | } 443 | 444 | // End loop 445 | //***************************************************************************** 446 | -------------------------------------------------------------------------------- /ESP32_OscilloscopeClock_v1.0/DataTable.h: -------------------------------------------------------------------------------- 1 | /********************************************************************************* 2 | Data Tables for ESP32 Oscilloscope Clock 3 | Mauro Pintus , Milano 2018/05/25 4 | *********************************************************************************/ 5 | 6 | byte DialData[] PROGMEM = { 7 | 0x80,0xfe,0x80,0xf2,0x00,0x8d,0xfe,0x8c,0xf9,0x00,0x9a,0xfc,0x99,0xf7,0x00,0xa6,0xf8,0xa5,0xf4,0x00, 8 | 0xb3,0xf4,0xb1,0xef,0x00,0xbf,0xee,0xba,0xe5,0x00,0xca,0xe6,0xc7,0xe2,0x00,0xd4,0xde,0xd0,0xda,0x00, 9 | 0xdd,0xd5,0xd9,0xd1,0x00,0xe5,0xcb,0xe1,0xc8,0x00,0xed,0xbf,0xe4,0xba,0x00,0xf3,0xb4,0xee,0xb2,0x00, 10 | 0xf7,0xa7,0xf3,0xa6,0x00,0xfb,0x9b,0xf6,0x9a,0x00,0xfd,0x8e,0xf8,0x8d,0x00,0xfd,0x80,0xf1,0x80,0x00, 11 | 0xfd,0x73,0xf8,0x74,0x00,0xfb,0x66,0xf6,0x67,0x00,0xf7,0x5a,0xf3,0x5b,0x00,0xf3,0x4d,0xee,0x4f,0x00, 12 | 0xed,0x41,0xe4,0x46,0x00,0xe5,0x36,0xe1,0x39,0x00,0xdd,0x2c,0xd9,0x30,0x00,0xd4,0x23,0xd0,0x27,0x00, 13 | 0xca,0x1b,0xc7,0x1f,0x00,0xbf,0x13,0xba,0x1c,0x00,0xb3,0x0d,0xb1,0x12,0x00,0xa6,0x09,0xa5,0x0d,0x00, 14 | 0x9a,0x05,0x99,0x0a,0x00,0x8d,0x03,0x8c,0x08,0x00,0x7f,0x03,0x7f,0x0f,0x00,0x72,0x03,0x73,0x08,0x00, 15 | 0x65,0x05,0x66,0x0a,0x00,0x59,0x09,0x5a,0x0d,0x00,0x4c,0x0d,0x4e,0x12,0x00,0x41,0x13,0x46,0x1c,0x00, 16 | 0x35,0x1b,0x38,0x1f,0x00,0x2b,0x23,0x2f,0x27,0x00,0x22,0x2c,0x26,0x30,0x00,0x1a,0x36,0x1e,0x39,0x00, 17 | 0x12,0x42,0x1b,0x47,0x00,0x0c,0x4d,0x11,0x4f,0x00,0x08,0x5a,0x0c,0x5b,0x00,0x04,0x66,0x09,0x67,0x00, 18 | 0x02,0x73,0x07,0x74,0x00,0x02,0x81,0x0e,0x81,0x00,0x02,0x8e,0x07,0x8d,0x00,0x04,0x9b,0x09,0x9a,0x00, 19 | 0x08,0xa7,0x0c,0xa6,0x00,0x0c,0xb4,0x11,0xb2,0x00,0x12,0xbf,0x1b,0xba,0x00,0x1a,0xcb,0x1e,0xc8,0x00, 20 | 0x22,0xd5,0x26,0xd1,0x00,0x2b,0xde,0x2f,0xda,0x00,0x35,0xe6,0x38,0xe2,0x00,0x40,0xee,0x45,0xe5,0x00, 21 | 0x4c,0xf4,0x4e,0xef,0x00,0x59,0xf8,0x5a,0xf4,0x00,0x65,0xfc,0x66,0xf7,0x00,0x72,0xfe,0x73,0xf9,0xff 22 | }; 23 | 24 | 25 | byte DialDots[] PROGMEM = { 26 | 0x80,0xfe,0x80,0xfd,0x81,0xfd,0x81,0xfc,0x00,0x8d,0xfe,0x8d,0xfd,0x8e,0xfd,0x8e,0xfc,0x00,0x9a,0xfc,0x99,0xfb,0x9b,0xfb,0x9a,0xfa,0x00, 27 | 0xa6,0xf8,0xa6,0xf7,0xa7,0xf7,0xa7,0xf6,0x00,0xb3,0xf4,0xb2,0xf3,0xb4,0xf3,0xb3,0xf2,0x00,0xbf,0xee,0xbe,0xed,0xc0,0xed,0xbf,0xec,0x00, 28 | 0xca,0xe6,0xc9,0xe6,0xcb,0xe5,0xca,0xe5,0x00,0xd4,0xde,0xd3,0xdd,0xd5,0xdd,0xd4,0xdc,0x00,0xdd,0xd5,0xdc,0xd4,0xde,0xd4,0xdd,0xd3,0x00, 29 | 0xe5,0xcb,0xe5,0xca,0xe6,0xca,0xe6,0xc9,0x00,0xed,0xbf,0xec,0xbf,0xee,0xbe,0xed,0xbe,0x00,0xf3,0xb4,0xf2,0xb3,0xf4,0xb3,0xf3,0xb2,0x00, 30 | 0xf7,0xa7,0xf6,0xa7,0xf8,0xa6,0xf7,0xa6,0x00,0xfb,0x9b,0xfa,0x9a,0xfc,0x9a,0xfb,0x99,0x00,0xfd,0x8e,0xfc,0x8e,0xfe,0x8d,0xfd,0x8d,0x00, 31 | 0xfd,0x80,0xfc,0x80,0xfe,0x81,0xfd,0x81,0x00,0xfd,0x73,0xfc,0x73,0xfe,0x74,0xfd,0x74,0x00,0xfb,0x66,0xfa,0x67,0xfc,0x67,0xfb,0x68,0x00, 32 | 0xf7,0x5a,0xf6,0x5a,0xf8,0x5b,0xf7,0x5b,0x00,0xf3,0x4d,0xf2,0x4e,0xf4,0x4e,0xf3,0x4f,0x00,0xed,0x41,0xec,0x42,0xee,0x42,0xed,0x43,0x00, 33 | 0xe5,0x36,0xe5,0x37,0xe6,0x37,0xe6,0x38,0x00,0xdd,0x2c,0xdc,0x2d,0xde,0x2d,0xdd,0x2e,0x00,0xd4,0x23,0xd3,0x24,0xd5,0x24,0xd4,0x25,0x00, 34 | 0xca,0x1b,0xc9,0x1b,0xcb,0x1c,0xca,0x1c,0x00,0xbf,0x13,0xbe,0x14,0xc0,0x14,0xbf,0x15,0x00,0xb3,0x0d,0xb2,0x0e,0xb4,0x0e,0xb3,0x0f,0x00, 35 | 0xa6,0x09,0xa6,0x0a,0xa7,0x0a,0xa7,0x0b,0x00,0x9a,0x05,0x99,0x06,0x9b,0x06,0x9a,0x07,0x00,0x8d,0x03,0x8d,0x04,0x8e,0x04,0x8e,0x05,0x00, 36 | 0x7f,0x03,0x7f,0x04,0x80,0x04,0x80,0x05,0x00,0x72,0x03,0x72,0x04,0x73,0x04,0x73,0x05,0x00,0x65,0x05,0x66,0x06,0x66,0x06,0x67,0x07,0x00, 37 | 0x59,0x09,0x59,0x0a,0x5a,0x0a,0x5a,0x0b,0x00,0x4c,0x0d,0x4d,0x0e,0x4d,0x0e,0x4e,0x0f,0x00,0x41,0x13,0x41,0x14,0x42,0x14,0x42,0x15,0x00, 38 | 0x35,0x1b,0x36,0x1b,0x36,0x1c,0x37,0x1c,0x00,0x2b,0x23,0x2c,0x24,0x2c,0x24,0x2d,0x25,0x00,0x22,0x2c,0x23,0x2d,0x23,0x2d,0x24,0x2e,0x00, 39 | 0x1a,0x36,0x1a,0x37,0x1b,0x37,0x1b,0x38,0x00,0x12,0x42,0x13,0x42,0x13,0x43,0x14,0x43,0x00,0x0c,0x4d,0x0d,0x4e,0x0d,0x4e,0x0e,0x4f,0x00, 40 | 0x08,0x5a,0x09,0x5a,0x09,0x5b,0x0a,0x5b,0x00,0x04,0x66,0x05,0x67,0x05,0x67,0x06,0x68,0x00,0x02,0x73,0x03,0x73,0x03,0x74,0x04,0x74,0x00, 41 | 0x02,0x81,0x03,0x81,0x03,0x82,0x04,0x82,0x00,0x02,0x8e,0x03,0x8e,0x03,0x8d,0x04,0x8d,0x00,0x04,0x9b,0x05,0x9a,0x05,0x9a,0x06,0x99,0x00, 42 | 0x08,0xa7,0x09,0xa7,0x09,0xa6,0x0a,0xa6,0x00,0x0c,0xb4,0x0d,0xb3,0x0d,0xb3,0x0e,0xb2,0x00,0x12,0xbf,0x13,0xbf,0x13,0xbe,0x14,0xbe,0x00, 43 | 0x1a,0xcb,0x1a,0xca,0x1b,0xca,0x1b,0xc9,0x00,0x22,0xd5,0x23,0xd4,0x23,0xd4,0x24,0xd3,0x00,0x2b,0xde,0x2c,0xdd,0x2c,0xdd,0x2d,0xdc,0x00, 44 | 0x35,0xe6,0x36,0xe6,0x36,0xe5,0x37,0xe5,0x00,0x40,0xee,0x41,0xed,0x41,0xed,0x42,0xec,0x00,0x4c,0xf4,0x4d,0xf3,0x4d,0xf3,0x4e,0xf2,0x00, 45 | 0x59,0xf8,0x59,0xf7,0x5a,0xf7,0x5a,0xf6,0x00,0x65,0xfc,0x66,0xfb,0x66,0xfb,0x67,0xfa,0x00,0x72,0xfe,0x72,0xfd,0x73,0xfd,0x73,0xfc,0xff 46 | }; 47 | 48 | 49 | byte DialDigits12[] PROGMEM = { 50 | 0x7a,0xeb,0x7a,0xd9,0x00,0x80,0xe8,0x83,0xeb,0x89,0xeb,0x8c,0xe8,0x8c,0xe5,0x80,0xd9,0x8c,0xd9,0x00, 51 | 0xb5,0xe4,0xb5,0xd2,0x00,0x00, 52 | 0xd2,0xbb,0xd5,0xbe,0xdb,0xbe,0xde,0xbb,0xde,0xb8,0xd2,0xac,0xde,0xac,0x00,0x00, 53 | 0xe2,0x86,0xe5,0x89,0xeb,0x89,0xee,0x86,0xee,0x83,0xeb,0x80,0xee,0x7d,0xee,0x7a,0xeb,0x77,0xe5,0x77,0xe2,0x7a,0x00,0xe5,0x80,0xeb,0x80,0x00, 54 | 0xe0,0x4c,0xd4,0x4c,0xdd,0x55,0xdd,0x43,0x00,0x00, 55 | 0xb8,0x31,0xac,0x31,0xac,0x28,0xb5,0x28,0xb8,0x25,0xb8,0x22,0xb5,0x1f,0xaf,0x1f,0xac,0x22,0x00,0x00, 56 | 0x85,0x21,0x82,0x24,0x7c,0x24,0x79,0x21,0x79,0x15,0x7c,0x12,0x82,0x12,0x85,0x15,0x85,0x18,0x82,0x1b,0x7c,0x1b,0x79,0x18,0x00,0x47,0x31,0x53,0x31,0x53,0x2e,0x50,0x2b,0x4d,0x25,0x4d,0x1f,0x00, 57 | 0x22,0x4c,0x1f,0x4f,0x1f,0x52,0x22,0x55,0x28,0x55,0x2b,0x52,0x2b,0x4f,0x28,0x4c,0x22,0x4c,0x1f,0x49,0x1f,0x46,0x22,0x43,0x28,0x43,0x2b,0x46,0x2b,0x49,0x28,0x4c,0x00,0x00, 58 | 0x1d,0x84,0x1a,0x81,0x1a,0x81,0x14,0x81,0x11,0x84,0x11,0x87,0x14,0x8a,0x1a,0x8a,0x1d,0x87,0x1d,0x7b,0x1a,0x78,0x14,0x78,0x11,0x7b,0x00,0x00, 59 | 0x21,0xbe,0x21,0xac,0x00,0x00, 60 | 0x27,0xbb,0x2a,0xbe,0x30,0xbe,0x33,0xbb,0x33,0xaf,0x30,0xac,0x2a,0xac,0x27,0xaf,0x27,0xbb,0x00,0x00, 61 | 0x49,0xe4,0x49,0xd2,0x00,0x00, 62 | 0x53,0xe4,0x53,0xd2,0xff,0x00 63 | }; 64 | byte DialDigits24[] PROGMEM = { 65 | 0x73,0xef,0x76,0xf2,0x7c,0xf2,0x7f,0xef,0x7f,0xec,0x73,0xe0,0x7f,0xe0,0x00,0x8d,0xe9,0x81,0xe9,0x8a,0xf2,0x8a,0xe0,0x00, 66 | 0xaa,0xe2,0xaa,0xd0,0x00,0x00, 67 | 0xb0,0xdf,0xb3,0xe2,0xb9,0xe2,0xbc,0xdf,0xbc,0xdc,0xb9,0xd9,0xbc,0xd6,0xbc,0xd3,0xb9,0xd0,0xb3,0xd0,0xb0,0xd3,0x00,0xb3,0xd9,0xb9,0xd9,0x00, 68 | 0xd0,0xbc,0xd0,0xaa,0x00,0x00, 69 | 0xe2,0xb3,0xd6,0xb3,0xdf,0xbc,0xdf,0xaa,0x00,0x00, 70 | 0xdc,0x89,0xdc,0x77,0x00,0xee,0x89,0xe2,0x89,0xe2,0x80,0xeb,0x80,0xee,0x7d,0xee,0x7a,0xeb,0x77,0xe5,0x77,0xe2,0x7a,0x00, 71 | 0xd0,0x55,0xd0,0x43,0x00,0x00, 72 | 0xe2,0x52,0xdf,0x55,0xd9,0x55,0xd6,0x52,0xd6,0x46,0xd9,0x43,0xdf,0x43,0xe2,0x46,0xe2,0x49,0xdf,0x4c,0xd9,0x4c,0xd6,0x49,0x00,0x00, 73 | 0xaa,0x2d,0xaa,0x1b,0x00,0x00, 74 | 0xb0,0x2d,0xbc,0x2d,0xbc,0x2a,0xb9,0x27,0xb6,0x21,0xb6,0x1b,0x00,0x00, 75 | 0x7b,0x21,0x7b,0x0f,0x00,0x83,0x18,0x80,0x1b,0x80,0x1e,0x83,0x21,0x89,0x21,0x8c,0x1e,0x8c,0x1b,0x89,0x18,0x83,0x18,0x80,0x15,0x80,0x12,0x83,0x0f,0x89,0x0f,0x8c,0x12,0x8c,0x15,0x89,0x18,0x00, 76 | 0x49,0x2f,0x49,0x1d,0x00,0x00, 77 | 0x5b,0x29,0x58,0x26,0x58,0x26,0x52,0x26,0x4f,0x29,0x4f,0x2c,0x52,0x2f,0x58,0x2f,0x5b,0x2c,0x5b,0x20,0x58,0x1d,0x52,0x1d,0x4f,0x20,0x00,0x00, 78 | 0x1e,0x52,0x21,0x55,0x27,0x55,0x2a,0x52,0x2a,0x4f,0x1e,0x43,0x2a,0x43,0x00,0x00, 79 | 0x2f,0x52,0x32,0x55,0x38,0x55,0x3b,0x52,0x3b,0x46,0x38,0x43,0x32,0x43,0x2f,0x46,0x2f,0x52,0x00,0x00, 80 | 0x11,0x87,0x14,0x8a,0x1a,0x8a,0x1d,0x87,0x1d,0x84,0x11,0x78,0x1d,0x78,0x00,0x00, 81 | 0x23,0x8a,0x23,0x78,0x00,0x00, 82 | 0x1e,0xbb,0x21,0xbe,0x27,0xbe,0x2a,0xbb,0x2a,0xb8,0x1e,0xac,0x2a,0xac,0x00,0x00, 83 | 0x2f,0xbb,0x32,0xbe,0x38,0xbe,0x3b,0xbb,0x3b,0xb8,0x2f,0xac,0x3b,0xac,0x00,0x00, 84 | 0x40,0xdd,0x43,0xe0,0x49,0xe0,0x4c,0xdd,0x4c,0xda,0x40,0xce,0x4c,0xce,0x00,0x00, 85 | 0x51,0xdd,0x54,0xe0,0x5a,0xe0,0x5d,0xdd,0x5d,0xda,0x5a,0xd7,0x5d,0xd4,0x5d,0xd1,0x5a,0xce,0x54,0xce,0x51,0xd1,0x00,0x54,0xd7,0x5a,0xd7,0xff 86 | 87 | }; 88 | byte DialDigitsRoman[] PROGMEM = { 89 | 0x76,0xdf,0x8a,0xdf,0x00,0x79,0xdf,0x80,0xf3,0x00,0x79,0xf3,0x80,0xdf,0x00,0x83,0xdf,0x83,0xf3,0x00,0x87,0xf3,0x87,0xdf,0x00,0x76,0xf3,0x8a,0xf3,0x00, 90 | 0xad,0xd1,0xb5,0xd1,0x00,0xb1,0xd1,0xb1,0xe5,0x00,0xad,0xe5,0xb5,0xe5,0x00,0x00, 91 | 0xd2,0xab,0xde,0xab,0x00,0xd6,0xab,0xd6,0xbf,0x00,0xda,0xab,0xda,0xbf,0x00,0xd2,0xbf,0xde,0xbf,0x00, 92 | 0xdc,0x76,0xee,0x76,0x00,0xe0,0x76,0xe0,0x8a,0x00,0xe5,0x76,0xe5,0x8a,0x00,0xea,0x76,0xea,0x8a,0x00,0xdc,0x8a,0xee,0x8a,0x00,0xc9,0x42,0xdf,0x42,0x00,0xce,0x42,0xce,0x56,0x00,0xd2,0x42,0xd2,0x56,0x00,0xd6,0x42,0xd6,0x56,0x00,0xda,0x42,0xda,0x56,0x00,0xc9,0x56,0xdf,0x56,0x00,0x00, 93 | 0xa9,0x22,0xb9,0x22,0x00,0xad,0x36,0xb1,0x22,0xb5,0x36,0x00,0xa9,0x36,0xb9,0x36,0x00,0x00, 94 | 0x75,0x14,0x89,0x14,0x00,0x79,0x28,0x7d,0x14,0x81,0x28,0x00,0x85,0x14,0x85,0x28,0x00,0x75,0x28,0x89,0x28,0x00, 95 | 0x43,0x22,0x59,0x22,0x00,0x46,0x36,0x4a,0x22,0x4e,0x36,0x00,0x51,0x22,0x51,0x36,0x00,0x55,0x22,0x55,0x36,0x00,0x43,0x36,0x59,0x36,0x00,0x00, 96 | 0x1d,0x42,0x39,0x42,0x00,0x22,0x56,0x26,0x42,0x2a,0x56,0x00,0x2e,0x42,0x2e,0x56,0x00,0x32,0x42,0x32,0x56,0x00,0x36,0x42,0x36,0x56,0x00,0x1d,0x56,0x39,0x56,0x00, 97 | 0x11,0x77,0x23,0x77,0x00,0x14,0x77,0x14,0x8b,0x00,0x18,0x77,0x20,0x8b,0x00,0x18,0x8b,0x20,0x77,0x00,0x11,0x8b,0x23,0x8b,0x00,0x00, 98 | 0x24,0xab,0x32,0xab,0x00,0x27,0xab,0x2f,0xbf,0x00,0x27,0xbf,0x2f,0xab,0x00,0x24,0xbf,0x32,0xbf,0x00, 99 | 0x48,0xd1,0x5a,0xd1,0x00,0x4b,0xd1,0x53,0xe5,0x00,0x4b,0xe5,0x53,0xd1,0x00,0x56,0xd1,0x56,0xe5,0x00,0x48,0xe5,0x5a,0xe5,0xff,0x00 100 | }; 101 | byte DialDigitsMin [] PROGMEM = { 102 | 0x7a,0xeb,0x7a,0xd9,0x00,0x80,0xe8,0x83,0xeb,0x89,0xeb,0x8c,0xe8,0x8c,0xe5,0x80,0xd9,0x8c,0xd9,0x00, 103 | 0xe2,0x86,0xe5,0x89,0xeb,0x89,0xee,0x86,0xee,0x83,0xeb,0x80,0xee,0x7d,0xee,0x7a,0xeb,0x77,0xe5,0x77,0xe2,0x7a,0x00,0xe5,0x80,0xeb,0x80,0x00, 104 | 0x85,0x21,0x82,0x24,0x7c,0x24,0x79,0x21,0x79,0x15,0x7c,0x12,0x82,0x12,0x85,0x15,0x85,0x18,0x82,0x1b,0x7c,0x1b,0x79,0x18,0x00,0x1d,0x84,0x1a,0x81,0x1a,0x81,0x14,0x81,0x11,0x84,0x11,0x87,0x14,0x8a,0x1a,0x8a,0x1d,0x87,0x1d,0x7b,0x1a,0x78,0x14,0x78,0x11,0x7b,0xff 105 | }; 106 | 107 | byte SecPtrData[] PROGMEM = { 108 | 0x80,0xec,0x80,0x80,0xff,0x8b,0xec,0x80,0x80,0xff,0x96,0xea,0x80,0x80,0xff,0xa1,0xe7,0x80,0x80,0xff, 109 | 0xab,0xe3,0x80,0x80,0xff,0xb6,0xde,0x80,0x80,0xff,0xbf,0xd8,0x80,0x80,0xff,0xc8,0xd1,0x80,0x80,0xff, 110 | 0xd0,0xc9,0x80,0x80,0xff,0xd7,0xc0,0x80,0x80,0xff,0xdd,0xb6,0x80,0x80,0xff,0xe2,0xac,0x80,0x80,0xff, 111 | 0xe6,0xa2,0x80,0x80,0xff,0xe9,0x97,0x80,0x80,0xff,0xeb,0x8c,0x80,0x80,0xff,0xeb,0x80,0x80,0x80,0xff, 112 | 0xeb,0x75,0x80,0x80,0xff,0xe9,0x6a,0x80,0x80,0xff,0xe6,0x5f,0x80,0x80,0xff,0xe2,0x55,0x80,0x80,0xff, 113 | 0xdd,0x4a,0x80,0x80,0xff,0xd7,0x41,0x80,0x80,0xff,0xd0,0x38,0x80,0x80,0xff,0xc8,0x30,0x80,0x80,0xff, 114 | 0xbf,0x29,0x80,0x80,0xff,0xb6,0x23,0x80,0x80,0xff,0xab,0x1e,0x80,0x80,0xff,0xa1,0x1a,0x80,0x80,0xff, 115 | 0x96,0x17,0x80,0x80,0xff,0x8b,0x15,0x80,0x80,0xff,0x80,0x15,0x80,0x80,0xff,0x74,0x15,0x80,0x80,0xff, 116 | 0x69,0x17,0x80,0x80,0xff,0x5e,0x1a,0x80,0x80,0xff,0x54,0x1e,0x80,0x80,0xff,0x4a,0x23,0x80,0x80,0xff, 117 | 0x40,0x29,0x80,0x80,0xff,0x37,0x30,0x80,0x80,0xff,0x2f,0x38,0x80,0x80,0xff,0x28,0x41,0x80,0x80,0xff, 118 | 0x22,0x4b,0x80,0x80,0xff,0x1d,0x55,0x80,0x80,0xff,0x19,0x5f,0x80,0x80,0xff,0x16,0x6a,0x80,0x80,0xff, 119 | 0x14,0x75,0x80,0x80,0xff,0x14,0x80,0x80,0x80,0xff,0x14,0x8c,0x80,0x80,0xff,0x16,0x97,0x80,0x80,0xff, 120 | 0x19,0xa2,0x80,0x80,0xff,0x1d,0xac,0x80,0x80,0xff,0x22,0xb6,0x80,0x80,0xff,0x28,0xc0,0x80,0x80,0xff, 121 | 0x2f,0xc9,0x80,0x80,0xff,0x37,0xd1,0x80,0x80,0xff,0x40,0xd8,0x80,0x80,0xff,0x49,0xde,0x80,0x80,0xff, 122 | 0x54,0xe3,0x80,0x80,0xff,0x5e,0xe7,0x80,0x80,0xff,0x69,0xea,0x80,0x80,0xff,0x74,0xec,0x80,0x80,0xff 123 | 124 | }; 125 | byte MinPtrData[] PROGMEM = { 126 | 0x82,0x80,0x80,0xe6,0x7e,0x80,0x82,0x80,0xff,0x81,0x80,0x8a,0xe6,0x7e,0x81,0x81,0x80,0xff, 127 | 0x81,0x80,0x95,0xe4,0x7e,0x81,0x81,0x80,0xff,0x81,0x80,0x9f,0xe2,0x7e,0x81,0x81,0x80,0xff, 128 | 0x81,0x80,0xa9,0xde,0x7e,0x81,0x81,0x80,0xff,0x81,0x7f,0xb3,0xd9,0x7e,0x82,0x81,0x7f,0xff, 129 | 0x81,0x7f,0xbb,0xd3,0x7e,0x82,0x81,0x7f,0xff,0x81,0x7f,0xc4,0xcc,0x7e,0x82,0x81,0x7f,0xff, 130 | 0x81,0x7f,0xcb,0xc5,0x7e,0x82,0x81,0x7f,0xff,0x81,0x7f,0xd2,0xbc,0x7e,0x82,0x81,0x7f,0xff, 131 | 0x80,0x7f,0xd8,0xb3,0x7f,0x82,0x80,0x7f,0xff,0x80,0x7f,0xdd,0xaa,0x7f,0x82,0x80,0x7f,0xff, 132 | 0x80,0x7f,0xe1,0xa0,0x7f,0x82,0x80,0x7f,0xff,0x80,0x7f,0xe3,0x96,0x7f,0x82,0x80,0x7f,0xff, 133 | 0x80,0x7f,0xe5,0x8b,0x7f,0x82,0x80,0x7f,0xff,0x7f,0x7e,0xe5,0x80,0x80,0x82,0x7f,0x7e,0xff, 134 | 0x7f,0x7f,0xe5,0x76,0x80,0x82,0x7f,0x7f,0xff,0x7f,0x7f,0xe3,0x6b,0x80,0x82,0x7f,0x7f,0xff, 135 | 0x7f,0x7f,0xe1,0x61,0x80,0x82,0x7f,0x7f,0xff,0x7f,0x7f,0xdd,0x57,0x80,0x82,0x7f,0x7f,0xff, 136 | 0x7e,0x7f,0xd8,0x4d,0x81,0x82,0x7e,0x7f,0xff,0x7e,0x7f,0xd2,0x45,0x81,0x82,0x7e,0x7f,0xff, 137 | 0x7e,0x7f,0xcb,0x3c,0x81,0x82,0x7e,0x7f,0xff,0x7e,0x7f,0xc4,0x35,0x81,0x82,0x7e,0x7f,0xff, 138 | 0x7e,0x7f,0xbb,0x2e,0x81,0x82,0x7e,0x7f,0xff,0x7e,0x7f,0xb3,0x28,0x81,0x82,0x7e,0x7f,0xff, 139 | 0x7e,0x80,0xa9,0x23,0x81,0x81,0x7e,0x80,0xff,0x7e,0x80,0x9f,0x1f,0x81,0x81,0x7e,0x80,0xff, 140 | 0x7e,0x80,0x95,0x1d,0x81,0x81,0x7e,0x80,0xff,0x7e,0x80,0x8a,0x1b,0x81,0x81,0x7e,0x80,0xff, 141 | 0x7e,0x81,0x7f,0x1b,0x82,0x80,0x7e,0x81,0xff,0x7e,0x81,0x75,0x1b,0x81,0x80,0x7e,0x81,0xff, 142 | 0x7e,0x81,0x6a,0x1d,0x81,0x80,0x7e,0x81,0xff,0x7e,0x81,0x60,0x1f,0x81,0x80,0x7e,0x81,0xff, 143 | 0x7e,0x81,0x56,0x23,0x81,0x80,0x7e,0x81,0xff,0x7e,0x81,0x4d,0x28,0x81,0x80,0x7e,0x81,0xff, 144 | 0x7e,0x82,0x44,0x2e,0x81,0x7f,0x7e,0x82,0xff,0x7e,0x82,0x3b,0x35,0x81,0x7f,0x7e,0x82,0xff, 145 | 0x7e,0x82,0x34,0x3c,0x81,0x7f,0x7e,0x82,0xff,0x7e,0x82,0x2d,0x45,0x81,0x7f,0x7e,0x82,0xff, 146 | 0x7f,0x82,0x27,0x4e,0x80,0x7f,0x7f,0x82,0xff,0x7f,0x82,0x22,0x57,0x80,0x7f,0x7f,0x82,0xff, 147 | 0x7f,0x82,0x1e,0x61,0x80,0x7f,0x7f,0x82,0xff,0x7f,0x82,0x1c,0x6b,0x80,0x7f,0x7f,0x82,0xff, 148 | 0x7f,0x82,0x1a,0x76,0x80,0x7f,0x7f,0x82,0xff,0x80,0x82,0x1a,0x81,0x7f,0x7e,0x80,0x82,0xff, 149 | 0x80,0x82,0x1a,0x8b,0x7f,0x7f,0x80,0x82,0xff,0x80,0x82,0x1c,0x96,0x7f,0x7f,0x80,0x82,0xff, 150 | 0x80,0x82,0x1e,0xa0,0x7f,0x7f,0x80,0x82,0xff,0x80,0x82,0x22,0xaa,0x7f,0x7f,0x80,0x82,0xff, 151 | 0x80,0x82,0x27,0xb3,0x7f,0x7f,0x80,0x82,0xff,0x81,0x82,0x2d,0xbc,0x7e,0x7f,0x81,0x82,0xff, 152 | 0x81,0x82,0x34,0xc5,0x7e,0x7f,0x81,0x82,0xff,0x81,0x82,0x3b,0xcc,0x7e,0x7f,0x81,0x82,0xff, 153 | 0x81,0x82,0x44,0xd3,0x7e,0x7f,0x81,0x82,0xff,0x81,0x82,0x4c,0xd9,0x7e,0x7f,0x81,0x82,0xff, 154 | 0x81,0x81,0x56,0xde,0x7e,0x80,0x81,0x81,0xff,0x81,0x81,0x60,0xe2,0x7e,0x80,0x81,0x81,0xff, 155 | 0x81,0x81,0x6a,0xe4,0x7e,0x80,0x81,0x81,0xff,0x81,0x81,0x75,0xe6,0x7e,0x80,0x81,0x81,0xff 156 | 157 | }; 158 | byte HrPtrData[] PROGMEM = { 159 | 0x82,0x80,0x80,0xbc,0x7e,0x80,0x82,0x80,0xff,0x81,0x80,0x86,0xbc,0x7e,0x81,0x81,0x80,0xff, 160 | 0x81,0x80,0x8c,0xbb,0x7e,0x81,0x81,0x80,0xff,0x81,0x80,0x92,0xba,0x7e,0x81,0x81,0x80,0xff, 161 | 0x81,0x80,0x98,0xb7,0x7e,0x81,0x81,0x80,0xff,0x81,0x7f,0x9e,0xb4,0x7e,0x82,0x81,0x7f,0xff, 162 | 0x81,0x7f,0xa3,0xb1,0x7e,0x82,0x81,0x7f,0xff,0x81,0x7f,0xa8,0xad,0x7e,0x82,0x81,0x7f,0xff, 163 | 0x81,0x7f,0xac,0xa9,0x7e,0x82,0x81,0x7f,0xff,0x81,0x7f,0xb0,0xa4,0x7e,0x82,0x81,0x7f,0xff, 164 | 0x80,0x7f,0xb3,0x9e,0x7f,0x82,0x80,0x7f,0xff,0x80,0x7f,0xb6,0x99,0x7f,0x82,0x80,0x7f,0xff, 165 | 0x80,0x7f,0xb9,0x93,0x7f,0x82,0x80,0x7f,0xff,0x80,0x7f,0xba,0x8d,0x7f,0x82,0x80,0x7f,0xff, 166 | 0x80,0x7f,0xbb,0x87,0x7f,0x82,0x80,0x7f,0xff,0x7f,0x7e,0xbb,0x80,0x80,0x82,0x7f,0x7e,0xff, 167 | 0x7f,0x7f,0xbb,0x7a,0x80,0x82,0x7f,0x7f,0xff,0x7f,0x7f,0xba,0x74,0x80,0x82,0x7f,0x7f,0xff, 168 | 0x7f,0x7f,0xb9,0x6e,0x80,0x82,0x7f,0x7f,0xff,0x7f,0x7f,0xb6,0x68,0x80,0x82,0x7f,0x7f,0xff, 169 | 0x7e,0x7f,0xb3,0x62,0x81,0x82,0x7e,0x7f,0xff,0x7e,0x7f,0xb0,0x5d,0x81,0x82,0x7e,0x7f,0xff, 170 | 0x7e,0x7f,0xac,0x58,0x81,0x82,0x7e,0x7f,0xff,0x7e,0x7f,0xa8,0x54,0x81,0x82,0x7e,0x7f,0xff, 171 | 0x7e,0x7f,0xa3,0x50,0x81,0x82,0x7e,0x7f,0xff,0x7e,0x7f,0x9e,0x4d,0x81,0x82,0x7e,0x7f,0xff, 172 | 0x7e,0x80,0x98,0x4a,0x81,0x81,0x7e,0x80,0xff,0x7e,0x80,0x92,0x47,0x81,0x81,0x7e,0x80,0xff, 173 | 0x7e,0x80,0x8c,0x46,0x81,0x81,0x7e,0x80,0xff,0x7e,0x80,0x86,0x45,0x81,0x81,0x7e,0x80,0xff, 174 | 0x7e,0x81,0x7f,0x45,0x82,0x80,0x7e,0x81,0xff,0x7e,0x81,0x79,0x45,0x81,0x80,0x7e,0x81,0xff, 175 | 0x7e,0x81,0x73,0x46,0x81,0x80,0x7e,0x81,0xff,0x7e,0x81,0x6d,0x47,0x81,0x80,0x7e,0x81,0xff, 176 | 0x7e,0x81,0x67,0x4a,0x81,0x80,0x7e,0x81,0xff,0x7e,0x81,0x62,0x4d,0x81,0x80,0x7e,0x81,0xff, 177 | 0x7e,0x82,0x5c,0x50,0x81,0x7f,0x7e,0x82,0xff,0x7e,0x82,0x57,0x54,0x81,0x7f,0x7e,0x82,0xff, 178 | 0x7e,0x82,0x53,0x58,0x81,0x7f,0x7e,0x82,0xff,0x7e,0x82,0x4f,0x5d,0x81,0x7f,0x7e,0x82,0xff, 179 | 0x7f,0x82,0x4c,0x63,0x80,0x7f,0x7f,0x82,0xff,0x7f,0x82,0x49,0x68,0x80,0x7f,0x7f,0x82,0xff, 180 | 0x7f,0x82,0x46,0x6e,0x80,0x7f,0x7f,0x82,0xff,0x7f,0x82,0x45,0x74,0x80,0x7f,0x7f,0x82,0xff, 181 | 0x7f,0x82,0x44,0x7a,0x80,0x7f,0x7f,0x82,0xff,0x80,0x82,0x44,0x81,0x7f,0x7e,0x80,0x82,0xff, 182 | 0x80,0x82,0x44,0x87,0x7f,0x7f,0x80,0x82,0xff,0x80,0x82,0x45,0x8d,0x7f,0x7f,0x80,0x82,0xff, 183 | 0x80,0x82,0x46,0x93,0x7f,0x7f,0x80,0x82,0xff,0x80,0x82,0x49,0x99,0x7f,0x7f,0x80,0x82,0xff, 184 | 0x80,0x82,0x4c,0x9e,0x7f,0x7f,0x80,0x82,0xff,0x81,0x82,0x4f,0xa4,0x7e,0x7f,0x81,0x82,0xff, 185 | 0x81,0x82,0x53,0xa9,0x7e,0x7f,0x81,0x82,0xff,0x81,0x82,0x57,0xad,0x7e,0x7f,0x81,0x82,0xff, 186 | 0x81,0x82,0x5c,0xb1,0x7e,0x7f,0x81,0x82,0xff,0x81,0x82,0x61,0xb4,0x7e,0x7f,0x81,0x82,0xff, 187 | 0x81,0x81,0x67,0xb7,0x7e,0x80,0x81,0x81,0xff,0x81,0x81,0x6d,0xba,0x7e,0x80,0x81,0x81,0xff, 188 | 0x81,0x81,0x73,0xbb,0x7e,0x80,0x81,0x81,0xff,0x81,0x81,0x79,0xbc,0x7e,0x80,0x81,0x81,0xff 189 | 190 | }; 191 | 192 | byte TestData[] PROGMEM = { 193 | 0x01,0x01,0x01,0xfe,0xfe,0xfe,0xfe,0x01,0x01,0x01,0x00, // Max Square 194 | 0x01,0x3f,0x01,0xbd,0x3f,0xfe,0xbd,0xfe,0xfe,0xbd,0xfe,0x3f,0xbd,0x01,0x3f,0x01,0x01,0x3f,0x00, // Max Octagon 195 | 0x7f,0x7f,0x7f,0xfe,0x00,0x7f,0x7f,0xbd,0xfe,0x00,0x7f,0x7f,0xfe,0xfe,0x00,0x7f,0x7f,0xfe,0xbd,0x00,// Max diagonals 196 | 0x7f,0x7f,0xfe,0x7f,0x00,0x7f,0x7f,0xfe,0x3f,0x00,0x7f,0x7f,0xfe,0x01,0x00,0x7f,0x7f,0xbd,0x01,0x00, 197 | 0x7f,0x7f,0x7f,0x01,0x00,0x7f,0x7f,0x3f,0x01,0x00,0x7f,0x7f,0x01,0x01,0x00,0x7f,0x7f,0x01,0x3f,0x00, 198 | 0x7f,0x7f,0x01,0x7f,0x00,0x7f,0x7f,0x01,0xbd,0x00,0x7f,0x7f,0x01,0xfe,0x00,0x7f,0x7f,0x3f,0xfe,0xff 199 | }; 200 | --------------------------------------------------------------------------------