Ich möchte erstmal mit den zugegebenermaßen beschränkten Fertigkeiten ein kleines Ziel erreichen. Ich bin auch am überlegen, wie ich es einrichten kann, wenn er denn endlich so läuft, wie ich es möchte, dass er gleichzeitig zwei Abläufe ausführt, nämlich wendet und den Kopf wieder in "0"-Position bringt. Ist das möglich durch Interrupts?
Hallo wenddir,
lass dich nicht verrückt machen. Z.Z. hat dein Programm vier Hauptaufgaben:
- Fahren
- Kopfposition ändern
- Ultraschallmessung
- Entscheidungen aufgrund der Messung treffen
Das Fahren passiert in dem Programm automatisch. Dein Roboter kann Messungen machen oder die Kopfposition ändern, während er fährt.
Da dein Roboter nur einen Sensor besitzt, ist für die Entscheidung, was zu tun ist, auch nur das eine Messergebnis entscheidend. Der Roboter muss nicht gleichzeitig mehrere Sensoren auswerten. Daher muss dein Programm auch keine weiteren Dinge parallel abarbeiten. Interupt- oder schedulerbasierte Programmierung ist also z.Z. nicht nötig.
Der Post von I_make_it bezieht sich darauf, dass das Programm umgeschrieben werden müsste, wenn du das System um weitere Sensoren erweiterst wie z.B. Kontaktsensoren oder ähnliches.
Das von dir oben genannte Verhalten wäre dann so realisierbar.
Code:
void kopf_mitte() {
//Servo 0-Position (etwas schief, daher 80°)
myservo.write(80);
}
void wenden() {
digitalWrite(motorAPin, HIGH);
digitalWrite(motorAPin, LOW);
digitalWrite(bremseAPin, LOW);
digitalWrite(bremseBPin, LOW);
delay(500); // Hier Wendezeit eintragen
}
void loop() {
// ...
kopf_mitte(); // Servo beginnt Bewegung
wenden(); // Servo bewegt sich während des Wendens rasch zur Mittelposition
// ...
Lesezeichen