Ignorierung von Programmcode

Hallo zusammen,

bin neu im Forum und das hier ist mein erste Post ;). Mit dem Arduino kenn ich mich schon aus und komme normalerweise auch gut zurecht aber irgentwie stoß ich momentan an meine Grenzen.

Zum Thema:
Ich versuche einen Mechanischen Pokemon Ausbrüt Bot(ja klingt kindisch aber langweile eben) zu bauen. Soweit so gut. Ich Arbeite mit drei Servomotoren die auf das Steuerkreuz und die A- bzw. B-Knöpfe drücken. Der erste Teil vom Code hat wunderbar funktioniert und dann hab ich mich an den Rest gesetzt und plötzlich spinnt der vorher funktionale Teil vollkommen rum und ich weiß nicht warum. Könnte mir vielleicht dabei einer helfen? Hier mal der Code:

#include <Servo.h>

#define UP_BUTTON 45
#define RIGHT_BUTTON 118
#define DOWN_BUTTON 102
#define LEFT_BUTTON 51
#define A_BUTTON 115
#define B_BUTTON 35

Servo upright;
Servo downleft;
Servo ab;

int eggcounter = 0;
int pokemonboxcounter = 0;

void setup(){
 ab.attach(9);
 upright.attach(10); 
 downleft.attach(11);

}

void loop() {  

 starthatching();
 
}

void starthatching(){
 
 while(eggcounter < 4) {
  stepforegg(); 
 }
 
 while(eggcounter > 0) {
  hatchegg();
 }
 
 storePKM();
  
}

void stepforegg(){

    pressButton(B_BUTTON);

    pressButton(LEFT_BUTTON);
    delay(12000);
    releaseButton(LEFT_BUTTON);
    
    pressButton(RIGHT_BUTTON);
    delay(12000);
    releaseButton(RIGHT_BUTTON);
    
    releaseButton(B_BUTTON);
    delay(1000);
    steps(LEFT_BUTTON, 15);
    delay(1000);
    
    steps(UP_BUTTON, 1);
    delay(350);
    
    pressSingleButton(A_BUTTON);
    
    int light = 520;
    
    if(analogRead(A0) < 400) {
     light = 400;
    }
    
    while(analogRead(A0) < light){
      pressSingleButton(A_BUTTON);
      delay(350);
    }
    
    eggcounter++;
        
    release_all();
        
}

void storePKM() {
 
 pressButton(RIGHT_BUTTON);
 delay(15000);
 releaseButton(RIGHT_BUTTON);
 delay(1000);
 steps(LEFT_BUTTON, 10);
 delay(1000);
 steps(UP_BUTTON, 3);
 delay(3000);
 steps(UP_BUTTON, 6);
 delay(1000);
 steps(RIGHT_BUTTON, 2);
 delay(1000);
 steps(UP_BUTTON, 1);
 delay(1000);

 pressSingleButton(A_BUTTON);
 delay(350);
 pressSingleButton(A_BUTTON);
 delay(350);
 pressSingleButton(A_BUTTON);
 delay(350);
 pressSingleButton(A_BUTTON);
 delay(2500);
 
 for(int i = 0; i <= eggcounter; i++) {
  pressSingleButton(RIGHT_BUTTON);
  pressSingleButton(A_BUTTON);
  pressSingleButton(A_BUTTON);
  if(pokemonboxcounter >= 30){
   pressSingleButton(RIGHT_BUTTON);
   pokemonboxcounter = 0;
  }
  pressSingleButton(A_BUTTON);
  pokemonboxcounter++;
  
 }
 eggcounter = 0;
 pressSingleButton(B_BUTTON);
 delay(600);
 pressSingleButton(B_BUTTON);
 delay(600);
 pressSingleButton(B_BUTTON);
 delay(600);
 pressSingleButton(B_BUTTON);
 delay(4000);
 steps(LEFT_BUTTON, 2);
 delay(1000);
 steps(DOWN_BUTTON, 7);
 delay(4500);
 steps(DOWN_BUTTON, 2);
 delay(1000);
 release_all();
 delay(1000);
}

