=>[[helvepic32:|HelvePic32]]
==== I2C 8x8 Matrix====
Das kleine Matrixmodul von Adafruit hat von Hause aus die I2C Adresse 0x72, wenn man das Modul fertig aufgebaut kauft. Diese Adresse kann über die Rückseite des Moduls an den Brücken A1 und A0 verändert werden.
Die Basisadresse ist 0x70.
{{:helvepic32:bspi2cmatrix:led_matrix_soldered88_cr.jpg?100|}}
^ A1 ^ A0 ^ I2C Adresse ^
| offen | offen | 0x70 |
| offen | geschlossen | 0x71 |
| geschlossen | offen | 0x72 |
| geschlossen | geschlossen | 0x73 |
Im Zweifelsfall sollte man mit dem Sketch i2cscanner.ino die Adressen auflisten lassen.
Angeschlossen wird das Module an den I2C Port des HelvePic32, das Modul funktioniert problemlos mit 3.3V.
{{:helvepic32:bspi2cmatrix:helvepic32_matrixi2csml.png?600|}}
Für den Chip HT16K33 bietet Adafruit wie bei ihren Produkten üblich eine Bibliothek an (Adafruit_LEDBackpack), die alle sogenannten Backpacks behandelt (also auch das hier beschriebenen Alphanumerische Modul). Diese verwendet die Grafikbibliothek von Adafruit, die zusätzlich installiert werden muss (Adafruit_GFX)
Da für die Fonts der für den Arduino spezifische PROGMEM Speicherbereich verwendet wird, muss man die Zeile 244 der Bibliothek-Datei Adafruit_LEDBackpack.cpp von
uint16_t font = pgm_read_word(alphafonttable+a);
in den direkten Zugriff des HelvePic32 abändern:
uint16_t font = alphafonttable[a];
An der Bibliothek Adafruit_GFX muss keine Änderung vorgenommen werden.
Der Beispielcode für die Matrix lautet:
#include
#include "Adafruit_LEDBackpack.h"
#include "Adafruit_GFX.h"
Adafruit_8x8matrix matrix = Adafruit_8x8matrix();
void setup() {
Serial.begin(9600);
Serial.println("8x8 LED Matrix Test");
matrix.begin(0x72); // pass in the address
}
static const uint8_t PROGMEM
smile_bmp[] =
{ B00111100,
B01000010,
B10100101,
B10000001,
B10100101,
B10011001,
B01000010,
B00111100 },
neutral_bmp[] =
{ B00111100,
B01000010,
B10100101,
B10000001,
B10111101,
B10000001,
B01000010,
B00111100 },
full_bmp[] =
{ B11111111,
B11111111,
B11111111,
B11111111,
B11111111,
B11111111,
B11111111,
B11111111 },
frown_bmp[] =
{ B00111100,
B01000010,
B10100101,
B10000001,
B10011001,
B10100101,
B01000010,
B00111100 };
void loop() {
matrix.clear();
matrix.drawBitmap(0, 0, full_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(500);
matrix.clear();
matrix.drawBitmap(0, 0, smile_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(500);
matrix.clear();
matrix.drawBitmap(0, 0, neutral_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(500);
matrix.clear();
matrix.drawBitmap(0, 0, frown_bmp, 8, 8, LED_ON);
matrix.writeDisplay();
delay(500);
matrix.clear(); // clear display
matrix.drawPixel(0, 0, LED_ON);
matrix.writeDisplay(); // write the changes we just made to the display
delay(500);
matrix.clear();
matrix.drawLine(0,0, 7,7, LED_ON);
matrix.writeDisplay(); // write the changes we just made to the display
delay(500);
matrix.clear();
matrix.drawRect(0,0, 8,8, LED_ON);
matrix.fillRect(2,2, 4,4, LED_ON);
matrix.writeDisplay(); // write the changes we just made to the display
delay(500);
matrix.clear();
matrix.drawCircle(3,3, 3, LED_ON);
matrix.writeDisplay(); // write the changes we just made to the display
delay(500);
matrix.setTextSize(1);
matrix.setTextWrap(false); // we dont want text to wrap so it scrolls nicely
matrix.setTextColor(LED_ON);
for (int8_t x=0; x>=-36; x--) {
matrix.clear();
matrix.setCursor(x,0);
matrix.print("Hello");
matrix.writeDisplay();
delay(100);
}
matrix.setRotation(3);
for (int8_t x=7; x>=-36; x--) {
matrix.clear();
matrix.setCursor(x,0);
matrix.print("World");
matrix.writeDisplay();
delay(100);
}
matrix.setRotation(0);
}
=>[[helvepic32:|HelvePic32]]