Variable um 1 erhöhen wenn etwas passiert..

Hey, ich bins nochmal :smiley:
Erstmal danke für die zügigen und hilfreichen Antworten :slight_smile:

So, meine Situation..
Ja, ich bin noch dabei einen Torzähler zu programmieren..
Ein Ultraschallsensor erkennt ein TOR, gibt ein Signal weiter an ein Matrix 8x8 LED, das dann TOR TEAm X und den neuen Spielstand anzeigt.. TOR TEAM X läuft als Animation über das Board, während danach der neue Spielstand so lange ("still") angezeigt wird bis ein neues TOR fällt.
Ich hatte jetzt vor eine Variable "TOR" einzufügen, die sich um 1 erhöht, wenn ein TOR fällt..
Dann möchte ich einige if Schleifen schreiben, die aus if TOR (die Variable) 1 ist, dann läuft TOR TEAM X durch und zeigt 1 an. Wenn dann nochmal ein TOR fällt, wird die Variable wieder um 1 erhöht, dann heisst es if TOR (Variable) 2 ist, dann ... usw..
Geht das? Ist das machbar?
Vielen Dank :slight_smile:
Marvin :smiley:
Code:

int Max7219_pinCLK1 = 10;
int Max7219_pinCS1 = 9;
int Max7219_pinDIN1 = 8;
int pos1 = 0;
int pingPin1 = 12;
int inPin1 = 13;
int TOR;

 unsigned char i;
 unsigned char j; 

unsigned char disp2[38][8]={
  { 
    0b00001000,
    0b00011000,
    0b00101000,
    0b00001000,
    0b00001000,
    0b00001000,
    0b00001000,
    0b00001000
  },//1
};

#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][9]={
{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
   { 
    0b00011000,
    0b00100100,
    0b01000010,
    0b01000010,
    0b01111110,
    0b01000010,
    0b01000010,
    0b01000010
  } ,//A
  { 
    0b01111100,
    0b01000010,
    0b01000010,
    0b01111100,
    0b01000010,
    0b01000010,
    0b01000010,
    0b01111100
  } ,//B
  { 
    0b00111100,
    0b01000010,
    0b01000000,
    0b01000000,
    0b01000000,
    0b01000000,
    0b01000010,
    0b00111100
  } ,//C
  { 
    0b01111100,
    0b01000010,
    0b01000010,
    0b01000010,
    0b01000010,
    0b01000010,
    0b01000010,
    0b01111100
  } ,//D
  { 
    0b01111110,
    0b01000000,
    0b01000000,
    0b01111000,
    0b01000000,
    0b01000000,
    0b01000000,
    0b01111110
  } ,//E
  { 
    0b01111110,
    0b01000000,
    0b01000000,
    0b01111000,
    0b01000000,
    0b01000000,
    0b01000000,
    0b01000000
  } ,//F
  { 
    0b00111100,
    0b01000010,
    0b01000000,
    0b01000000,
    0b01001100,
    0b01000010,
    0b00100010,
    0b00011100
  } ,//G
  { 
    0b01000010,
    0b01000010,
    0b01000010,
    0b01111110,
    0b01000010,
    0b01000010,
    0b01000010,
    0b01000010
  }  ,//H
  { 
    0b00010000,
    0b00010000,
    0b00010000,
    0b00010000,
    0b00010000,
    0b00010000,
    0b00010000,
    0b00010000
  } ,//I
  { 
    0b00000100,
    0b00000100,
    0b00000100,
    0b00000100,
    0b00000100,
    0b00000100,
    0b01000100,
    0b00111000
  } ,//J
  { 
    0b01000010,
    0b01000100,
    0b01001000,
    0b01010000,
    0b01100000,
    0b01010000,
    0b01001000,
    0b01000100
  } ,//K
  { 
    0b01000000,
    0b01000000,
    0b01000000,
    0b01000000,
    0b01000000,
    0b01000000,
    0b01000000,
    0b01111110
  } ,//L
  { 
    0b01000010,
    0b01000010,
    0b01100110,
    0b01011010,
    0b01000010,
    0b01000010,
    0b01000010,
    0b01000010
  },//M
  { 
    0b01100010,
    0b01100010,
    0b01010010,
    0b01010010,
    0b01001010,
    0b01001010,
    0b01000110,
    0b01000110
  } ,//N
  { 
    0b00111100,
    0b01000010,
    0b01000010,
    0b01000010,
    0b01000010,
    0b01000010,
    0b01000010,
    0b00111100
  }  ,//O
  { 
    0b01111100,
    0b01000010,
    0b01000010,
    0b01111100,
    0b01000000,
    0b01000000,
    0b01000000,
    0b01000000
  } ,//P
  { 
    0b00111100,
    0b01000010,
    0b01000010,
    0b01000010,
    0b01000010,
    0b01010010,
    0b01001010,
    0b00111100
  } ,//Q
  { 
    0b01111100,
    0b01000010,
    0b01000010,
    0b01111100,
    0b01010000,
    0b01001000,
    0b01000100,
    0b01000010
  } ,//R
  { 
    0b00111100,
    0b01000010,
    0b01000000,
    0b00111100,
    0b00000010,
    0b00000010,
    0b01000010,
    0b00111100
  } 
,//S
   { 
    0b00111110,
    0b00001000,
    0b00001000,
    0b00001000,
    0b00001000,
    0b00001000,
    0b00001000,
    0b00001000
  } ,//T
  { 
    0b01000010,
    0b01000010,
    0b01000010,
    0b01000010,
    0b01000010,
    0b01000010,
    0b01000010,
    0b00111100
  } ,//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
  { 
    0b01000010,
    0b01000010,
    0b00100100,
    0b00011000,
    0b00011000,
    0b00011000,
    0b00011000,
    0b00011000
  } ,//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_pinCS1,LOW);    
  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_pinCS1,LOW);
  Write_Max7219_byte(address);
  Write_Max7219_byte(data); 
  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_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(100);
    } 
  }     
}


