Verschiedene Ultraschallsensor Signale auf verschiedenen Matrix 8x8 Boards?

Hallo,
ich habe eine kurze Frage zu dem folgenden Code:
Ich möchte, dass Matrix1 “TOR BAYERN” anzeigt, wenn der Ultraschallsensor 1 eine Entfernung von weniger als 4 cm misst. Matrix2 soll “TOR HAMBURG” anzeigen, wenn der Ultraschallsensor 2 diese Entfernung misst.
Der Code funktioniert auch soweit. Also Matrix1 zeigt TOR BAYERN an, wenn das der Ultraschallsensor1 sagt… Das ist ja auch gut so… Jedoch reagiert das selbe Board, also Matrix1, auch auf den Ultraschallsensor2 mit TOR HAMBURG…
Das Matrix2 leuchtet einfach nur durch…
Vielen Dank im Voraus :smiley:
LG Marvin

// 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;
int pos = 0;
int pingPin = 13;
int inPin = 12;
int Max7219_pinCLK1 = 11;
int Max7219_pinCS1 = 3;
int Max7219_pinDIN1 = 7;
int pos1 = 0;
int pingPin1 = 4;
int inPin1 = 2;

#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);    
  digitalWrite(Max7219_pinCS1,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);
  }
  for(i=8;i>=1;i--)
  {     
    digitalWrite(Max7219_pinCLK1,LOW);
    digitalWrite(Max7219_pinDIN1,DATA&0x80);//Obtain the MSB of the data
    DATA = DATA<<1;
    digitalWrite(Max7219_pinCLK1,HIGH);
  }
}


void Write_Max7219(unsigned char address,unsigned char data)
{
  digitalWrite(Max7219_pinCS,LOW);
  digitalWrite(Max7219_pinCS1,LOW);
  Write_Max7219_byte(address);
  Write_Max7219_byte(data); 
  digitalWrite(Max7219_pinCS,HIGH);
  digitalWrite(Max7219_pinCS1,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();
  Serial.begin(9600);
  
  pinMode(Max7219_pinCLK1,OUTPUT);
  pinMode(Max7219_pinCS1,OUTPUT);
  pinMode(Max7219_pinDIN1,OUTPUT);
  delay(50);
  Init_MAX7219();
  Serial.begin(9600);
}



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(){
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){
 textloop(" TOR BAYERN ");
}
Serial.println(cm, DEC);

delay(100);
pinMode (pingPin1, OUTPUT);
digitalWrite(pingPin1, LOW);
delayMicroseconds(2);
digitalWrite(pingPin1, HIGH);
delayMicroseconds(10);
digitalWrite(pingPin1, LOW);
pinMode(inPin1, INPUT);
duration = pulseIn(inPin1, HIGH);
cm = microsecondsToCentimeters(duration);
if(cm < 4){
 textloop(" TOR HAMBURG ");
}
Serial.println(cm, DEC);

delay(100);
}



long microsecondsToCentimeters(long microseconds)
{
return microseconds / 29 / 2;
}
if(cm < 4){
 textloop(" TOR BAYERN ");
}
...
if(cm < 4){
 textloop(" TOR HAMBURG ");
}

Woran soll das Programm unterscheiden können, welches Display den Text anzeigen soll?

agmue:

if(cm < 4){

textloop(" TOR BAYERN “);
}

if(cm < 4){
textloop(” TOR HAMBURG ");
}


Woran soll das Programm unterscheiden können, welches Display den Text anzeigen soll?

Das ist die Frage… :confused: Gerade gar nicht, deshalb frage ich ja… :smiley:

Marvin_Mlr:
Das ist die Frage.. :confused: Gerade gar nicht, deshalb frage ich ja.. :smiley:

Da ich nicht allwissend bin, frage ich halt, was so Deine Idee ist. Ich könnte ja was übersehen haben :wink:

Du verwendest Max7219_pinCLK und Max7219_pinCLK1 in Deinem Programm. Das ist möglich, macht eine Unterscheidung aber umständlich. Mein Vorschlag:

/* Used Pins */
const byte Max7219_pinCLK[] = {10, 11};
const byte Max7219_pinCS[] = {9, 3};
const byte Max7219_pinDIN[] = {8, 7};
const byte pingPin[] = {13, 4};
const byte inPin[] = {12, 2};
enum {BAYERN, HAMBURG};
byte verein = BAYERN;
...
void setup()
{
  Serial.begin(9600);
  Serial.println("Programmanfang");
  verein = BAYERN;
  pinMode(Max7219_pinCLK[verein], OUTPUT);
  pinMode(Max7219_pinCS[verein], OUTPUT);
  pinMode(Max7219_pinDIN[verein], OUTPUT);
  delay(50);
  Init_MAX7219();

  verein = HAMBURG;
  pinMode(Max7219_pinCLK[verein], OUTPUT);
  pinMode(Max7219_pinCS[verein], OUTPUT);
  pinMode(Max7219_pinDIN[verein], OUTPUT);
  delay(50);
  Init_MAX7219();
}

Was hälst Du davon?

Ich probier den Code gleich mal aus :slight_smile: Danke …
Also meine Idee (Projektarbeit für die Schule) war einen kleinen Tischkicker zusammenzubauen und jeweils über ein Tor ein Matrix Board zu befestigen… Hinter das Tor befestige ich dann jeweils einen USS so, dass er erkennt wenn ein Tor fällt und jeweils ein Signal an das Matrix Board weitergibt und TOR TEAM X anzeigt…
Ich kann mir vorstellen, dass das noch recht kompliziert wird… Zum Beispiel den Spielstand anzuzeigen… Ich habe vor auf dem Matrix Board, wenn gerade kein Tor fällt, die Anzahl an Toren anzeigen zu lassen, die bereits in das jeweilige Tor gefallen sind…
Nocheinmal danke, ich arbeite morgen daran weiter… :smiley:

Marvin_Mlr:
… jeweils über ein Tor ein Matrix Board zu befestigen…

Meinst Du damit eine 8x8-Matrix? Und wenn dann einer mehr als 9 Tore schießt?

Grundsätzlich machbar ist das auch mit mehr Boards: Zeigt her eure geilen Projekte! Allerdings läuft Deine Schrift um 90° verdreht (das IC ist unten):
R.png

“B” und “N” sehen etwas klein aus, die könnten noch Feintuning gebrauchen :slight_smile:

agmue:
Meinst Du damit eine 8x8-Matrix? Und wenn dann einer mehr als 9 Tore schießt?

Grundsätzlich machbar ist das auch mit mehr Boards: Zeigt her eure geilen Projekte! Allerdings läuft Deine Schrift um 90° verdreht (das IC ist unten):
R.png

“B” und “N” sehen etwas klein aus, die könnten noch Feintuning gebrauchen :slight_smile:

Jap, jeweils eine 8x8 LED Matrix :slight_smile:

agmue: