Servo zonder delay

Arduino specifieke Software
Berichten: 1
Geregistreerd: 01 Apr 2017, 16:38

Servo zonder delay

Berichtdoor Seg » 01 Apr 2017, 16:45

Hallo allemaal, ik ben nu een een weekje volop bezig met mijn Arduino. Ik heb gelezen dat delay je Arduino stil zet en hij verder niks meer kan doen. Nu heb ik een servo motortje aangesloten die ik op een rustige manier 90 graden omhoog wil laten gaan, dit lukt mij met delay maar hoe schrijf ik het zo dat dit gebeurt zonder delay?

Code: Alles selecteren
for (int i = 90; i >= 0; i = i - 1)  {
    myServo.write(i);
    delay(50);
}


Ik heb al gekeken naar het voorbeeld BlinkWithoutDelay maar ik denk dat ik het niet helemaal goed toepas. Kan iemand mij hiermee helpen?

Advertisement

Gebruikers-avatar
Berichten: 2655
Geregistreerd: 06 Aug 2016, 01:03

Re: Servo zonder delay

Berichtdoor Koepel » 01 Apr 2017, 17:16

Hallo en welkom.

Deze twee dingen hebben met elkaar te maken.
1 ) Bij Arduino wordt de loop() iedere keer opnieuw uitgevoerd.
2 ) Over het algemeen doen Arduino boards maar één taak tegelijkertijd, en millis() geeft het aantal milliseconden sinds het opstarten van het Arduino board.

Die combinatie maakt de BlinkWithoutDelay mogelijk. In de loop() kijk je als het ware steeds op de klok of het al tijd is om iets te gaan doen. De "klok" is natuurlijk millis().

Je wilt iedere 50ms de servo wijzigen. Dan kun je met millis() een software timer maken van 50ms (dat is 20Hz). Binnen die software timer kun je de servo veranderen. Je hebt dan een globale variabele nodig die de waarde van de servo onthoudt, omdat je iedere 50ms eventjes in dat stukje code duikt.

De BlinkWithoutDelay (https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay) heeft een interval van 1000ms. Maak dat 50ms en gebruik een oplopende globale variabele om de servo te zetten. Laat ons zien wat je er van hebt gemaakt, en dan helpen we je verder. Laat de volledige sketch zien.

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Servo zonder delay

Berichtdoor shooter » 01 Apr 2017, 21:10

in de loop een timer
cpp code
int positie=90;
unsigned long wachttijd=50;
unsigned long starttime=millis();

loop()
{if ((millis()-starttime) >= wachttijd)
{
doe_een_stap
}
}
doe_een_stap
{myservo.write(positie);
positie=positie-1;
if (positie=0){positie=90;}

}

zoiets
paul deelen
shooter@home.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: izepqowahocu en 28 gasten