Matrix 8x8, max7219

Hallo
ich hoffe ich bin hier richtig, wenn ich eine Frage zu einem Code habe… :slight_smile:
Also, hier erstmal der Code :

unsigned char i;
unsigned char j; 
/*Port Definitions*/
int Max7219_pinCLK = 10;
int Max7219_pinCS = 9;
int Max7219_pinDIN = 8;
int Max7219_pinCLK1 = 7;
int Max7219_pinCS1 = 6;
int Max7219_pinDIN1 = 5;
int pos = 0;
int pingPin = 13;
int inPin = 12;

unsigned char disp1[38][8]={
{0x0,0x3E,0x8,0x8,0x8,0x8,0x8,0x8},//T
{0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//O
{0x3C,0x22,0x22,0x22,0x3C,0x24,0x22,0x21},//R
};

unsigned char disp2[38][8]={
{0x0,0x3E,0x8,0x8,0x8,0x8,0x8,0x8},//T
{0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//O
{0x3C,0x22,0x22,0x22,0x3C,0x24,0x22,0x21},//R
};

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);// Extracting a bit data
            DATA = DATA<<1;
            digitalWrite(Max7219_pinCLK,HIGH);
          }                                 
}

void Write_Max7219_byte1(unsigned char DATA) 
{   
           unsigned char i;
     digitalWrite(Max7219_pinCS1,LOW);    
     for(i=8;i>=1;i--)
         {     
            digitalWrite(Max7219_pinCLK1,LOW);
            digitalWrite(Max7219_pinDIN1,DATA&0x80);// Extracting a bit data
            DATA = DATA<<1;
            digitalWrite(Max7219_pinCLK1,HIGH);
          }                                 
}


void Write_Max7219(unsigned char address,unsigned char dat)
{
       digitalWrite(Max7219_pinCS,LOW);
       Write_Max7219_byte(address);           //address,code of LED
       Write_Max7219_byte(dat);               //data,figure on LED 
       digitalWrite(Max7219_pinCS,HIGH);
}

void Write_Max72191(unsigned char address,unsigned char dat)
{
       digitalWrite(Max7219_pinCS1,LOW);
       Write_Max7219_byte(address);           //address,code of LED
       Write_Max7219_byte(dat);               //data,figure on LED 
       digitalWrite(Max7219_pinCS1,HIGH);
}


void Init_MAX7219(void)
{
Write_Max7219(0x09, 0x00);       //decoding :BCD
Write_Max7219(0x0a, 0x03);       //brightness 
Write_Max7219(0x0b, 0x07);       //scanlimit;8 LEDs
Write_Max7219(0x0c, 0x01);       //power-down mode:0,normal mode:1
Write_Max7219(0x0f, 0x00);       //test display:1;EOT,display:0
}

void Init_MAX72191(void)
{
Write_Max7219(0x09, 0x00);       //decoding :BCD
Write_Max7219(0x0a, 0x03);       //brightness 
Write_Max7219(0x0b, 0x07);       //scanlimit;8 LEDs
Write_Max7219(0x0c, 0x01);       //power-down mode:0,normal mode:1
Write_Max7219(0x0f, 0x00);       //test display:1;EOT,display:0
}

void setup()
{
 Serial.begin(9600);
 pinMode(Max7219_pinCLK,OUTPUT);
 pinMode(Max7219_pinCS,OUTPUT);
 pinMode(Max7219_pinDIN,OUTPUT); 
 delay(50);
 Init_MAX7219();
 pinMode(Max7219_pinCLK1,OUTPUT);
 pinMode(Max7219_pinCS1,OUTPUT);
 pinMode(Max7219_pinDIN1,OUTPUT);
 delay(50);
 Init_MAX7219();
}

