LED Matrix 8x8

Hallo Zusammen

Ich habe ein kleines Problem mit der 8x8 Matrix

http://www.amazon.de/gp/product/B00GKEMQUM?psc=1&redirect=true&ref_=oh_aui_detailpage_o01_s00

Der Beispielcode von Jurs

// Laufschrift-Demo für 8x8 LED Matrix mit Max7219
// By 'jurs' for German Arduino Forum

/* Used Pins */
int Max7219_pinCLK = 10;
int Max7219_pinCS = 9;
int Max7219_pinDIN = 8;

#define NUMCHARS 37 // Kleiner Zeichensatz aus 37 Zeichen (0..9, A..Z und Leerzeichen)
const char chars[NUMCHARS+1]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ ";
const unsigned char disp1[NUMCHARS][8]={
{0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//0
{0x10,0x30,0x50,0x10,0x10,0x10,0x10,0x10},//1
{0x7E,0x2,0x2,0x7E,0x40,0x40,0x40,0x7E},//2
{0x3E,0x2,0x2,0x3E,0x2,0x2,0x3E,0x0},//3
{0x8,0x18,0x28,0x48,0xFE,0x8,0x8,0x8},//4
{0x3C,0x20,0x20,0x3C,0x4,0x4,0x3C,0x0},//5
{0x3C,0x20,0x20,0x3C,0x24,0x24,0x3C,0x0},//6
{0x3E,0x22,0x4,0x8,0x8,0x8,0x8,0x8},//7
{0x0,0x3E,0x22,0x22,0x3E,0x22,0x22,0x3E},//8
{0x3E,0x22,0x22,0x3E,0x2,0x2,0x2,0x3E},//9
{0x8,0x14,0x22,0x3E,0x22,0x22,0x22,0x22},//A
{0x3C,0x22,0x22,0x3E,0x22,0x22,0x3C,0x0},//B
{0x3C,0x40,0x40,0x40,0x40,0x40,0x3C,0x0},//C
{0x7C,0x42,0x42,0x42,0x42,0x42,0x7C,0x0},//D
{0x7C,0x40,0x40,0x7C,0x40,0x40,0x40,0x7C},//E
{0x7C,0x40,0x40,0x7C,0x40,0x40,0x40,0x40},//F
{0x3C,0x40,0x40,0x40,0x40,0x44,0x44,0x3C},//G
{0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44},//H
{0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x7C},//I
{0x3C,0x8,0x8,0x8,0x8,0x8,0x48,0x30},//J
{0x0,0x24,0x28,0x30,0x20,0x30,0x28,0x24},//K
{0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7C},//L
{0x81,0xC3,0xA5,0x99,0x81,0x81,0x81,0x81},//M
{0x0,0x42,0x62,0x52,0x4A,0x46,0x42,0x0},//N
{0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//O
{0x3C,0x22,0x22,0x22,0x3C,0x20,0x20,0x20},//P
{0x1C,0x22,0x22,0x22,0x22,0x26,0x22,0x1D},//Q
{0x3C,0x22,0x22,0x22,0x3C,0x24,0x22,0x21},//R
{0x0,0x1E,0x20,0x20,0x3E,0x2,0x2,0x3C},//S
{0x0,0x3E,0x8,0x8,0x8,0x8,0x8,0x8},//T
{0x42,0x42,0x42,0x42,0x42,0x42,0x22,0x1C},//U
{0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18},//V
{0x0,0x49,0x49,0x49,0x49,0x2A,0x1C,0x0},//W
{0x0,0x41,0x22,0x14,0x8,0x14,0x22,0x41},//X
{0x41,0x22,0x14,0x8,0x8,0x8,0x8,0x8},//Y
{0x0,0x7F,0x2,0x4,0x8,0x10,0x20,0x7F},//Z
{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},// [Space]
};


void Write_Max7219_byte(unsigned char DATA)
{
  unsigned char i;
  digitalWrite(Max7219_pinCS,LOW); 
  for(i=8;i>=1;i--)
  { 
    digitalWrite(Max7219_pinCLK,LOW);
    digitalWrite(Max7219_pinDIN,DATA&0x80);//Obtain the MSB of the data
    DATA = DATA<<1;
    digitalWrite(Max7219_pinCLK,HIGH);
  }
}


void Write_Max7219(unsigned char address,unsigned char data)
{
  digitalWrite(Max7219_pinCS,LOW);
  Write_Max7219_byte(address);
  Write_Max7219_byte(data);
  digitalWrite(Max7219_pinCS,HIGH);
}

void writeChar2Matrix(byte* databytes)
{
  int i;
  for(i=0;i<8;i++)
  {
    Write_Max7219(i+1,databytes[i]);
  } 
}

void Init_MAX7219(void)
{
Write_Max7219(0x09, 0x00);       //decode: BCD
Write_Max7219(0x0a, 0x03);       //Brightness
Write_Max7219(0x0b, 0x07);       //
Write_Max7219(0x0c, 0x01);       //
Write_Max7219(0x0f, 0x00);       //
}



void setup()
{
  pinMode(Max7219_pinCLK,OUTPUT);
  pinMode(Max7219_pinCS,OUTPUT);
  pinMode(Max7219_pinDIN,OUTPUT);
  delay(50);
  Init_MAX7219();
}



void textloop(char* text)
{
  byte i,j,k;
  byte data[8];
  byte thischar, nextchar;
  for(j=0;j<strlen(text);j++)
  {
    thischar=strchr(chars,text[j])-chars; // Index des Buchstaben im disp1 Array
    // Index des nächsten Buchstaben im disp1 Array
    if (j+1<strlen(text)) nextchar=strchr(chars,text[j+1])-chars;
    else nextchar=strchr(chars,' ')-chars;
   
    for (k=0;k<8;k++)
    {
      for (i=0;i<8;i++)
      {
        data[i]=((unsigned int)disp1[thischar][i]<<8 | disp1[nextchar][i]) >>8-k;
      }
      writeChar2Matrix(data);
      delay(50);
    }
  } 
}

void loop()
{
textloop(" LED 8X8 MATRIX LAUFSCHRIFT ");
}

Die Laufschrift funktionier alles, nur wie kann man die Richtung ändern.

Die Laufrichtung ist von oben nach unten, ich will sie aber von links nach rechts laufen lassen.

Wie kann man die Richtung ändern

Kann mir jemand einen Tipp geben wo ich was im Code ändern muss :frowning:

Habe schon alles Mögliche probiert und Mr. Google auch schon stundenlang durchsucht und englisch ist auch nicht meins.

Danke im Voraus
Martin

Hallo zusammen

Hat wirklich niemand einen Tipp für mich wie ich das umsetzen kann? :frowning: :frowning:

Noch einmal Dankeschön

Martin

Hallo Zusammen

Ich bedanke mich für eure große Anteilnahme (72 Views) an meinem Projekt.

Werde die Dinger in die Tonne kloppen da sie sowieso nicht das machen was ich wollte.

Projekt gestorben.

Danke Martin

Ungeduldig solltest du nicht sein.

Bedenke bitte, die meisten betreiben das als Hobby in Ihrer Freizeit und warten nicht unbedingt auf deine Anfragen.

Danke Martin

Hallo zusammen

@ HotSystems : Danke für deine Antwort, mir ist Beust es sind meist nur Hobbyisten

Ich bin nicht ungeduldig aber bei über 100 Klicks ist nicht eine Antwort dabei,

das bin ich von dem DIESEN FORUM überhaupt nicht gewohnt,

es gibt fast immer Antworten, (wenn auch nicht immer zufriedenstellende, für den Fragenden).

Das hat für mich schon fast als Total Ignorants ausgesehen (entschuldige diesen Ausdruck).

Es kann auch sein das mit den Matrixen nicht viel gearbeitet wird.

Wie ich schon oben weiter gepostet habe das ich schon sehr viele stunden bei Mr. Google verbracht

habe und da meist nur alles in Englisch beschrieben und erklärt wird

ist es leider sehr schwierig für mich (50+ und nur ein Jahr englisch in meiner Schulkariere),

es gibt zwar Übersetzer aber bei technischen Details fehlen die Begriffe und zusammenhänge.

Darum habe ich mir gedacht da wird dir sicher weitergeholfen,werde geduldig warten.

Noch einmal Danke
Martin

sima6201:
Darum habe ich mir gedacht da wird dir sicher weitergeholfen,werde geduldig warten.

Altersbedingte Ungeduld kenne ich von meinem Vater, der kommt jetzt immer 10 Minuten vor der verabredeten Zeit, weil er meint, wegen körperlicher Gebrechen sonst zu spät zu kommen. Dabei ist er dann doch noch besser, als er denkt. Als Sohn muß man sich halt darauf einstellen, ärgern nützt nichts.

Deine Frage war: "Kann mir jemand den Sketch umschreiben?" Als einer von denen, die sich Deine Frage angesehen haben, habe ich mich in den Sketch von jurs hineingedacht und verstehe nun, wie er funktioniert. Das Drehen um 90° bedeutet zwei Dinge: Der Font muß ebenfalls um 90° gedreht werden und anstelle in einer Integer-Variablen Bits zu schieben, müssen Bytes geschoben werden. Mein Fazit: Da ich mich nicht stundenlang damit beschäftigen möchte, ist es mir zu aufwändig. Keine Antwort bedeutet also "Nein".

Wenn Du aber ergebnisorientiert auf den Sketch von jurs verzichten kannst, könnte ich Dir möglicherweise eine Lösung anbieten, bei der Schrift von links nach rechts läuft. Bei meinem MP3-Player wird der Titel mittels Laufschrift angezeigt.

Wie flexibel ist Deine Tonne?

40x8 Led Matrix / Blink und Animation Lauf schrift

Martin

Hallo zusammen

@Agmue: Entschuldige wenn ich dich zu sehr an deinen Vater erinnere.

Ich denke da ist etwas falsch verstanden worden und meine Frage wurde falsch gedeutet.

„Deine Frage war: "Kann mir jemand den Sketch umschreiben?"

Meine Frage war im Post  #1: Kann mir jemand einen Tipp geben wo ich was im Code ändern muss

Ich kenne das Forum schon sehr lange und weiß das niemand einen Ganzen Code für einen anderen

schreibt, das habe ich auch gar nicht verlangt,

nur einige Denkanstöße wo ich was ändern soll oder muss

Deinen Code kenne ich, funktionier aber bei mir nicht,

der Code Kompiliert und auch der Upload wird fehlerfrei ausgeführt

nur auf den Matrixen wird nichts angezeigt.

Kann es sein das ich nur 2 Module habe?

Der Font muss ebenfalls um 90° gedreht werden und anstelle in einer Integer-Variablen Bits zu schieben, müssen Bytes geschoben werden.

Ich denke jetzt weiß ich was zu tun ist
Das hier :
{0x10, 0x28, 0x44, 0x7C, 0x44, 0x44, 0x44, 0x44, }, // A
Muss das werden:
4, 8, B01111110, B00010001, B00010001, B01111110, B00000000, // A

Wenn das so stimmt, (habe den Baum vor lauter Wald nicht gesehen),

muss der Code im Loop dann auch angepasst werden?

Danke
Gruß Martin

Der Vergleich mit meinem Vater war natürlich nur Spaß, ich habe Dir dazu auch eine PM geschrieben. :slight_smile:

Da habe ich wohl etwas ungenau zitiert, entscheidend ist aber, daß ich mit für mich vertretbarem Aufwand das nicht umgeschrieben bekomme. Da ich die Beispiele von jurs aber gerne als Vorbild nehme, habe ich mich da soweit reingedacht, daß ich neben dem Font die zu ändernde Stelle benennen kann. Es handelt sich im die Funktion textloop(). Die Variable k geht durch die Buchstaben des anzuzeigenden Texts, k macht die Bewegung der Laufschrift, i die Byte für das IC. Byte 0 ist links (IC unten, darüber die LEDs), Byte 7 rechts.

Für die Bewegung wird das Byte aus dem Font in eine temporäre unsigned int Variable kopiert, dann acht Bit nach links geschoben, dann das nächste Zeichen aus dem Font in das untere Byte der Integer-Variablen kopiert und dann mit k-8 nach rechts verschoben. Das Ergebnis wird dann zu einem Byte gewandelt und gespeichert. Das steckt in der Zeile:

data[i]=((unsigned int)disp1[thischar][i]<<8 | disp1[nextchar][i]) >>8-k;

Für eine um 90° gedrehte Bewegung muß diese Zeile komplett verändert werden.

sima6201:
Deinen Code kenne ich, funktionier aber bei mir nicht,

Anbei ein Test-Sketch, den ich gerade probiert habe. Ich hoffe, der funktioniert. :slight_smile:

Test_Forum.ino (7.11 KB)

Hallo agmue

Ja der Code funktioniert

Besten DANK

Jetzt kann ich damit weitemachen und die Module nicht in die Tonne kloppen, kein Platz.

Wieder was dazu gelernt, da mir die Trokene Theorie nicht in den Kopf will und
ein gutes Beispiel mehr aussagen kann als 1000 Seiten theorie, obwohl diese auch dazugehört

DANKE noch einmal Martin

sima6201:
Ja der Code funktioniert

Das ist gut!

sima6201:
Jetzt kann ich damit weitemachen und die Module nicht in die Tonne kloppen, kein Platz.

Da hat die Tonne aber Glück gehabt und Dank an HotSystems, daß er Dich zurückgeholt hat!

Das konstante Feld CH steht im Programmspeicher, weshalb das Auslesen mit einer Funktion geschieht. Dadurch bleibt mehr Platz für Variablen.