From 0e68bbbfbdb198598ec4b936f351878d9d6a018e Mon Sep 17 00:00:00 2001 From: egorguslyan <egorguslyan@gmail.com> Date: Tue, 23 Nov 2021 22:59:30 +0300 Subject: [PATCH] Restructured font + working static render --- Dashboard/Dashboard.ino | 11 ++-- Dashboard/font.h | 141 +++++++++++++++++++++++++++++++++++++--- Dashboard/textbox.h | 47 ++++---------- 3 files changed, 151 insertions(+), 48 deletions(-) diff --git a/Dashboard/Dashboard.ino b/Dashboard/Dashboard.ino index 001440c..e2b245b 100644 --- a/Dashboard/Dashboard.ino +++ b/Dashboard/Dashboard.ino @@ -47,17 +47,18 @@ MHZ19_uart co2; void setup() { - Serial.begin(9600); - while (!Serial.available()) {} - Serial.println("Hello"); matrix.setBrightness(100); matrix.clear(); matrix.show(); + Serial.begin(9600); + while (!Serial.available()) {} + Serial.println("Hello"); + co2.begin(CO2TX, CO2RX); co2.setAutoCalibration(false); delay(500); - tb.setup("Hello", TB_STATIC, 0, 0, 16); + tb.setup("Mama", TB_STATIC, 0, 0, 16); tb.render(); } @@ -77,7 +78,7 @@ void loop() CO2 = map(CO2, 300, 1500, 0, 9); for (uint8_t i = 0; i < CO2; i++) { - matrix.set(matrix.getPixNumber(15, i), mHEX(0x0aa100)); + matrix.set(15, i, mHEX(0x0aa100)); } //matrix.fill(mHEX(0x9aa100)); matrix.show(); diff --git a/Dashboard/font.h b/Dashboard/font.h index f7faa57..97b50e0 100644 --- a/Dashboard/font.h +++ b/Dashboard/font.h @@ -5,12 +5,40 @@ // Example char // const uint8_t char[] PROGMEM = {cords(x, y, b), 0b11111110, 0b11110111, 0b01011101, 0b11101111, 0b11100000}; -const uint8_t font_space[] PROGMEM = {cords(1, 6, 1), 0b00000000}; const uint8_t font_notdef[] PROGMEM = {cords(5, 0, 5), 0b11111110, 0b11110111, 0b01011101, 0b11101111, 0b11100000}; -const uint8_t font_dot[] PROGMEM = {cords(2, 4, 1), 0b11011000}; -const uint8_t font_comma[] PROGMEM = {cords(2, 4, 1), 0b11011001}; +const uint8_t font_space[] PROGMEM = {cords(1, 6, 1), 0b00000000}; const uint8_t font_exclamation[] PROGMEM = {cords(1, 0, 1), 0b11110100}; +const uint8_t font_quote[] PROGMEM = {cords(3, 0, 1), 0b10110100}; +const uint8_t font_hashtag[] PROGMEM = {cords(5, 2, 3), 0b01010111, 0b11010101, 0b11110101}; +const uint8_t font_promt[] PROGMEM = {cords(5, 0, 5), 0b00100011, 0b10101000, 0b11100010, 0b10111000, 0b10000000}; +const uint8_t font_percent[] PROGMEM = {cords(5, 0, 5), 0b11101101, 0b01110100, 0b01000101, 0b11010110, 0b11100000}; +const uint8_t font_octopus[] PROGMEM = {cords(5, 0, 5), 0b01100100, 0b10100000, 0b11001001, 0b11001001, 0b10100000}; +const uint8_t font_singlequote[] PROGMEM = {cords(1, 0, 1), 0b11000000}; +const uint8_t font_bracketO[] PROGMEM = {cords(2, 0, 2), 0b01101010, 0b10100100}; +const uint8_t font_bracketC[] PROGMEM = {cords(2, 0, 2), 0b10010101, 0b01011000}; +const uint8_t font_multiply[] PROGMEM = {cords(3, 2, 2), 0b10101010, 0b10000000}; +const uint8_t font_plus[] PROGMEM = {cords(3, 2, 1), 0b01011101}; +const uint8_t font_comma[] PROGMEM = {cords(2, 4, 1), 0b11011001}; +const uint8_t font_minus[] PROGMEM = {cords(3, 3, 1), 0b11100000}; +const uint8_t font_dot[] PROGMEM = {cords(2, 4, 1), 0b11011000}; +const uint8_t font_slash[] PROGMEM = {cords(3, 0, 3), 0b00100101, 0b00100101, 0b00100000}; +const uint8_t font_colon[] PROGMEM = {cords(1, 2, 1), 0b10100000}; +const uint8_t font_semicolon[] PROGMEM = {cords(2, 2, 1), 0b01000110}; +const uint8_t font_less[] PROGMEM = {cords(3, 1, 2), 0b00101010, 0b00100010}; +const uint8_t font_equal[] PROGMEM = {cords(3, 2, 2), 0b11100011, 0b10000000}; +const uint8_t font_greater[] PROGMEM = {cords(3, 1, 2), 0b10001000, 0b10101000}; const uint8_t font_question[] PROGMEM = {cords(3, 0, 3), 0b01010100, 0b10100100, 0b00010000}; +const uint8_t font_mail[] PROGMEM = {cords(5, 0, 5), 0b01110100, 0b01011000, 0b10100111, 0b01000101, 0b10000000}; +const uint8_t font_sbracketO[] PROGMEM = {cords(2, 0, 2), 0b11101010, 0b10101100}; +const uint8_t font_bslash[] PROGMEM = {cords(3, 0, 3), 0b10010001, 0b00100100, 0b01000000}; +const uint8_t font_sbracketC[] PROGMEM = {cords(2, 0, 2), 0b11010101, 0b01011100}; +const uint8_t font_caret[] PROGMEM = {cords(3, 0, 1), 0b01010100}; +const uint8_t font_underscore[] PROGMEM = {cords(3, 6, 1), 0b11100000}; +const uint8_t font_grave[] PROGMEM = {cords(2, 0, 1), 0b10010000}; +const uint8_t font_fbracketO[] PROGMEM = {cords(3, 0, 2), 0b00101001, 0b01000100, 0b1000100}; +const uint8_t font_pipe[] PROGMEM = {cords(1, 0, 1), 0b11111110}; +const uint8_t font_fbracketC[] PROGMEM = {cords(2, 0, 2), 0b10001001, 0b00010100, 0b1010000}; +const uint8_t font_tilda[] PROGMEM = {cords(5, 2, 2), 0b01000101, 0b01000100}; // Numbers const uint8_t font_num0[] PROGMEM = {cords(5, 0, 5), 0b01110100, 0b11101011, 0b01011010, 0b11100101, 0b11000000}; const uint8_t font_num1[] PROGMEM = {cords(3, 0, 3), 0b01011001, 0b00100100, 0b10111000}; @@ -49,7 +77,7 @@ const uint8_t font_W[] PROGMEM = {cords(5, 0, 5), 0b10001100, 0b01101 const uint8_t font_X[] PROGMEM = {cords(5, 0, 5), 0b10001010, 0b10010100, 0b01000101, 0b00101010, 0b00100000}; const uint8_t font_Y[] PROGMEM = {cords(5, 0, 5), 0b10001010, 0b10010100, 0b01000010, 0b00010000, 0b10000000}; const uint8_t font_Z[] PROGMEM = {cords(5, 0, 5), 0b11111000, 0b01000100, 0b01000100, 0b01000011, 0b11100000}; -const uint8_t font_a[] PROGMEM = {cords(5, 2, 3), 0b01100001, 0b01111001, 0b01100000}; +const uint8_t font_a[] PROGMEM = {cords(4, 2, 3), 0b01100001, 0b01111001, 0b01110000}; const uint8_t font_b[] PROGMEM = {cords(4, 0, 4), 0b10001000, 0b10001110, 0b10011001, 0b11100000}; const uint8_t font_c[] PROGMEM = {cords(3, 2, 2), 0b01110010, 0b01000110}; const uint8_t font_d[] PROGMEM = {cords(4, 0, 4), 0b00010001, 0b00010111, 0b10011001, 0b01110000}; @@ -76,9 +104,102 @@ const uint8_t font_x[] PROGMEM = {cords(3, 2, 2), 0b10110101, 0b01011 const uint8_t font_y[] PROGMEM = {cords(3, 2, 2), 0b10110101, 0b10011100}; const uint8_t font_z[] PROGMEM = {cords(3, 2, 2), 0b11100101, 0b01001110}; -const uint8_t* const font[] PROGMEM = { font_space, font_notdef, font_dot, font_comma, font_exclamation, font_question, - font_num0, font_num1, font_num2, font_num3, font_num4, font_num5, font_num6, font_num7, font_num8, font_num9, - font_A, font_a, font_B, font_b, font_C, font_c, font_D, font_d, font_E, font_e, font_F, font_f, font_G, font_g, - font_H, font_h, font_I, font_i, font_J, font_j, font_K, font_k, font_L, font_l, font_M, font_m, font_N, font_n, - font_O, font_o, font_P, font_p, font_Q, font_q, font_R, font_r, font_S, font_s, font_T, font_t, font_U, font_u, - font_V, font_v, font_W, font_w, font_X, font_x, font_Y, font_y, font_Z, font_z}; \ No newline at end of file +// Font dictionary Location Char Addres +const uint8_t* const font[] /*PROGMEM*/ = { font_notdef, // NONE NONE + font_space, // 32 + font_exclamation, //! 33 + font_quote, // " 34 + font_hashtag, // # 35 + font_promt, // $ 36 + font_percent, // % 37 + font_octopus, // & 38 + font_singlequote, //' 39 + font_bracketO, // ( 40 + font_bracketC, // ) 41 + font_multiply, // * 42 + font_plus, // + 43 + font_comma, // , 44 + font_minus, // - 45 + font_dot, // . 46 + font_slash, // / 47 + font_num0, // 0 48 + font_num1, // 1 49 + font_num2, // 2 50 + font_num3, // 3 51 + font_num4, // 4 52 + font_num5, // 5 53 + font_num6, // 6 54 + font_num7, // 7 55 + font_num8, // 8 56 + font_num9, // 9 57 + font_colon, // : 58 + font_semicolon, // ; 59 + font_less, // < 60 + font_equal, // = 61 + font_greater, // > 62 + font_question, // ? 63 + font_mail, // @ 64 + font_A, // A 65 + font_B, // B 66 + font_C, // C 67 + font_D, // D 68 + font_E, // E 69 + font_F, // F 70 + font_G, // G 71 + font_H, // H 72 + font_I, // I 73 + font_J, // J 74 + font_K, // K 75 + font_L, // L 76 + font_M, // M 77 + font_N, // N 78 + font_O, // O 79 + font_P, // P 80 + font_Q, // Q 81 + font_R, // R 82 + font_S, // S 83 + font_T, // T 84 + font_U, // U 85 + font_V, // V 86 + font_W, // W 87 + font_X, // X 88 + font_Y, // Y 89 + font_Z, // Z 90 + font_sbracketO, // [ 91 + font_bslash, // \ 92 + font_sbracketC, // ] 93 + font_caret, // ^ 94 + font_underscore, // _ 95 + font_grave, // ` 96 + font_a, // a 97 + font_b, // b 98 + font_c, // c 99 + font_d, // d 100 + font_e, // e 101 + font_f, // f 102 + font_g, // g 103 + font_h, // h 104 + font_i, // i 105 + font_j, // j 106 + font_k, // k 107 + font_l, // l 108 + font_m, // m 100 + font_n, // n 110 + font_o, // o 111 + font_p, // p 112 + font_q, // q 113 + font_r, // r 114 + font_s, // s 115 + font_t, // t 116 + font_u, // u 117 + font_v, // v 118 + font_w, // w 119 + font_x, // x 120 + font_y, // y 121 + font_z, // z 122 + font_fbracketO, // { 123 + font_pipe, // | 124 + font_fbracketC, // } 125 + font_tilda // ~ 126 +}; + \ No newline at end of file diff --git a/Dashboard/textbox.h b/Dashboard/textbox.h index c0384fe..10438c9 100644 --- a/Dashboard/textbox.h +++ b/Dashboard/textbox.h @@ -43,6 +43,7 @@ textbox::textbox(void) void textbox::setup(char _text[], uint8_t _mode, uint8_t _x, uint8_t _y, uint8_t _w, uint8_t _speed = 0, uint16_t _delay = 0) { + memset(text, NULL, 64 * sizeof(char)); strcpy(text, _text); mode = _mode; x = _x; @@ -76,7 +77,7 @@ void textbox::render(void) if(mode == TB_DISABLED) return; uint8_t index = 0; uint8_t position = 0; - while(position < 16) + while(position < 16 && index < strlen(text)) { getLetter(text[index]); uint8_t y = letter[1]; @@ -90,7 +91,13 @@ void textbox::render(void) uint8_t state = bitRead(letter[i + 3], j); //sprintf(sprf, "%d %d %d %d %d %d %d\n", index, letter[0], letter[1], letter[2], i, j, state); //Serial.print(sprf); - matrix.set(matrix.getPixNumber(x + position, y), mHSVfast((index + 1) * 10, 255, 255)); + if(state) matrix.set(x + position, 8 - y, mHSVfast((i + j + 1) * 10, 255, 255)); + // matrix.show(); + // volatile int val = 666; + // for(volatile int v = 0; v < 5000; v++) + // { + // val = sin(val); + // } x++; if(x >= maxX) { @@ -100,7 +107,7 @@ void textbox::render(void) } } BREAKFORS: - position += maxX; + position += maxX + 1; index++; } @@ -116,40 +123,14 @@ void textbox::getLetter(char c) memset(letter, 0, 8 * sizeof(uint8_t)); uint8_t index; uint8_t ctoi = (uint8_t)c; - if(ctoi >= 65 && ctoi <= 90) index = 16 + 2 * (ctoi - 65); - else if(ctoi >= 97 && ctoi <= 122) index = 17 + 2 * (ctoi - 97); - else if(ctoi >= 48 && ctoi <= 57) index = ctoi - 42; - else switch(ctoi) - { - case 32: - index = 0; - break; - case 46: - index = 2; - break; - case 44: - index = 3; - break; - case 33: - index = 4; - break; - case 63: - index = 5; - break; - default: - index = 1; - break; - } - Serial.println(index); - uint8_t readed = pgm_read_byte(font[index][0]); - Serial.println(readed); + if(ctoi >= 32 && ctoi <= 126) index = ctoi - 31; + else index = 0; + uint8_t readed = pgm_read_byte(font[index]); letter[0] = readed / 49 + 1; // width letter[1] = readed % 7; // offset letter[2] = readed / 7 % 7; // bytes for(uint8_t i = 0; i < letter[2]; i++) { - letter[i + 3] = pgm_read_byte(font[index][i + 1]); - Serial.println(letter[i + 3]); + letter[i + 3] = pgm_read_byte(font[index] + (i + 1) * sizeof(uint8_t)); } - Serial.println(); } \ No newline at end of file -- GitLab