Added very old code for driving a 5x7 dot matrix LED display

This commit is contained in:
Johannes Findeisen 2015-09-10 03:29:00 +02:00
commit 3a53fb0805
2 changed files with 458 additions and 0 deletions

233
Matrix/MatrixFonts3x5.h Normal file
View file

@ -0,0 +1,233 @@
#define A { \
{0,0,0,0,0,0,0}, \
{0,1,1,1,1,0,0}, \
{0,0,0,1,0,1,0}, \
{0,1,1,1,1,0,0}, \
{0,0,0,0,0,0,0} \
}
#define B { \
{0,0,0,0,0,0,0}, \
{0,1,1,1,1,1,0}, \
{0,1,0,1,0,1,0}, \
{0,0,1,0,1,0,0}, \
{0,0,0,0,0,0,0} \
}
#define C { \
{0,0,0,0,0,0,0}, \
{0,0,1,1,1,0,0}, \
{0,1,0,0,0,1,0}, \
{0,0,1,0,1,0,0}, \
{0,0,0,0,0,0,0} \
}
#define D { \
{0,0,0,0,0,0,0}, \
{0,1,1,1,1,1,0}, \
{0,1,0,0,0,1,0}, \
{0,0,1,1,1,0,0}, \
{0,0,0,0,0,0,0} \
}
#define E { \
{0,0,0,0,0,0,0}, \
{0,1,1,1,1,1,0}, \
{0,1,0,1,0,1,0}, \
{0,1,0,0,0,1,0}, \
{0,0,0,0,0,0,0} \
}
#define F { \
{0,0,0,0,0,0,0}, \
{0,1,1,1,1,1,0}, \
{0,0,0,1,0,1,0}, \
{0,0,0,0,0,1,0}, \
{0,0,0,0,0,0,0} \
}
#define G { \
{0,0,0,0,0,0,0}, \
{0,1,1,1,1,1,0}, \
{0,1,0,1,0,1,0}, \
{0,1,1,1,0,1,0}, \
{0,0,0,0,0,0,0} \
}
#define H { \
{0,0,0,0,0,0,0}, \
{0,1,1,1,1,1,0}, \
{0,0,0,1,0,0,0}, \
{0,1,1,1,1,1,0}, \
{0,0,0,0,0,0,0} \
}
#define I { \
{0,0,0,0,0,0,0}, \
{0,0,0,0,0,0,0}, \
{0,1,1,1,1,1,0}, \
{0,0,0,0,0,0,0}, \
{0,0,0,0,0,0,0} \
}
#define J { \
{0,0,0,0,0,0,0}, \
{0,0,1,1,0,0,0}, \
{0,1,0,0,0,0,0}, \
{0,0,1,1,1,1,0}, \
{0,0,0,0,0,0,0} \
}
#define K { \
{0,0,0,0,0,0,0}, \
{0,1,1,1,1,1,0}, \
{0,0,0,1,0,0,0}, \
{0,1,1,0,1,1,0}, \
{0,0,0,0,0,0,0} \
}
#define L { \
{0,0,0,0,0,0,0}, \
{0,1,1,1,1,1,0}, \
{0,1,0,0,0,0,0}, \
{0,1,0,0,0,0,0}, \
{0,0,0,0,0,0,0} \
}
#define M { \
{0,0,0,0,0,0,0}, \
{0,1,1,1,1,1,0}, \
{0,0,0,0,1,0,0}, \
{0,1,1,1,1,1,0}, \
{0,0,0,0,0,0,0} \
}
#define N { \
{0,0,0,0,0,0,0}, \
{0,1,1,1,1,1,0}, \
{0,0,1,1,1,0,0}, \
{0,1,1,1,1,1,0}, \
{0,0,0,0,0,0,0} \
}
#define O { \
{0,0,0,0,0,0,0}, \
{0,1,1,1,1,1,0}, \
{0,1,0,0,0,1,0}, \
{0,1,1,1,1,1,0}, \
{0,0,0,0,0,0,0} \
}
#define P { \
{0,0,0,0,0,0,0}, \
{0,1,1,1,1,1,0}, \
{0,0,0,1,0,1,0}, \
{0,0,0,1,1,1,0}, \
{0,0,0,0,0,0,0} \
}
#define Q { \
{0,0,0,0,0,0,0}, \
{0,1,1,1,1,1,0}, \
{0,1,0,0,0,1,0}, \
{0,0,1,1,1,1,0}, \
{0,0,0,0,0,0,0} \
}
#define R { \
{0,0,0,0,0,0,0}, \
{0,1,1,1,1,1,0}, \
{0,0,1,1,0,1,0}, \
{0,1,0,1,1,1,0}, \
{0,0,0,0,0,0,0} \
}
#define S { \
{0,0,0,0,0,0,0}, \
{0,1,0,0,1,0,0}, \
{0,1,0,1,0,1,0}, \
{0,0,1,0,0,1,0}, \
{0,0,0,0,0,0,0} \
}
#define T { \
{0,0,0,0,0,0,0}, \
{0,0,0,0,0,1,0}, \
{0,1,1,1,1,1,0}, \
{0,0,0,0,0,1,0}, \
{0,0,0,0,0,0,0} \
}
#define U { \
{0,0,0,0,0,0,0}, \
{0,1,1,1,1,1,0}, \
{0,1,0,0,0,0,0}, \
{0,1,1,1,1,1,0}, \
{0,0,0,0,0,0,0} \
}
#define V { \
{0,0,0,0,0,0,0}, \
{0,0,1,1,1,1,0}, \
{0,1,0,0,0,0,0}, \
{0,0,1,1,1,1,0}, \
{0,0,0,0,0,0,0} \
}
#define W { \
{0,0,0,0,0,0,0}, \
{0,1,1,1,1,1,0}, \
{0,0,1,0,0,0,0}, \
{0,1,1,1,1,1,0}, \
{0,0,0,0,0,0,0} \
}
#define X { \
{0,0,0,0,0,0,0}, \
{0,1,1,0,1,1,0}, \
{0,0,0,1,0,0,0}, \
{0,1,1,0,1,1,0}, \
{0,0,0,0,0,0,0} \
}
#define Y { \
{0,0,0,0,0,0,0}, \
{0,0,0,0,1,1,0}, \
{0,1,1,1,0,0,0}, \
{0,0,0,0,1,1,0}, \
{0,0,0,0,0,0,0} \
}
#define Z { \
{0,0,0,0,0,0,0}, \
{0,1,0,0,1,1,0}, \
{0,1,0,1,0,1,0}, \
{0,1,1,0,0,1,0}, \
{0,0,0,0,0,0,0} \
}
#define DASH { \
{0,0,0,0,0,0,0}, \
{0,0,0,1,0,0,0}, \
{0,0,0,1,0,0,0}, \
{0,0,0,1,0,0,0}, \
{0,0,0,0,0,0,0} \
}
#define SPACE { \
{0,0,0,0,0,0,0}, \
{0,0,0,0,0,0,0}, \
{0,0,0,0,0,0,0}, \
{0,0,0,0,0,0,0}, \
{0,0,0,0,0,0,0} \
}
#define DOT { \
{0,0,0,0,0,0,0}, \
{0,1,0,0,0,0,0}, \
{0,0,0,0,0,0,0}, \
{0,0,0,0,0,0,0}, \
{0,0,0,0,0,0,0} \
}

