@wtFAQ
◀ Ultrazvučni senzor i zvuk3. Arduino programiranje ▶

LED matrica 8 x 8

LED matrica 8 x 8

LED matrica 8 x 8

LED matrica 8x8 je elektronički prikaz od 64 LED diode raspoređene u osam redaka i osam stupaca. Takva matrica služi za prikazivanje znakova, brojeva, animacija ili drugih uzoraka – Svaka LED dioda ima svoju poziciju na presjeku određenog retka i stupca.

shema spoja LED matrice

Kako se kontrolira LED matrica?

Da bi se upravljalo svih 64 LED dioda, matrica se povezuje tako da se na Arduino spaja 16 pinova (osam za redove, osam za stupce). Upravljanje se temelji na multiplexiranju: Arduino brzo i redom uključuje pojedine retke i stupce, pa se čini kao da su istovremeno uključene više LED dioda. Za više LED istovremeno i jednostavno upravljanje, često se koristi upravljački IC poput MAX7219 – tada se matrica može kontrolirati sa samo tri do pet Arduino pinova, uz pomoć SPI komunikacije i posebne biblioteke.

Metode kontrole LED matrice

  • Izravno upravljanje redovima i stupcima: Povezuješ svih 16 pinova matrice na digitalne izlaze Arduina. Programski upravljaš logičkim stanjima (HIGH / LOW) na redovima i stupcima kako bi uključio ili isključio pojedine LED diode; ovo može biti zahtjevno kad želiš prikazivati kompleksne uzorke.
  • ​Korištenje drivera (MAX7219, TM1637…): S driverom, sve LED diode možeš kontrolirati puno jednostavnije. Arduino šalje naredbe upravljačkom čipu, koji samostalno multiplexira redove i stupce prema tvojim zahtjevima. Često se koristi biblioteka kao što je LedControl ili Adafruit GFX da bi se crtali znakovi i animacije.
  • ​Kombinacija programskih funkcija i gotovih biblioteka: Kroz funkcije možeš definirati obrasce (npr. slovo, broj ili animaciju) koje se zatim prikazuju na matrici, pozivom funkcije za osvjetljavanje određenih LEDova ili cijelih redaka/stupaca.
    ​ Zadatak: 16 pinova sa LED matrice su spojeni na 16 pinova na Arduinu. Četiri od analognih pinova se koriste kao digitalni ulazi 16-19. Redoslijed pinova je dodijeljen preko dva niza u kodu.

Dva potenciometra su spojena na analogne ulaze A0 i A1, a preko njih se kontrlira koliko će se LED-ova upaliti.

Da LED matrica ne bi pregorila, dodaj 8 otpornika od 1 kΩ na anode LED-ova, kako je prikazano na slici.

Vježba 2.3

LED 8x8 matrica
Matrix pin Red Kolona Arduino pin
1 5 - 13
2 7 - 12
3 - 2 11
4 - 3 10
5 8 - 16 (analog pin 2)
6 - 5 17 (analog pin 3)
7 6 - 18 (analog pin 4)
8 3 - 19 (analog pin 5)
9 1 - 2
10 - 4 3
11 - 6 4
12 4 - 5
13 - 1 6
14 2 - 7
15 - 7 8
16 - 8 9
// C++
const int row[8] = {  2,  7, 19,  5, 13, 18, 12, 16 };
const int col[8] = {  6, 11, 10,  3, 17,  4,  8,  9 };
int pixels[8][8];

int x = 5;
int y = 5;

void setup() {
  Serial.begin(9600);
  for (int thisPin = 0; thisPin < 8; thisPin++) {
    pinMode(col[thisPin], OUTPUT);
    pinMode(row[thisPin], OUTPUT);

    digitalWrite(col[thisPin], HIGH);
  }

  // inicijalizacija pixel matrice:
  for (int x = 0; x < 8; x++) {
    for (int y = 0; y < 8; y++) {
      pixels[x][y] = HIGH;
    }
  }
}

void loop() {
  readSensors();
  refreshScreen();
}

void readSensors() {
  // ugasi prethodno stanje
  pixels[x][y] = HIGH;
  // pročitaj stanja na potenciometrima
  x = map(analogRead(A0), 0, 1020, 0, 7);
  y = map(analogRead(A1), 0, 1020, 0, 7);
  // postavi novo stanje, tako da će se LED upaliti
  // na sljedećem osvježavanju (refreshScreen())
  pixels[x][y] = LOW;
  Serial.print(x);
  Serial.print(", ");
  Serial.print(y);
  Serial.print(", ");
  Serial.print(analogRead(A0));
  Serial.print(", ");
  Serial.println(analogRead(A1));
}

void refreshScreen() {
  // prođi sve redove (LED anode)
  for (int thisRow = 0; thisRow < 8; thisRow++) {
    // postavi izlaz na 1
    digitalWrite(row[thisRow], HIGH);
    // iprođi sve kolone (LED katode):
    for (int thisCol = 0; thisCol < 8; thisCol++) {
      // pogledaj stanje trenutnog pixela
      int thisPixel = pixels[thisRow][thisCol];
      // kada je red 1, a kolona 0, LED na sjecištu
      // će se upaliti
      digitalWrite(col[thisCol], thisPixel);
      delayMicroseconds(250);
      // ugasi pixel
      if (thisPixel == LOW) {
        digitalWrite(col[thisCol], HIGH);
      }
    }
    // ugasi cijeli red
    digitalWrite(row[thisRow], LOW);
  }
}

ligtbulb Što smo naučili?

  • LED matrica 8x8 sastoji se od 64 LED diode složene u 8 redaka i 8 stupaca, što omogućuje prikazivanje raznih znakova, brojeva i uzoraka.​
  • Svaka LED se kontrolira spajanjem redaka na logičku jedinicu (HIGH), a stupaca na logičku nulu (LOW); na presjeku aktivnog redka i stupca svijetli odgovarajuća LED dioda.​
  • Klasična metoda uključuje korištenje čak 16 digitalnih pinova mikroupravljača – po jedan za svaki redak i stupac, a kontrola ide sekvencijalnim uključivanjem redaka/stupaca (multiplexiranje).​
  • Za jednostavnije i praktičnije upravljanje koristi se MAX7219 driver – ovaj čip omogućuje upravljanje cijelom matricom putem samo 3 do 5 Arduino pinova i dodatne biblioteke, pa je izrada animacija i prikaza puno lakša.​
◀ Ultrazvučni senzor i zvuk3. Arduino programiranje ▶