Arduino8x8 Matrix

De 8x8 matrix is een enkel component waarin 64 LEDs zitten. Deze zijn ieder apart aan te spreken. Als we het los zouden hebben, dan zou ieder LEDje met 2 draden moeten worden aangesloten. Wat dan zou neerkomen op 128 draden. De Arduino heeft niet zoveel mogelijkheden.

Achterop de 8x8 matrix zitten 16 connectoren. 8 voor de rijen en 8 voor de kolommen.

Als je nu op de 1e rij op de laatste kolom stroom zou zetten, dan zou het laatste LEDje moeten gaan branden. Zet je dan stroom op de kolom ernaast, dan zou dan dus de LED ernaast moeten gaan branden.

Maar hoe kun je dan meerdere LEDs tegelijkertijd laten branden, vraag je je wellicht af? Hoe kan ik op rij4-kolom3 laten branden en verder alleen rij6-kolom3. Want als ik nu stroom zou zetten op rij4, rij6, kolom3 en kolom5, dan zouden de LEDs op rij4kolom3, rij4kolom5, rij6kolom3 en rij6kolom5 allemaal gaan branden. Dus 4 LEDs in plaats van de 2 LEDs die we willen.

Gelukkig zijn onze ogen langzaam. Wat we namelijk gaan doen is heel snel eventjes de LED in rij4-kolom3 aanzetten. En daarna heel eventjes de LED in rij6-kolom3. Asl we dat maar snel genoeg doen, dan heeft het oog niet in de gaten dat we van LED naar LED springen en lijkt het alsof alles aan is.



ArduinoFritz

Zie beschrijving in het project 8x8 LED Matrix



ArduinoSketch
/*
  8x8 segment LED, Display characters from text

  www.punthooft.nl
*/

// Define the pins for the rows
#define ROW_1 2
#define ROW_2 3
#define ROW_3 4
#define ROW_4 5
#define ROW_5 6
#define ROW_6 7
#define ROW_7 8
#define ROW_8 9

// Define the pins for the columns
#define COL_1 10
#define COL_2 11
#define COL_3 12
#define COL_4 13
#define COL_5 A0
#define COL_6 A1
#define COL_7 A2
#define COL_8 A3

// Bundle the rows and cols in arrays
const byte rows[] = { ROW_1, ROW_2, ROW_3, ROW_4, ROW_5, ROW_6, ROW_7, ROW_8 };
const byte cols[] = { COL_1,COL_2, COL_3, COL_4, COL_5, COL_6, COL_7, COL_8 };

// The alphabet
const byte alphabet[][8] = {
  {B00000000,B00000000,B00111000,B00000100,B00111100,B01000100,B00111100,B00000000},
  {B01000000,B01000000,B01000000,B01111000,B01000100,B01000100,B01111000,B00000000},
  {B00000000,B00000000,B00000000,B00111100,B01000000,B01000000,B00111100,B00000000},
  {B00000100,B00000100,B00000100,B00111100,B01000100,B01000100,B00111100,B00000000},
  {B00000000,B00000000,B00111100,B01000010,B01111100,B01000000,B00111100,B00000000},
  {B00111000,B01000100,B01000000,B01000000,B11110000,B01000000,B01000000,B00000000},
  {B00000000,B00000000,B00000000,B01111100,B01000100,B01111100,B00000100,B01111100},
  {B01000000,B01000000,B01000000,B01111000,B01000100,B01000100,B01000100,B00000000},
  {B00000000,B00100000,B00000000,B00100000,B00100000,B00100000,B00100000,B00000000},
  {B00000000,B00000100,B00000000,B00000100,B00000100,B00000100,B01000100,B00111000},
  {B01000000,B01000000,B01000100,B01001000,B01110000,B01001000,B01000100,B00000000},
  {B01000000,B01000000,B01000000,B01000000,B01000000,B01000000,B01111100,B00000000},
  {B00000000,B00000000,B00000000,B01101000,B01010100,B01010100,B01010100,B00000000},
  {B00000000,B00000000,B00000000,B01111000,B01000100,B01000100,B01000100,B00000000},
  {B00000000,B00000000,B00000000,B00111000,B01000100,B01000100,B00111000,B00000000},
  {B00000000,B00000000,B01111000,B01000100,B01000100,B01111000,B01000000,B01000000},
  {B00000000,B00000000,B00000000,B00111000,B01000100,B01000100,B00111100,B00000010},
  {B00000000,B00000000,B01111000,B01000100,B01111100,B01001000,B01000100,B00000000},
  {B00000000,B00000000,B00111100,B01000000,B01111100,B00000100,B01111000,B00000000},
  {B00000000,B01000000,B01000000,B01110000,B01000000,B01000100,B00111000,B00000000},
  {B00000000,B00000000,B00000000,B01000100,B01000100,B01000100,B00111100,B00000000},
  {B00000000,B00000000,B00000000,B01000100,B01000100,B00101000,B00010000,B00000000},
  {B00000000,B00000000,B00000000,B10010010,B10010010,B01010100,B00101000,B00000000},
  {B00000000,B00000000,B01000100,B00101000,B00010000,B00101000,B01000100,B00000000},
  {B00000000,B00000000,B01000100,B00101000,B00010000,B00010000,B00010000,B00000000},
  {B00000000,B00000000,B01111100,B00001000,B00010000,B00100000,B01111100,B00000000},
  {B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}, 
  {B10000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}, 
  {B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00100000,B00000000}  
};