void loop(){
long duration, inches, cm;
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);
for(i=1;i<9;i++)
    Write_Max7219(i,disp1[j][i-1]);
if(cm < 4){
 VARIABLE IMMER UM 1 ERHÖHEN
}

if(TOR = 1){
  textloop(" TOR BAYERN ");
    for(j=0;j<38;j++)
  {
   for(i=1;i<9;i++)
    Write_Max7219(i,disp2[j][i-1]);
   delay(1000);
  }
}
if(TOR = 2){
  textloop(" TOR BAYERN ");
    for(j=0;j<38;j++)
  {
   for(i=1;i<9;i++)
    Write_Max7219(i,disp3[j][i-1]);
   delay(1000);
  }
}
Serial.println(cm, DEC);

delay(10);
}




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

Du willst die Anzahl der Tore darstellen? Klar geht das.

na so:

if(cm < 4){
 TOR++;  // Variable um eins erhöhen 

  textloop(" TOR BAYERN ");  // Laufanzeige

  for(j=0;j<38;j++)    // Dies legt  alles für 38 sec lahm)?
  {
   for(i=1;i<9;i++)
    Write_Max7219(i,disp2[j][i-1]);
   delay(1000);

  }
}

aber wofür soll disp2 und disp3 gut sein?
Die Ziffern '0'... '9' sind doch schon in disp1 definiert ...

Was passiert denn bei

  for(i=1;i<9;i++)
    Write_Max7219(i,disp1[TOR][i-1]);

michael_x:
Was passiert denn bei

  for(i=1;i<9;i++)

Write_Max7219(i,disp1[TOR][i-1]);

Heyy, danke für die Antwort, ich probier den Code sofort aus :slight_smile:
Das soll die 0 anzeigen..
LG Marvin

Ach ja, und danke für den Hinweis mit den 38 Sekunden ^^ hab ich wohl übersehen :slight_smile:

Das soll die 0 anzeigen..

Das sollte eigentlich den aktuell in TOR gespeicherten Stand 0, 1, 2, ... 9 anzeigen,
weil der Wert von TOR als Index auf disp1 verwendet wird, und disp1 mit den Ziffern 0 .. 9 anfängt.
Sowas wolltest du doch, oder? :wink:

Hoffen wir mal, dass Bayern heute nicht wieder 11:1 gewinnt, ab 10 versagt dein Sketch nämlich.