void loop(){
long duration, inches, cm;
pinMode (pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(10);
digitalWrite(pingPin, LOW);
pinMode(inPin, INPUT);
duration = pulseIn(inPin, HIGH);
cm = microsecondsToCentimeters(duration);
if(cm < 4){
for(j=0;j<38;j++)
 {
  for(i=1;i<9;i++)
   Write_Max7219(i,disp1[j][i-1]);
  delay(300);
 }     
}
Serial.println(cm, DEC);

delay(10);
}


long microsecondsToCentimeters(long microseconds)
{
return microseconds / 29 / 2;
}

So jetzt meine Frage:
Wie ihr seht habe ich versucht 2 Matrix Boards gleichzeitig ans Laufen zu bekommen… Das hat nicht so ganz funktioniert…Eine Matrix funktioniert und reagiert auf den Ultraschallsensor, das funktioniert allerdings nur alle 20 Sekunden… Und das andere Board leuchtet einfach nur durch… Ich möchte irgendwann soweit sein auf 3 Matrix LEDs die Buchstaben T, O und R aufblinken zu lassen… Also für “TOR”
Kann mit jemand helfen? Reicht das an Infos um mein Problem zu lösen? Danke im Voraus,
LG Marvin

Hallo und willkommen im Forum!

Formal: Setze bitte Deinen Sketch in Code-Tags, das ist der Button </> links oben. Bitte ändere Deinen Beitrag entsprechend.

Gibt es einen Grund, warum Du die MAX7219 getrennt ansteuerst?

Willst Du sowas machen: 40x8 Led Matrix / Blink und Animation Laufschrift

Hallo
ich bins nochmal, musste den Beitrag neu erstellen um das zu machen… Hoffe, dass das jetzt funktioniert hat… Zu der Frage… Eigentlich nicht… Man kann die glaube ich aneinander reihen… Is mir gerade eingefallen… Ich probiers nochmal… Ja, genau so hatte ich das vor, danke :smiley:
Also, hier erstmal der Code :

unsigned char i;
 unsigned char j; 
/*Port Definitions*/
int Max7219_pinCLK = 10;
int Max7219_pinCS = 9;
int Max7219_pinDIN = 8;
int Max7219_pinCLK1 = 7;
int Max7219_pinCS1 = 6;
int Max7219_pinDIN1 = 5;
int pos = 0;
int pingPin = 13;
int inPin = 12;
 
unsigned char disp1[38][8]={
{0x0,0x3E,0x8,0x8,0x8,0x8,0x8,0x8},//T
{0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//O
{0x3C,0x22,0x22,0x22,0x3C,0x24,0x22,0x21},//R
};

unsigned char disp2[38][8]={
{0x0,0x3E,0x8,0x8,0x8,0x8,0x8,0x8},//T
{0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//O
{0x3C,0x22,0x22,0x22,0x3C,0x24,0x22,0x21},//R
};
 
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);// Extracting a bit data
             DATA = DATA<<1;
             digitalWrite(Max7219_pinCLK,HIGH);
           }                                 
}

void Write_Max7219_byte1(unsigned char DATA) 
{   
            unsigned char i;
      digitalWrite(Max7219_pinCS1,LOW);    
      for(i=8;i>=1;i--)
          {     
             digitalWrite(Max7219_pinCLK1,LOW);
             digitalWrite(Max7219_pinDIN1,DATA&0x80);// Extracting a bit data
             DATA = DATA<<1;
             digitalWrite(Max7219_pinCLK1,HIGH);
           }                                 
}
 
 
void Write_Max7219(unsigned char address,unsigned char dat)
{
        digitalWrite(Max7219_pinCS,LOW);
        Write_Max7219_byte(address);           //address,code of LED
        Write_Max7219_byte(dat);               //data,figure on LED 
        digitalWrite(Max7219_pinCS,HIGH);
}

void Write_Max72191(unsigned char address,unsigned char dat)
{
        digitalWrite(Max7219_pinCS1,LOW);
        Write_Max7219_byte(address);           //address,code of LED
        Write_Max7219_byte(dat);               //data,figure on LED 
        digitalWrite(Max7219_pinCS1,HIGH);
}
 
 
void Init_MAX7219(void)
{
 Write_Max7219(0x09, 0x00);       //decoding :BCD
 Write_Max7219(0x0a, 0x03);       //brightness 
 Write_Max7219(0x0b, 0x07);       //scanlimit;8 LEDs
 Write_Max7219(0x0c, 0x01);       //power-down mode:0,normal mode:1
 Write_Max7219(0x0f, 0x00);       //test display:1;EOT,display:0
}
 
