LBotics.at

Möchte man zeitgesteuerte Bewegungsabläufe realisieren, ohne dass dabei die Ausführung des Programmcodes mit der Funktion SLEEP() angehalten wird, so kann man dazu den Counter verwenden.

Im diesem Beispiel soll ein Roboter eine Sekunde nach Programmstart mit einer Leistung von 50% für 3 Sekunden vorwärts fahren. Nachdem der Roboter 4 Sekunden lang stehengeblieben ist, soll dieser 4 Sekunden mit einer Leistung von 70% rückwärts fahren bevor diese Abfolge wieder von vorne beginnt.

Um diese zeitabhängige Steuerung der Motoren umzusetzen, werden mit if-Abfragen die entsprechenden Zeitintervalle seit dem Start des Programms abgefragt und darauf basierend die jeweiligen Motorleistungen gesetzt.

Die Anordnung der if-Abfragen muss dabei nicht der Reihenfolge des zeitlichen Ablaufs folgen, sondern könnten auch beliebig durchmischt werden und würde zu dem selben Bewegungsablauf führen.

Dieses Programm könnte im Gegensatz zum Einsatz der Funktion SLEEP() jederzeit auf den Input eines Sensors reagieren, da die Ausführung des Programmcodes an keiner Stelle angehalten wird.

Programmbeispiel - zeitgesteuerter Bewegungsablauf unter Verwendung des Counters
#include "KeplerOpenBOT.h"
void setup()
{
KeplerOpenBOT_INIT();
}
void loop()
{
if (COUNTER==10)
{
WRITE_MOTOR(ML,50);
WRITE_MOTOR(MR,50);
}
if (COUNTER==40)
{
WRITE_MOTOR(ML,0);
WRITE_MOTOR(MR,0);
}
if (COUNTER==80)
{
WRITE_MOTOR(ML,-70);
WRITE_MOTOR(MR,-70);
}
if (COUNTER==120)
{
COUNTER = 0;
}
}

 

Erklärungen zu diesem Programmbeispiel

Zeile 10-14:

Mit dieser if-Abfrage wird überprüft, ob der aktuelle Wert der Variable COUNTER gleich 10 ist. Dies bedeutet, dass seit Start des Programms (bei dem der Counter von 0 zu zählen
beginnt) eine Sekunde vergangen ist. Zu diesem Zeitpunkt werden die Leistungen für beide Motoren auf 50% gesetzt.