Verbesserungsvorschläge für erstes Programm

Hi,
ich beschäftige mich seit ein paar Wochen mit einem Arduino Uno und habe auch schon mein erstes "Programm" geschrieben. Ich würde mich sehr über Verbesserungsvorschläge, Tipps oder auch Anregungen freuen. Gerne auch kleine Details und Vorschläge zum Kürzen des Codes. Vielen Dank schonmal!

Was macht das Programm?(zusammen gefasst)
-Zufallszahl mittels Button und Lichtsensor
-gerade/ungerade -> starte links/rechts
-2 LEDs "schießen mit 5 anderen LEDs auf sich(Anzahl der Zufallszahl)
-LED welche als erstes 25 erreicht hat gewinnt

int t=95,wins=25,winsRight=0,winsLeft=0,counterRight=0,counterLeft=0,counterWinnerRight=0,counterWinnerLeft=0,counterSkip=0,randomnumber=0,counter=0,buttonstatus=0;


void setup()
{
 pinMode(5,OUTPUT);
 pinMode(6,OUTPUT);
 pinMode(7,OUTPUT);
 pinMode(8,OUTPUT);
 pinMode(9,OUTPUT);
 pinMode(10,OUTPUT);
 pinMode(11,OUTPUT);
 pinMode(12,INPUT);
 randomSeed(analogRead(0));
 Serial.begin(9600);
}


int LightSensor()
{
 randomnumber=analogRead(A1);
 return randomnumber;
}


void GenerateRandomnumber()
{
 int buttoncounter=0;
 while(buttonstatus==LOW)
 {
   buttoncounter=buttoncounter+1;
   buttonstatus=digitalRead(12);
   delay(20);
 }
 LightSensor();
 randomnumber=buttoncounter+LightSensor();
 counter=counter+1;
}


int Checker()
{
 if((randomnumber%2)==0)
 {
   return 1;
 }
 else
 {
   return 2;
 }        
}


void Light(int value)
{
   if(value==1)
   {
     value=6;
     randomnumber=random(1,5); 
     while((randomnumber!=counterRight)&&(winsRight<wins)&&(winsLeft<wins))
     {
       digitalWrite(10,HIGH);
       if(counterSkip!=1)
       {
         digitalWrite(5,HIGH);
         delay(t);
         digitalWrite(5,LOW);
       }
       while(value<10)
       {
         digitalWrite(value,HIGH);
         delay(t);
         digitalWrite(value,LOW);
         value=value+1;
       }
       winsRight=winsRight+1;
       counterRight=counterRight+1;
       counterSkip=0;
       value=6;
     }
     counterRight=0;
     counterSkip=1;
     digitalWrite(10,LOW);
   }
   else if(value==2)
   {
     value=8;
     randomnumber=random(1,5);
     while((randomnumber!=counterLeft)&&(winsLeft<wins)&&(winsRight<wins))
     {
       digitalWrite(11,HIGH);
       if(counterSkip!=1)
       {
         digitalWrite(9,HIGH);
         delay(t);
         digitalWrite(9,LOW);
       }
       while(value>4)
       {
         digitalWrite(value,HIGH);
         delay(t);
         digitalWrite(value,LOW);
         value=value-1;
       }
       winsLeft=winsLeft+1;
       counterLeft=counterLeft+1;
       counterSkip=0;
       value=8;
     }
     counterLeft=0;
     counterSkip=1;
     digitalWrite(11,LOW);
   }
}


void Winner(int value)
{
 if(value==1)
 {
   digitalWrite(10,HIGH);
   delay(2000);
   digitalWrite(10,LOW);
   delay(300);
   counterWinnerRight=counterWinnerRight+1;
 }
 else if(value==2)
 {
   digitalWrite(11,HIGH);
   delay(2000);
   digitalWrite(11,LOW);
   delay(300);
   counterWinnerLeft=counterWinnerLeft+1;
 }
 SerialPrint();
 int counterEnd=0;
 while(counterEnd<3)
 {
   digitalWrite(7,HIGH);
   delay(100);
   digitalWrite(7,LOW);
   digitalWrite(8,HIGH);
   digitalWrite(6,HIGH);
   delay(100);
   digitalWrite(8,LOW);
   digitalWrite(6,LOW);
   digitalWrite(9,HIGH);
   digitalWrite(5,HIGH);
   delay(100);
   digitalWrite(9,LOW);
   digitalWrite(5,LOW);
   digitalWrite(10,HIGH);
   digitalWrite(11,HIGH);
   delay(100);
   digitalWrite(10,LOW);
   digitalWrite(11,LOW);
   delay(200);
   counterEnd=counterEnd+1;
 }
 winsRight=winsLeft=counterRight=counterLeft=counter=counterEnd=counterSkip=0;
 delay(2000);
}


void SerialPrint()
{
 Serial.print("Green: ");
 Serial.print(counterWinnerRight);
 Serial.print(" >>> ");
 Serial.print((counterWinnerRight*100)/(counterWinnerLeft+counterWinnerRight));
 Serial.println("%");
 Serial.print("White: ");
 Serial.print(counterWinnerLeft);
 Serial.print(" >>> ");
 Serial.print((counterWinnerLeft*100)/(counterWinnerLeft+counterWinnerRight));
 Serial.println("%");
 Serial.println();
}


void loop()
{
 if(counter==0)
 {
   GenerateRandomnumber();
 }
 Checker();
 while((winsRight<wins)&&(winsLeft<wins))
 {
   if(Checker()==1)
   {
     Light(1);
     Light(2);
   }
   else
   {
     Light(2);
     Light(1);
   }
 }
 if(winsRight>winsLeft)
 {
   Winner(1);
 }
 else
 {
   Winner(2);
 }
}

Den Code hier in die Code Tags setzen. Ist einfacher zu lesen :slight_smile:

camaaelion:
... würde mich sehr über Verbesserungsvorschläge, Tipps oder auch Anregungen freuen.

Zunächst solltest Du Code, den Du postest, in „Code-Tags“ einschließen (im Nachrichten-Editor kannst Du die Schaltfläche </> benutzen).

Gruß

Gregor

Sorry, es lag an meinem Browser. Er hat alle Bearbeitungsoptionen gefiltert, war auch schon bei der Anmeldung mit dem Captcha so..

camaaelion:
Sorry, es lag an meinem Browser. ...

Ja, die Sch.-Technik kann einem ganz schön in die Suppe spucken.

Du kannst Deinen Code auch Nachträglich mit den Code-Tags ausstatten. Oder Du postest ihn einfach noch einmal mit diesen Tags.

Gruß

Gregor

Ich würde mich sehr über Verbesserungsvorschläge, Tipps oder auch Anregungen freuen.

Funktion scheint gegeben zu sein. Die Programmierung ist aber ausbau fähig. Verzichte auf delay, das blockiert dein Programm. Kappsel das ganze als Funktionen etc.

Ohne delay? Kein Plan wie das funktionieren soll. Könntest du ein kleines Beispiel geben? Danke nochmal.

in der Arduino IDE findest du unter Beispiele/02.Digital/ den Sketch "BlinkwithoutDelay", der erklärt eigentlich schon alles wesentliche.

Grüße

Oder das Beispiel mit dem Wachmann, der seine Runde macht und immer auf die Uhr schaut ist auch recht anschaulich