Servo met loop counter

Hey allemaal ben nu al een week of 2 met arduino aan het spelen en hang weer vast

ik heb een servo aangestuurd die een brugje open en dicht laat gaan maar hij zou na 4 x open en dicht zijn gegaan moeten stoppen en dan weer vooraan de loop moeten beginen
hier het script

#include <Servo.h> 

Servo servo;  // create servo object to control a servo 
// a maximum of eight servo objects can be created 

int pos = 0;    // variable to store the servo position 

// this constant won't change:
const int  buttonPin = 2;    // drukknop positie 
int buttonState = 0;         // huidig aantal gedrukte keren
int count = 0;              // aantal loops 
const int ledrood =  12;      // the number of the LED pin
const int ledblauw =  13;      // the number of the LED pin
void setup() 
{ 
  servo.attach(9);  // attaches the servo on pin 9 to the servo object 
  // Herkent de drukknop als ingang:
  pinMode(buttonPin, INPUT);
  // initialize the LED pin as an output:
  pinMode(ledrood, OUTPUT);  
  // initialize the LED pin as an output:
  pinMode(ledblauw, OUTPUT);  
  // Herkent de servo als uitgang:
  pinMode(pos, OUTPUT);
  // initialize serial communication:
  Serial.begin(9600);
}

void loop() 
{
  // leest de drukknop ingang pin:
  buttonState = digitalRead(buttonPin);

  // if the state has changed, increment the counter
  if (buttonState == HIGH) {
    // if the current state is HIGH then the button
    // wend from off to on:
    while (count < 4 ) {
      {
        digitalWrite(ledblauw, HIGH); 
      }
      {
        digitalWrite(pos, HIGH); 
      }

      for(pos = 0; pos < 55; pos += 1)  // goes from 0 degrees to 180 degrees 
      {                                  // in steps of 1 degree 
        servo.write(pos);              // tell servo to go to position in variable 'pos' 
        delay(30);  
      }                       // waits 15ms for the servo to reach the position 
      {
        delay(10000);                    // wacht 10 seconden voor volgende locatie
      }
      for(pos = 55; pos>=0; pos-=1)     // goes from 180 degrees to 0 degrees 
      {                                
        servo.write(pos);              // tell servo to go to position in variable 'pos' 
        delay(30);  
      }                       // waits 15ms for the servo to reach the position 
      {      
        delay(20000); 
      }  
    } 
    count = +1; 
  } 
  count = 0; 

  if (buttonState == LOW) {
    digitalWrite(pos, LOW);
    {
      digitalWrite(ledrood, HIGH); 
    }  
  }
  else {
  }   
}

kan iemand me zeggen wat ik fout doe

en ik heb 2 ledjes maar het ledrood blijft continu branden dat begrijp ik ook niet

voor de bushbutton heb ik gewoon een deurbel gepakt

Hoi. Ik zie dat je een keer doet:

  // Herkent de servo als uitgang:
  pinMode(pos, OUTPUT);

(regel 24) Maar je hebt:

int pos = 0;    // variable to store the servo position

Daar klopt iets niet. Pin (pos) is van de seriële poort, kan zijn dat dit goed gaat maar het hoort zo niet en levert geen positieve bijdrage aan je sketch. Je doet dan ook nog (in navolging van bovenstaande ?:

      {
        digitalWrite(pos, HIGH); 
      }

Die { accolades } zijn onnodig. Met de voorgaande } sluit je de while al af, dus je zet poort 0 altijd (betekent zonder voorwaarden) op hoog. Een stukje verderop ga je pas je servo aansturen. Ook dat is buiten de voorwaarde die je in while stelt want weer die afsluitende }.

Dus moet je ook hier weer goed letten op wat een { } doet en hoe je dat gebruikt want daar zit je fout waarschijnlijk wel in. Maar kijk ook even welke pin je wil beschrijven als je typt:

digitalWrite(pos, HIGH);

ik heb dit allemaal nagekeken en aangepast maar mijn counter werkt nog niet en zegt dat de end code niet herkend word

is er een manier om mijn loop te resetten ?

of mischien met een goto ?

Als je naar het inspringen van de sluit-accolade voor "count = + 1: " kijkt zie dat deze regel buiten de while-lus valt. De while lus blijft dus 'eeuwig' draaien en de counter wordt dus nooit opgehoogd.

Verder kun je, zoals MAS3 ook al aangaf, de accolades om de regels met digitalWtite(ledblauw, HIGH), digitalWrite(pos, HIGH), delay(10000) en delay(20000) weglaten. Ze hebben geen nut maar maken de code wel wat onoverzichtelijker.

Dit

{
    delay(10000);         // wacht 10 seconden voor volgende locatie
}

kan dus als

       delay(10000);         // wacht 10 seconden voor volgende locatie

of mischien met een goto ?

De "Arduino taal" (C / C++) kent geen goto.

Wat je met de combinatie van de volgende 3 regels probeert te bereiken ,

int pos = 0;    // variable to store the servo position
pinMode(pos, OUTPUT);
servo.write(pos); // tell servo to go to position in variable 'pos'

, en dan met name de 2e regel, snap ik niet.