Static message display

This commit is contained in:
Andreas Fried 2019-01-06 00:37:22 +01:00
commit d9589b49de
6 changed files with 317 additions and 0 deletions

135
src/font.h Normal file
View file

@ -0,0 +1,135 @@
#ifndef FONT_H
#define FONT_H
const uint8_t font_5x7_col[128][5] PROGMEM = {
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, //
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, //
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, //
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, //
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, //
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, //
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, //
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, //
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, //
{ 0x03, 0x07, 0x7E, 0x20, 0x1C }, //
{ 0x60, 0x66, 0x09, 0x09, 0x09 }, //
{ 0x60, 0x6F, 0x0A, 0x0A, 0x08 }, //
{ 0x10, 0x18, 0x1C, 0x18, 0x10 }, //
{ 0x00, 0x3E, 0x1C, 0x08, 0x00 }, //
{ 0x00, 0x08, 0x1C, 0x3E, 0x00 }, //
{ 0x04, 0x0C, 0x1C, 0x0C, 0x04 }, //
{ 0x7F, 0x00, 0x00, 0x00, 0x00 }, // (1 col left)
{ 0x7F, 0x7F, 0x00, 0x00, 0x00 }, // (2 col left)
{ 0x7F, 0x7F, 0x7F, 0x00, 0x00 }, // (3 col left)
{ 0x7F, 0x7F, 0x7F, 0x7F, 0x00 }, // (4 col left)
{ 0x7F, 0x7F, 0x7F, 0x7F, 0x7F }, // (solid fill)
{ 0x00, 0x7F, 0x7F, 0x7F, 0x7F }, // (4 col right)
{ 0x00, 0x00, 0x7F, 0x7F, 0x7F }, // (3 col right)
{ 0x00, 0x00, 0x00, 0x7F, 0x7F }, // (2 col right)
{ 0x00, 0x00, 0x00, 0x00, 0x7F }, // (1 col right)
{ 0x03, 0x07, 0x7E, 0x20, 0x1C }, // (music note)
{ 0x60, 0x66, 0x09, 0x09, 0x09 }, // (deg c)
{ 0x60, 0x6F, 0x0A, 0x0A, 0x08 }, // (deg f)
{ 0x10, 0x18, 0x1C, 0x18, 0x10 }, // (triangle down)
{ 0x00, 0x3E, 0x1C, 0x08, 0x00 }, // (triangle right)
{ 0x00, 0x08, 0x1C, 0x3E, 0x00 }, // (triangle left)
{ 0x04, 0x0C, 0x1C, 0x0C, 0x04 }, // (triangle up)
{ 0x00, 0x00, 0x00, 0x00, 0x00 }, // (space)
{ 0x00, 0x7D, 0x00, 0x00, 0x00 }, // (!)
{ 0x00, 0x70, 0x00, 0x70, 0x00 }, // (")
{ 0x14, 0x7F, 0x14, 0x7F, 0x14 }, // (#)
{ 0x12, 0x2A, 0x7F, 0x2A, 0x24 }, // ($)
{ 0x62, 0x64, 0x08, 0x13, 0x23 }, // (%)
{ 0x36, 0x49, 0x35, 0x02, 0x05 }, // (&)
{ 0x00, 0x50, 0x60, 0x00, 0x00 }, // (')
{ 0x00, 0x1C, 0x22, 0x41, 0x00 }, // (()
{ 0x00, 0x41, 0x22, 0x1C, 0x00 }, // ())
{ 0x44, 0x28, 0x7C, 0x28, 0x44 }, // (*)
{ 0x08, 0x08, 0x7F, 0x08, 0x08 }, // (+)
{ 0x05, 0x06, 0x00, 0x00, 0x00 }, // (,)
{ 0x08, 0x08, 0x08, 0x00, 0x00 }, // (-)
{ 0x00, 0x03, 0x03, 0x00, 0x00 }, // (.)
{ 0x02, 0x04, 0x08, 0x10, 0x20 }, // (/)
{ 0x3E, 0x45, 0x49, 0x51, 0x3E }, // (0)
{ 0x00, 0x21, 0x7F, 0x01, 0x00 }, // (1)
{ 0x21, 0x43, 0x45, 0x49, 0x31 }, // (2)
{ 0x42, 0x41, 0x51, 0x69, 0x46 }, // (3)
{ 0x0C, 0x14, 0x24, 0x7F, 0x04 }, // (4)
{ 0x72, 0x51, 0x51, 0x51, 0x4E }, // (5)
{ 0x1E, 0x29, 0x49, 0x49, 0x06 }, // (6)
{ 0x43, 0x44, 0x48, 0x50, 0x60 }, // (7)
{ 0x36, 0x49, 0x49, 0x49, 0x36 }, // (8)
{ 0x30, 0x49, 0x49, 0x4A, 0x3C }, // (9)
{ 0x00, 0x36, 0x36, 0x00, 0x00 }, // (:)
{ 0x00, 0x35, 0x36, 0x00, 0x00 }, // (;)
{ 0x08, 0x14, 0x22, 0x41, 0x00 }, // (<)
{ 0x14, 0x14, 0x14, 0x14, 0x14 }, // (=)
{ 0x41, 0x22, 0x14, 0x08, 0x00 }, // (>)
{ 0x20, 0x40, 0x45, 0x48, 0x30 }, // (?)
{ 0x3E, 0x41, 0x4D, 0x51, 0x36 }, // (@)
{ 0x3F, 0x48, 0x48, 0x48, 0x3F }, // (A)
{ 0x7F, 0x49, 0x49, 0x49, 0x36 }, // (B)
{ 0x3E, 0x41, 0x41, 0x41, 0x22 }, // (C)
{ 0x7F, 0x41, 0x41, 0x41, 0x3E }, // (D)
{ 0x7F, 0x49, 0x49, 0x49, 0x41 }, // (E)
{ 0x7F, 0x48, 0x48, 0x48, 0x40 }, // (F)
{ 0x3E, 0x41, 0x49, 0x49, 0x2E }, // (G)
{ 0x7F, 0x08, 0x08, 0x08, 0x7F }, // (H)
{ 0x00, 0x41, 0x7F, 0x41, 0x00 }, // (I)
{ 0x02, 0x01, 0x41, 0x7E, 0x40 }, // (J)
{ 0x7F, 0x08, 0x14, 0x22, 0x41 }, // (K)
{ 0x7F, 0x01, 0x01, 0x01, 0x01 }, // (L)
{ 0x7F, 0x20, 0x18, 0x20, 0x7F }, // (M)
{ 0x7F, 0x10, 0x08, 0x04, 0x7F }, // (N)
{ 0x3E, 0x41, 0x41, 0x41, 0x3E }, // (O)
{ 0x7F, 0x48, 0x48, 0x48, 0x30 }, // (P)
{ 0x3E, 0x41, 0x45, 0x42, 0x3D }, // (Q)
{ 0x7F, 0x48, 0x4C, 0x4A, 0x31 }, // (R)
{ 0x31, 0x49, 0x49, 0x49, 0x46 }, // (S)
{ 0x40, 0x40, 0x7F, 0x40, 0x40 }, // (T)
{ 0x7E, 0x01, 0x01, 0x01, 0x7E }, // (U)
{ 0x7C, 0x02, 0x01, 0x02, 0x7C }, // (V)
{ 0x7E, 0x01, 0x06, 0x01, 0x7E }, // (W)
{ 0x63, 0x14, 0x08, 0x14, 0x63 }, // (X)
{ 0x70, 0x08, 0x07, 0x08, 0x70 }, // (Y)
{ 0x43, 0x45, 0x49, 0x51, 0x61 }, // (Z)
{ 0x00, 0x7F, 0x41, 0x41, 0x00 }, // ([)
{ 0x20, 0x10, 0x08, 0x04, 0x02 }, // (\)
{ 0x00, 0x41, 0x41, 0x7F, 0x00 }, // (])
{ 0x10, 0x20, 0x40, 0x20, 0x10 }, // (^)
{ 0x01, 0x01, 0x01, 0x01, 0x01 }, // (_)
{ 0x00, 0x40, 0x20, 0x10, 0x00 }, // (`)
{ 0x02, 0x15, 0x15, 0x15, 0x0F }, // (a)
{ 0x7F, 0x09, 0x11, 0x11, 0x0E }, // (b)
{ 0x0E, 0x11, 0x11, 0x11, 0x02 }, // (c)
{ 0x0E, 0x11, 0x11, 0x09, 0x7F }, // (d)
{ 0x0E, 0x15, 0x15, 0x15, 0x0C }, // (e)
{ 0x08, 0x3F, 0x48, 0x40, 0x20 }, // (f)
{ 0x18, 0x25, 0x25, 0x25, 0x3E }, // (g)
{ 0x7F, 0x08, 0x10, 0x10, 0x0F }, // (h)
{ 0x00, 0x11, 0x5F, 0x01, 0x00 }, // (i)
{ 0x02, 0x01, 0x11, 0x5E, 0x00 }, // (j)
{ 0x7F, 0x04, 0x0A, 0x11, 0x00 }, // (k)
{ 0x00, 0x41, 0x7F, 0x01, 0x00 }, // (l)
{ 0x1F, 0x10, 0x0C, 0x10, 0x0F }, // (m)
{ 0x1F, 0x08, 0x10, 0x10, 0x0F }, // (n)
{ 0x0E, 0x11, 0x11, 0x11, 0x0E }, // (o)
{ 0x1F, 0x14, 0x14, 0x14, 0x08 }, // (p)
{ 0x08, 0x14, 0x14, 0x14, 0x0F }, // (q)
{ 0x1F, 0x08, 0x10, 0x10, 0x08 }, // (r)
{ 0x09, 0x15, 0x15, 0x15, 0x02 }, // (s)
{ 0x10, 0x7E, 0x11, 0x01, 0x02 }, // (t)
{ 0x1E, 0x01, 0x01, 0x02, 0x1F }, // (u)
{ 0x1C, 0x02, 0x01, 0x02, 0x1C }, // (v)
{ 0x1E, 0x01, 0x02, 0x01, 0x1E }, // (w)
{ 0x11, 0x0A, 0x04, 0x0A, 0x11 }, // (x)
{ 0x18, 0x05, 0x05, 0x05, 0x1E }, // (y)
{ 0x11, 0x13, 0x15, 0x19, 0x11 }, // (z)
{ 0x08, 0x36, 0x41, 0x00, 0x00 }, // ({)
{ 0x00, 0x00, 0x7F, 0x00, 0x00 }, // (|)
{ 0x00, 0x00, 0x41, 0x36, 0x08 }, // (})
{ 0x08, 0x08, 0x2A, 0x1C, 0x08 }, // (arrow right)
{ 0x08, 0x1C, 0x2A, 0x08, 0x08 }, // (arrow left)
};
#endif

56
src/main.cpp Normal file
View file

@ -0,0 +1,56 @@
#include <Arduino.h>
#include <avr/cpufunc.h>
#include <avr/pgmspace.h>
#include "font.h"
const int width = 120;
const int lines = 7;
const int line_pins[7] = { 2, 3, 4, 5, 6, 7, 8 };
// Shift register needs to use raw AVR
// B1 is clock
// B2 is data
void shiftout(uint8_t bit)
{
PORTB = bit << 2;
PORTB |= 0x02;
PORTB = 0;
}
void setup()
{
for (uint8_t i = 2; i <= 10; i++) {
pinMode(i, OUTPUT);
}
pinMode(13, OUTPUT);
}
char *message = "Hello world! ";
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++;
}
}
digitalWrite(13, 1);
digitalWrite(line_pins[y], 1);
delayMicroseconds(200);
digitalWrite(13, 0);
digitalWrite(line_pins[y], 0);
}
}