void hatchegg() {
 
 while(eggcounter != 0){
  
  while(analogRead(A0) > 520) {
    pressButton(B_BUTTON);
  
    pressButton(LEFT_BUTTON);
    delay(12000);
    releaseButton(LEFT_BUTTON);
    
    pressButton(RIGHT_BUTTON);
    delay(12000);
    releaseButton(RIGHT_BUTTON);
    
    releaseButton(B_BUTTON);
    delay(1000);
  }
   
  while(analogRead(A0) < 520) {
   pressSingleButton(B_BUTTON); 
  }
  
  eggcounter--;
 }
  
}

void steps(int dir, int count){
 
  for(int i = 0; i < count; i++){
   pressButton(dir);
   delay(250);
   releaseButton(dir);
   delay(250);
  }
  
}

void pressSingleButton(int b){
 pressButton(b);
 delay(1000);
 releaseButton(b);
 delay(1000); 
}

void release_all(){
 upright.write(90);
 delay(15);
 downleft.write(90);
 delay(15);
 ab.write(90); 
 delay(15);
}

void releaseButton(int b){
  switch(b) {
  case UP_BUTTON:
   upright.write(90);
   break;
  case RIGHT_BUTTON:
   upright.write(90);
   break;
  case DOWN_BUTTON:
   downleft.write(90);
   break;
  case LEFT_BUTTON:
   downleft.write(90);
   break;
  case A_BUTTON:
   ab.write(90);
   break;
  case B_BUTTON:
   ab.write(90);
   break;
 }
 delay(15);
}

void pressButton(int b) {
 
 switch(b) {
  case UP_BUTTON:
   upright.write(UP_BUTTON);
   break;
  case RIGHT_BUTTON:
   upright.write(RIGHT_BUTTON);
   break;
  case DOWN_BUTTON:
   downleft.write(DOWN_BUTTON);
   break;
  case LEFT_BUTTON:
   downleft.write(LEFT_BUTTON);
   break;
  case A_BUTTON:
   ab.write(A_BUTTON);
   break;
  case B_BUTTON:
   ab.write(B_BUTTON);
   break;
 }
  
 delay(15);
}

Es ist momentan so das der Charakter nur noch nach Links läuft und auch nur der Teil des Codes ausgeführt der in der void stepforegg nach links geht.

Danke schon mal im Vorraus.

Lass dir mal den Stand von eggcounter auf Serial ausgeben. Das ist die Variable mit du den ganzen Ablauf steuerst. Die Chancen sind hoch, dass da was nicht passt.

So weit kommt das Script ja nicht mal.

Aktiv wird an die Servos übertragen:

pressButton(LEFT_BUTTON);
    delay(12000);
    releaseButton(LEFT_BUTTON);

dann 12 sekunden pause und dann

 steps(LEFT_BUTTON, 15);
    delay(1000);

der eggcounter bleibt unberührt da die bedingungen nicht erfüllt sind das er sich verändert. Ob der Teil des Codes ausgeführt wird kann ich nicht sagen. Mein Problem ist wirklich das nur der eine Servo Arbeitet. Angeschlossen sind alle richtig

Bist Du sicher daß es kein Problem mit der Spannungsversorgung der Servo ist. Versorgst Du die Servo über Arduino oder von einem anderen Netzteil?
Grüße Uwe

Über das Arduino. Und wie gesagt hat der Teil des Codes ja schon funktioniert! Oder kann es sein das quasi der Lichtsensor zu viel war?

Die Servo brauchen zuviel Strom. Wenn Du 2 gleichzeitig bewegst bricht die Versorgungsspannung zusammen. Du mußt die Servo mit einem eigenen Netzteil versorgen und den Minuspol auf Gnd des Arduino legen.
Grüße Uwe

Wunderbar danke
dann probier ich das mal aus