Servo zonder delay
3 berichten
• Pagina 1 van 1
Servo zonder delay
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?
Ik heb al gekeken naar het voorbeeld BlinkWithoutDelay maar ik denk dat ik het niet helemaal goed toepas. Kan iemand mij hiermee helpen?
- 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
Re: Servo zonder delay
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.
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.
Re: Servo zonder delay
in de loop een timer
cpp code
zoiets
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
shooter@home.nl
3 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: izepqowahocu en 28 gasten