225
Matrix/matrix.pde Normal file
View file

@ -0,0 +1,225 @@
#include <TimerOne.h>
#include <MatrixFonts3x5.h>
#define COLS 5
#define ROWS 7
#define PINS 13
#define MATRIX1 { \
{1,0,1,0,1,0,1}, \
{0,1,0,1,0,1,0}, \
{1,0,1,0,1,0,1}, \
{0,1,0,1,0,1,0}, \
{1,0,1,0,1,0,1} \
}
#define MATRIX2 { \
{0,1,0,1,0,1,0}, \
{1,0,1,0,1,0,1}, \
{0,1,0,1,0,1,0}, \
{1,0,1,0,1,0,1}, \
{0,1,0,1,0,1,0} \
}
byte col = 0;
byte leds[COLS][ROWS];
// pin[xx] on led matrix connected to nn on Arduino (-1 is dummy to make array start at pos 1)
int pins[PINS]= {-1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
// col[xx] of leds = pin yy on led matrix
int cols[COLS] = {pins[1], pins[3], pins[10], pins[7], pins[8]};
// row[xx] of leds = pin yy on led matrix
int rows[ROWS] = {pins[12], pins[11], pins[2], pins[9], pins[4], pins[5], pins[6]};
const int numPatterns = 14;
byte patterns[numPatterns][COLS][ROWS] = {H,A,L,L,O,DASH,W,E,L,T,DOT,DOT,DOT,SPACE};
int pattern = 0;
void setup() {
//Serial.begin(9600);
// sets the pins as output
for (int i = 0; i < PINS; i++) {
pinMode(pins[i], OUTPUT);
}
// set up cols
for (int i = 1; i <= COLS; i++) {
digitalWrite(cols[i - 1], 0);
}
// and rows
for (int i = 1; i <= ROWS; i++) {
digitalWrite(rows[i - 1], 1);
}
blink();
five2one();
clearLeds();
Timer1.initialize(2000); // initialize timer1, and set a 1/2 second period
Timer1.attachInterrupt(display); // attaches display() as a timer overflow interrupt
setPattern(pattern);
}
void loop() {
pattern = ++pattern % numPatterns;
slidePattern(pattern, 180);
}
// Interrupt routine
void display() {
digitalWrite(cols[col], 0); // Turn whole previous column off
col++;
if (col == 5) {
col = 0;
}
for (int row = 0; row < 7; row++) {
if (leds[col][(ROWS - 1) - row] == 1) {
digitalWrite(rows[row], 0); // Turn on this led
}
else {
digitalWrite(rows[row], 1); // Turn off this led
}
// delay(10);
}
digitalWrite(cols[col], 1); // Turn whole column on at once (for equal lighting times)
}
void slidePattern(int pattern, int del) {
for (int l = 0; l < COLS; l++) {
for (int i = 0; i < (COLS - 1); i++) {
for (int j = 0; j < ROWS; j++) {
leds[i][j] = leds[i + 1][j];
}
}
for (int j = 0; j < ROWS; j++) {
leds[4][j] = patterns[pattern][0 + l][j];
}
delay(del);
}
}
void clearLeds() {
// Clear display array
for (int i = 0; i < COLS; i++) {
for (int j = 0; j < ROWS; j++) {
leds[i][j] = 0;
}
}
}
void setPattern(int pattern) {
for (int i = 0; i < COLS; i++) {
for (int j = 0; j < ROWS; j++) {
leds[i][j] = patterns[pattern][i][j];
}
}
}
void blink() {
for(int i = 0; i < 12; i++) {
if(i % 2 != 0) {
digitalWrite(cols[0], 1);
digitalWrite(cols[1], 0);
digitalWrite(cols[2], 0);
digitalWrite(cols[3], 0);
digitalWrite(cols[4], 0);
digitalWrite(rows[0], 0);
digitalWrite(rows[1], 1);
digitalWrite(rows[2], 1);
digitalWrite(rows[3], 1);
digitalWrite(rows[4], 1);
digitalWrite(rows[5], 1);
digitalWrite(rows[6], 1);
} else {
digitalWrite(cols[0], 0);
digitalWrite(cols[1], 0);
digitalWrite(cols[2], 0);
digitalWrite(cols[3], 0);
digitalWrite(cols[4], 0);
digitalWrite(rows[0], 1);
digitalWrite(rows[1], 1);
digitalWrite(rows[2], 1);
digitalWrite(rows[3], 1);
digitalWrite(rows[4], 1);
digitalWrite(rows[5], 1);
digitalWrite(rows[6], 1);
}
delay(100);
}
}
void five2one() {
digitalWrite(cols[0], 1);
digitalWrite(cols[1], 0);
digitalWrite(cols[2], 0);
digitalWrite(cols[3], 0);
digitalWrite(cols[4], 0);
digitalWrite(rows[0], 0);
digitalWrite(rows[1], 1);
digitalWrite(rows[2], 1);
digitalWrite(rows[3], 1);
digitalWrite(rows[4], 1);
digitalWrite(rows[5], 1);
digitalWrite(rows[6], 1);
delay(100);
digitalWrite(cols[0], 0);
digitalWrite(cols[1], 1);
digitalWrite(cols[2], 0);
digitalWrite(cols[3], 0);
digitalWrite(cols[4], 0);
digitalWrite(rows[0], 0);
digitalWrite(rows[1], 1);
digitalWrite(rows[2], 1);
digitalWrite(rows[3], 1);
digitalWrite(rows[4], 1);
digitalWrite(rows[5], 1);
digitalWrite(rows[6], 1);
delay(100);
digitalWrite(cols[0], 0);
digitalWrite(cols[1], 0);
digitalWrite(cols[2], 1);
digitalWrite(cols[3], 0);
digitalWrite(cols[4], 0);
digitalWrite(rows[0], 0);
digitalWrite(rows[1], 1);
digitalWrite(rows[2], 1);
digitalWrite(rows[3], 1);
digitalWrite(rows[4], 1);
digitalWrite(rows[5], 1);
digitalWrite(rows[6], 1);
delay(100);
digitalWrite(cols[0], 0);
digitalWrite(cols[1], 0);
digitalWrite(cols[2], 0);
digitalWrite(cols[3], 1);
digitalWrite(cols[4], 0);
digitalWrite(rows[0], 0);
digitalWrite(rows[1], 1);
digitalWrite(rows[2], 1);
digitalWrite(rows[3], 1);
digitalWrite(rows[4], 1);
digitalWrite(rows[5], 1);
digitalWrite(rows[6], 1);
delay(100);
digitalWrite(cols[0], 0);
digitalWrite(cols[1], 0);
digitalWrite(cols[2], 0);
digitalWrite(cols[3], 0);
digitalWrite(cols[4], 1);
digitalWrite(rows[0], 0);
digitalWrite(rows[1], 1);
digitalWrite(rows[2], 1);
digitalWrite(rows[3], 1);
digitalWrite(rows[4], 1);
digitalWrite(rows[5], 1);
digitalWrite(rows[6], 1);
delay(100);
}