int delayCounter;		// Speed
int digit;				// Current character
bool highlight;			// Set normal or inverted mode

String text;			// The text to be displayed
int i;					// General purpose counter

// Setup function runs once when powerup the board and on reset 
void setup() {

	// Set digital pins to OUTPUT
	for (i = 2; i <= 13; i++) {
		pinMode(i, OUTPUT);
	}

	// Set analog pins to OUTPUT    
	pinMode(A0, OUTPUT);
	pinMode(A1, OUTPUT);
	pinMode(A2, OUTPUT);
	pinMode(A3, OUTPUT);

	// Initialise
	delayCounter=0;
	digit = text.length();

	// Configure settings
	highlight = false;
	text = "WELKOM[OP[]HOOFT";		// SPACE = [   DOT = ]
}

// The loop function runs over and over again forever
void loop() {

	// Mechanism to slow down everything
	delayCounter++;
	delay(1);

	// When slow enough proceed
	if (delayCounter>100) {
		delayCounter=0;

		// Continue with next character
		digit++;

		// On end text start all over
		if (digit >= text.length() ) {
			digit=0;
		}
	}

	// Turn off LEDs or only display LEDs
	if (highlight) {
		drawScreenHighLight(alphabet[text[digit]-65]);
	} else {
		drawScreenLowLight(alphabet[text[digit]-65]);
	}
}

// Function for high light view
void drawScreenHighLight(byte buffer[]) { 

	// For each row
	for (int row=0; row<8;row++) {

		digitalWrite(rows[row], HIGH);    //initiate whole row

		// For each column
		for (int col=0; col<8; col++) {

			// Positive when row&col are set
			digitalWrite(cols[col], (buffer[row] >> col) & 0x01);

			// Delay in refres of matrix
			delayMicroseconds(100);

			// Reset column
			digitalWrite(cols[col], 1);
		}

	// Reset rows
	digitalWrite(rows[row], LOW);
	}
}

// Function for low light view
void drawScreenLowLight(byte buffer[]) { 

	// For each row
	for (int row=0; row<8;row++) {

		digitalWrite(rows[row], HIGH);    //initiate whole row

		// For each column
		for (int col=0; col<8; col++) {

			// Positive when row&col are set, so revert the value
			digitalWrite(cols[col], !((buffer[row] >> col) & 0x01));

			// Delay in refres of matrix
			delayMicroseconds(100);

			// Reset column
			digitalWrite(cols[col], 1);
		}

	// Reset rows
	digitalWrite(rows[row], LOW);
	}
}


ArduinoOpmerkingen

In de array staan de letters A tot en met Z. Plus ook een spatie, een punt en een 'puntje linksboven' character.

In de computerwereld gebruikt met de ASCII tabel om het alfabet te coderen. De letter A heeft daar de code 65. Vandaar dat is hierboven het magische getal 65 gebruik. Om vanaf een getal naar de letter te gaan en andersom.




Lees Verder in deze categorie

Copyright 2019 www.punthooft.nl

We do not collect cookies for advertisement. Your data is never send to third parties.