/*
Forum: https://forum.arduino.cc/t/code-funktioniert-nicht-richtig-warum/1327820
Wokwi: https://wokwi.com/projects/416190905277762561
*/
#include <Servo.h>
Servo servo1; // Servo 1 an Pin 9
Servo servo2; // Servo 2 an Pin 10
const int potPin = A0; // Potentiometer an Pin A0
int potValue; // Aktueller Potentiometerwert
bool hasCrossed700 = false; // Flag, ob der Wert einmal unter 700 gefallen ist
bool hasCrossed990 = false; // Flag, ob der Wert einmal unter 990 war
bool isMoving = false; // Flag, um Bewegungen zu verfolgen
void setup() {
servo1.attach(9); // Servo 1 an Pin 9 anschließen
servo2.attach(10); // Servo 2 an Pin 10 anschließen
Serial.begin(9600); // Serielle Kommunikation starten
// Servos in der Startposition initialisieren
servo1.write(0); // Servo 1 Startposition: 0 Grad
servo2.write(180); // Servo 2 Startposition: 180 Grad
Serial.println("System bereit. Warte auf Bluetooth-Befehle.");
}
void loop() {
potValue = analogRead(potPin); // Potentiometerwert lesen
Serial.print("Aktueller Potentiometerwert: ");
Serial.println(potValue); // Potentiometerwert ausgeben
// Überprüfen, ob Daten über Bluetooth empfangen wurden
if (Serial.available() > 0) {
char receivedChar = Serial.read(); // Lese ein Zeichen vom Bluetooth-Modul
if (receivedChar == 'T') {
moveToTargetPosition(); // Servos zur Zielposition bewegen
delay(2000); // 2 Sekunden warten
servo1.write(0); // Servos zurück zur Startposition bewegen
servo2.write(180);
}
}
// Wenn der Potentiometerwert unter 990 fällt und die Servos nicht bewegen
if (potValue < 990 && !isMoving) {
moveToTargetPosition(); // Flag setzen, dass der Wert unter 990 gefallen ist
}
// Wenn der Potentiometerwert unter 700 fällt
if (potValue < 700) {
hasCrossed700 = true; // Flag setzen, dass der Wert unter 700 gefallen ist
}
// Wenn der Potentiometerwert über 700 steigt und wir zuvor unter 700 waren
if (potValue > 700 && hasCrossed700) {
moveToStartPosition(); // Beide Servos zurück zur Startposition bewegen
hasCrossed700 = false; // Flag zurücksetzen
}
// Wenn der Potentiometerwert über 990 steigt, setze das isMoving-Flag zurück
if (potValue > 990) {
isMoving = false; // Flag zurücksetzen
}
delay(100); // Kleiner Delay für Stabilität
}
// Funktion zum Bewegen der Servos in die Zielposition
void moveToTargetPosition() {
isMoving = true; // Bewegungsflag setzen
servo1.write(180); // Servo 1 auf Zielposition: 180 Grad
servo2.write(0); // Servo 2 auf Zielposition: 0 Grad
Serial.println("Servos auf Zielpositionen gedreht.");
}
// Funktion zum Bewegen der Servos in die Startposition
void moveToStartPosition() {
isMoving = true; // Bewegungsflag setzen
servo1.write(0); // Servo 1 zurück auf Startposition: 0 Grad
servo2.write(180); // Servo 2 zurück auf Startposition: 180 Grad
Serial.println("Servos zurück auf Startpositionen gedreht.");
}