In this lesson we’re going to let a LED-Matrix showing a Smiley.
For that do we need:
- 1 Arduino
- 1 Breadboard
- 1 LED-Matrix 8×8 (e.g. SH1388ASR with common cathode or 1588BS with common anode)
- 8 220Ω Resistors
- 16 Jumper
Let’s start with the program code.
We have to tell the Arduino, on which pins the rows and columns have been connected. To make it in a simple way, we define an array and a for-loop, which defines the Arduino pins.
An array with content will be defined like this:
var_type var_name[size] = {val_0, val_1, val_2, val_n};
e.g.: int rows[8] = {10,18,9,13,2,8,3,6};
The const
before the variable type defines a constant variable. It helps the compiler to to compile the sketch in a better way.
You use the for-loop like this:
for(init counter; test counter; increment OR decrease counter)
{
//program code
}
For example (do things eight times, from zero to eight):
for(int i = 0; i < 8; i++)
{
//program code
}
That for-loop in a sentence means:
For
an int i
with 0
, while i < 8
, increase i plus one
, do
the program code.
Now we have to define a two dimensional array for our smiley (1 = on, 0 = off). It’s the same like a normal array, just with to indexes:
var_type var_name[size_row] [size_column] = {
{val_0, val_1, val_2, val_n}, /*row 0*/
{val_0, val_1, val_2, val_n}, /*row 1*/
{…}
};
In the loop()
method we have two for-loops in each other, to jump from row to row and from column to column.
//Pins, connected to the rows (220 Ohm resisor) const int rows[8] = {10,18,9,13,2,8,3,6}; // Pins, connected to the columns const int columns[8] = {19,4,5,11,7,12,17,16}; int smiley[8][8] = { {0,1,1,0,0,1,1,0}, {0,1,1,0,0,1,1,0}, {0,0,0,0,0,0,0,0}, {0,0,0,1,1,0,0,0}, {0,0,0,1,1,0,0,0}, {0,1,0,0,0,0,1,0}, {0,0,1,0,0,1,0,0}, {0,0,0,1,1,0,0,0}}; void setup() { Serial.begin(9600); //set the pins to output for (int pin = 0; pin < 8; pin++) { pinMode(rows[pin], OUTPUT); pinMode(columns[pin], OUTPUT); //all LEDs off digitalWrite(rows[pin], LOW); digitalWrite(columns[pin], LOW); } } void loop() { for (int row = 0; row < 8; row++) { for (int column = 0; column < 8; column++) { digitalWrite(rows[row],HIGH); digitalWrite(columns[column], !(smiley[row][column])); digitalWrite(rows[row],LOW); digitalWrite(columns[column],HIGH); } } }
To see, what your code is doing, you have to build your circuit. Do it according to the following scheme:
Source: http://mikrocontrollerkochbuch.de/index.php?title=Matrix-Modul_mit_8_x_8_LEDs_Version_1
⇐ Lesson #4 | Lesson #6 ⇒ |