Hallo liebe Community,
bin recht frisch bzgl. Arduino und Mikrocontroller. Aber es macht mir tierisch Spaß und ich hoffe ihr könnt mir weiterhelfen. Mein Projekt ist letztlich ein Lern-Projekt für mich selber. Ich habe eine 7x7 LED-Matrix mit einzelnen LEDs aufgebaut und steuere diese durch Multiplexing an. 7 Zeilen/Spalten also 14 Ausgänge, passt für meinen Uno. Der Code des Multiplexing funktioniert analog zu dem Tutorial von Damon Dransfeld.
Nun möchte ich einen Laufbild generieren. Dies mache ich, indem ich jedes einzelne Bild als 7x7 Matrix abspeichere:
int j1[7][7] = {{1,1,1,1,1,1,1},{0,0,0,0,0,0,0},{1,1,1,1,1,1,1},{0,0,0,0,0,0,0},{1,1,1,1,1,1,1},{0,0,0,0,0,0,0},{1,1,1,1,1,1,1},};
int j2[7][7] = {{0,0,0,0,0,0,0},{1,1,1,1,1,1,1},{0,0,0,0,0,0,0},{1,1,1,1,1,1,1},{0,0,0,0,0,0,0},{1,1,1,1,1,1,1},{0,0,0,0,0,0,0},};
int j3[7][7] = ...
Problem: Der RAM ist fix voll (egal ob mit int oder byte). Daher hatte ich die idee PROGMEM zu verwenden
#include <avr/pgmspace.h>
const int j1[7][7] PROGMEM = {{1,1,1,1,1,1,1},{0,0,0,0,0,0,0},{1,1,1,1,1,1,1},{0,0,0,0,0,0,0},{1,1,1,1,1,1,1},{0,0,0,0,0,0,0},{1,1,1,1,1,1,1},};
const int j2[7][7] PROGMEM = {{0,0,0,0,0,0,0},{1,1,1,1,1,1,1},{0,0,0,0,0,0,0},{1,1,1,1,1,1,1},{0,0,0,0,0,0,0},{1,1,1,1,1,1,1},{0,0,0,0,0,0,0},};
const int j3[7][7] PROGMEM = ...
Nur wenn ich nun die Variablen j1 im Hauptprogramm anwähle
void loop() {
unsigned long timestep = millis();
if (digitalRead(A0) == HIGH) //Knopf wird gedrückt
{
timestep = millis();
while (millis() < (zeit + timestep)) //So lange wie in "zeit" definiert ist, leuchtet das Bild
{
led_7x7_spalten(j1); //Unterfkt. die das Multiplexing macht
}
}
kommt nur Murks raus. Habe die Matrizen mir mit Matrix.Print (#include <MatrixMath.h>) im Seriellen Monitor angeschaut, da steht nicht das, was als const PROGMEM definiert wurde. Was mache ich falsch?
Ich hoffe auf einen kurzen Tipp. Vielen Dank