diff --git a/src/font.h b/src/font.h index ec4ff43..c17c908 100644 --- a/src/font.h +++ b/src/font.h @@ -17,7 +17,7 @@ const uint8_t font_5x7_col[128][5] PROGMEM = { { 0x10, 0x18, 0x1C, 0x18, 0x10 }, // { 0x00, 0x3E, 0x1C, 0x08, 0x00 }, // { 0x00, 0x08, 0x1C, 0x3E, 0x00 }, // - { 0x04, 0x0C, 0x1C, 0x0C, 0x04 }, // + { 0x02, 0x55, 0x15, 0x55, 0x0F }, // (รค) { 0x7F, 0x00, 0x00, 0x00, 0x00 }, // (1 col left) { 0x7F, 0x7F, 0x00, 0x00, 0x00 }, // (2 col left) { 0x7F, 0x7F, 0x7F, 0x00, 0x00 }, // (3 col left) diff --git a/src/main.cpp b/src/main.cpp index 5dbe7ef..f063cec 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -19,32 +19,51 @@ void shiftout(uint8_t bit) PORTB = 0; } +uint8_t buffer[120]; + +void write_letter_at(int startcol, uint8_t letter) { + for (int8_t x = 0; x < 5; x++) { + if (startcol + x >= 0 && startcol + x < width) { + buffer[startcol + x] = pgm_read_byte_near(&font_5x7_col[letter][x]); + } + } +} + void setup() { for (uint8_t i = 2; i <= 10; i++) { pinMode(i, OUTPUT); } pinMode(13, OUTPUT); + + write_letter_at(0, 'H'); + write_letter_at(6, 'i'); + write_letter_at(12, '!'); } -char *message = "Hello world! "; +const char *message = "N\x0f""chster Halt: Kronenplatz"; + +void letters(int round) { + for (int i = 0; i < width; i++) { + buffer[i] = 0; + } + + int pos = 0; + for (unsigned c = 0; c < strlen(message); c++) { + write_letter_at(round + pos, message[c]); + pos += 6; + } +} + +int ticks = 0; +int runde = 120; void loop() { for (uint8_t y = 0; y < lines; y++) { - uint8_t letter = 0; - uint8_t lettercol = 0; for (uint8_t x = 0; x < width; x++) { - if (lettercol == 5) { - lettercol = 0; - letter++; - shiftout(0); - } else { - uint8_t col = pgm_read_byte_near(&font_5x7_col[message[letter]][lettercol]); - uint8_t bit = (col & (1 << y)) ? 1 : 0; - shiftout(bit); - lettercol++; - } + uint8_t bit = (buffer[x] & (1 << y)) ? 1 : 0; + shiftout(bit); } digitalWrite(13, 1); @@ -53,4 +72,16 @@ void loop() digitalWrite(13, 0); digitalWrite(line_pins[y], 0); } + + ticks++; + if (ticks == 8) { + ticks = 0; + runde--; + + letters(runde); + + if (runde == -(6 * (int)strlen(message))) { + runde = 120; + } + } }