Már egy jó ideje küzdök a következő dologgal:
AVR-Duino-val szeretnék egy 8x8-as, egyszínű LED matrixot vezérelni.
Ehhez az alapelvet innen szedtem: http://www.arduino.cc/en/Tutorial/ShiftOut
a kijelző pedig ez: http://futurlec.com/LED/LEDM88G.shtml
Egy próbapanelre tehát felraktam a következőket:
-2 db 74HC595 léptetőregiszter (x és y tengely), a 12-es (ST_CP) lábaknál 1-1 22p-s kondenzátor az Arduino-s cikk alapján
-valamint a LED matrix-ot
a programom pedig a következő:
Kód: Egész kijelölése
// for X axis
byte x_ST_CLOCK = 2; // to IC#1 ST_CP/RCK (pin 12) latch
byte x_CLOCK = 3; // to IC#1 SH_CP/SCK (pin 11), clock
byte x_SER_IN = 4; // to IC#1 DS/SER (pin 14), data
// for Y axis
byte y_ST_CLOCK = 8; // to IC#2 ST_CP/RCK (pin 12)
byte y_CLOCK = 9; // to IC#2 SH_CP/SCK (pin 11)
byte y_SER_IN = 10; // to IC#2 DS/SER (pin 14)
byte LedArr[8][8] = {
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,0,1,0,0,1,0,0},
{0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0},
{0,1,0,0,0,0,1,0},
{0,0,1,1,1,1,0,0},
{0,0,0,0,0,0,0,0}};
byte columns[8] = {
B01111111,
B10111111,
B11011111,
B11101111,
B11110111,
B11111011,
B11111101,
B11111110};
void setup() {
pinMode(x_ST_CLOCK, OUTPUT);
pinMode(x_CLOCK, OUTPUT);
pinMode(x_SER_IN, OUTPUT);
pinMode(y_ST_CLOCK, OUTPUT);
pinMode(y_CLOCK, OUTPUT);
pinMode(y_SER_IN, OUTPUT);
}
void loop() {
RefreshScreen();
}
void RefreshScreen() {
byte rowbin;
byte sum;
for (byte cols=0; cols<8; cols++) {
sum = 0;
for (byte rows=0; rows<8; rows++) {
if (LedArr[rows][cols] == 1) {
rowbin = 1 << rows;
sum = sum + rowbin;
digitalWrite(x_ST_CLOCK, LOW);
shiftOut(x_SER_IN, x_CLOCK, MSBFIRST, columns[cols]);
digitalWrite(x_ST_CLOCK, HIGH);
digitalWrite(y_ST_CLOCK, LOW);
shiftOut(y_SER_IN, y_CLOCK, MSBFIRST, rowbin);
digitalWrite(y_ST_CLOCK, HIGH);
}
}
}
}
nem csak azok a led-ek világítanak, melyek a LedArr matrix-ban egyessel vannak jelölve, hanem néhány, közvetlenül mellettük levő is.
és ezt nem tudom, hogyan küszöbölhetném ki, már legalább négyszer újraírtam a programomat...
Segítségeteket előre is köszönöm!