void Init_MAX72191(void)
{
 Write_Max7219(0x09, 0x00);       //decoding :BCD
 Write_Max7219(0x0a, 0x03);       //brightness 
 Write_Max7219(0x0b, 0x07);       //scanlimit;8 LEDs
 Write_Max7219(0x0c, 0x01);       //power-down mode:0,normal mode:1
 Write_Max7219(0x0f, 0x00);       //test display:1;EOT,display:0
}
 
void setup()
{
  Serial.begin(9600);
  pinMode(Max7219_pinCLK,OUTPUT);
  pinMode(Max7219_pinCS,OUTPUT);
  pinMode(Max7219_pinDIN,OUTPUT); 
  delay(50);
  Init_MAX7219();
  pinMode(Max7219_pinCLK1,OUTPUT);
  pinMode(Max7219_pinCS1,OUTPUT);
  pinMode(Max7219_pinDIN1,OUTPUT);
  delay(50);
  Init_MAX7219();
}

void loop(){
long duration, inches, cm;
pinMode (pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(10);
digitalWrite(pingPin, LOW);
pinMode(inPin, INPUT);
duration = pulseIn(inPin, HIGH);
cm = microsecondsToCentimeters(duration);
if(cm < 4){
 for(j=0;j<38;j++)
  {
   for(i=1;i<9;i++)
    Write_Max7219(i,disp1[j][i-1]);
   delay(300);
  }     
}
Serial.println(cm, DEC);

delay(10);
}


long microsecondsToCentimeters(long microseconds)
{
return microseconds / 29 / 2;
}

So jetzt meine Frage:
Wie ihr seht habe ich versucht 2 Matrix Boards gleichzeitig ans Laufen zu bekommen… Das hat nicht so ganz funktioniert…Eine Matrix funktioniert und reagiert auf den Ultraschallsensor, das funktioniert allerdings nur alle 20 Sekunden… Und das andere Board leuchtet einfach nur durch… Ich möchte irgendwann soweit sein auf 3 Matrix LEDs die Buchstaben T, O und R aufblinken zu lassen… Also für “TOR”
Kann mit jemand helfen? Reicht das an Infos um mein Problem zu lösen? Danke im Voraus,
LG Marvin

Man die die in Reihe schalten wie ein Schieberegister.

Kennst Du die Bibliothek MaxMatrix? Mit der habe ich das bisher gemacht. Möchtest Du es lieber ohne Bibliothek machen?

agmue:
Man die die in Reihe schalten wie ein Schieberegister.

Kennst Du die Bibliothek MaxMatrix? Mit der habe ich das bisher gemacht. Möchtest Du es lieber ohne Bibliothek machen?

Ne, kenn ich nicht… Also eigentlich lieber ohne… :smiley:

Nur zur Sicherheit: Kennst Du shiftOut()?

Das finde ich zweimal Init_MAX7219(); aber Init_MAX72191(); fehlt.

Habe beide Diskussionen zusammengefügt.
Grüße Uwe

Ne, hab den Code ausm Internet.. Habe zwar ein halbes Jahr Grundkenntnisse aus der Schule, aber das hab ich noch nicht gehört..

uwefed:
Habe beide Diskussionen zusammengefügt.
Grüße Uwe

Danke, schön daß es Dich noch gibt :slight_smile:

Marvin_Mlr:
… aber das hab ich noch nicht gehört…

Dann schaue mal in die Referenz.

Geht es denn mit Init_MAX72191(); ?

agmue:
Danke, schön daß es Dich noch gibt :slight_smile:

Hab ich Dir sooo gefehlt? :wink: :wink:

uwefed:
Hab ich Dir sooo gefehlt? :wink: :wink:

Nun ja, irgendwie ::slight_smile: