LED Matrix στο Arduino UNO R4 WiFi

Το Arduino UNO R4 WiFi διαθέτει ενσωματωμένο ένα μικρό αλλά ιδιαίτερα χρήσιμο LED Matrix 12×8, δηλαδή μια μήτρα από LEDs αποτελούμενη από 12 στήλες και 8 γραμμές, συνολικά 96 ανεξάρτητα σημεία LED, που μπορούμε να το προγραμματίσουμε μέσω της βιβλιοθήκης: Arduino_LED_Matrix. Κάθε LED μπορεί να βρίσκεται σε δυο βασικές καταστάσεις: ΟΝ (1) και OFF (0).

Το matrix μπορεί να χρησιμοποιηθεί για την εμφάνιση: συμβόλων, αριθμών, γραμμάτων, εικονιδίων, γραφικών, animations, μετρήσεων αισθητήρων, μηνυμάτων, απλών παιχνιδιών.

Για τον προγραμματισμό του ενσωματωμένου matrix χρησιμοποιούμε τη βιβλιοθήκη: Arduino_LED_Matrix. Στην αρχή του προγράμματος γράφουμε:
#include “Arduino_LED_Matrix.h”

και στη συνέχεια δημιουργούμε ένα αντικείμενο:
ArduinoLEDMartix martix;

Ένα βασικό πρόγραμμα είναι:

#include “Arduino_LED_Martix.h”  // εισαγωγή της αναγκαίας βιβλιοθήκης
ArduinoLEDMartix martix;         // δημιουργία του αντικειμένου matrix
void setup(){
martix.begin();                  // αρχικοποίηση του αντικειμένου
}
void loop(){
}

Η εντολή martix.begin(); αρχικοποιεί το LED Matix. Για την εμφάνιση των εικονιδίων μπορεί να χρησιμοποιηθεί η συνάρτηση:
martix.renderBitmap(bitmap, 8, 12); όπου bitmap ένας πίνακας 8Χ12 με τιμές 0 και 1.

Ένα κλασικό παράδειγμα για LED matrix είναι μια καρδιά, που προβάλεται όπως στον ακόλουθο κώδικα. Εδώ χρησιμοποιούμε την συνάρτηση renderBitmap(bitmap, rows, columns); για την προβολή του εικονιδίου.

#include “Arduino_LED_Martix.h”
ArduinoLEDMartix martix;
byte heart[8][12] = {    // δημιουργία του εικονιδίου καρδιάς
    {0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0},
    {1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0},
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0},
    {0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0},
    {0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0},
    {0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
};
void setup(){
   martix.begin();
   matrix.renderBitmap(heart, 8, 12); // προβολή του εικονιδίου
}
void loop(){
}


Αυτός ο τρόπος είναι εύκολα κατανοητός, επειδή κάθε 0 ή 1 αντιστοιχεί σε ένα LED, σβηστό ή αναμμένο αντίστοιχα.

Για να σβήσουμε όλα τα LEDs μπορούμε να εμφανίσουμε ένα bitmap γεμάτο μηδενικά.

byte blank[8][12] = {
    {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, 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, 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}
;
και εισάγωντας την συνάρτηση:
matrix.renderBitmap(blank, 8, 12};

Ένας απλός τρόπος για να καθαρίσουμε την εικόνα είναι με τη συνάρτηση:

matrix.clear( );

η οποία σβήνει την τρέχουσα εικόνα. Για παράδειγμα μπορούμε να δημιουργήσουμε το εφέ ανασβοσβήματος:

#include “Arduino_LED_Martix.h”   // εισαγωγή της αναγκαίας βιβλιοθήκης
ArduinoLEDMartix martix;          // δημιουργία του αντικειμένου matrix
byte heart[8][12] = {             // δημιουργία του εικονιδίου καρδιάς
    {0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0},
    {1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0},
    {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0},
    {0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0},
    {0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0},
    {0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0},
    {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
};
void setup(){
   martix.begin();
}
void loop(){
   matrix.renderBitmap(heart, 8, 12);  // προβολή του εικονιδίου
   delay(300);
   matrix.clear( );  // καθάρισμα του LED matrix
   delay(300);
}