/*
Titel:
Servo-Positionierung über Potentiometer mit Gradumrechnung und Debug-Ausgabe
Autor: Dario B. Graf Alegiani ([email protected])
Datum: 05.06.2025
Version: 1.0
Beschreibung:
Dieses Programm liest den analogen Wert eines Potentiometers ein, berechnet daraus
einen Winkel in Grad (0–180) und steuert damit die Position eines Servos. Die Umrechnung
erfolgt gleitkommazahlgenau. Beim Start wird der Servo kalibriert. Wird TESTING definiert,
werden die Rohwerte und umgerechneten Winkel seriell ausgegeben.
Änderungsprotokoll:
- Version 1.0 (05.06.2025): Erste Veröffentlichung
*/
//#define TESTING
#include <Servo.h>
#include <SoftwareSerial.h>
Servo Servo1; // Servo-Objekt erzeugen
// Pin-Belegung
const int Servo1PWM {3}; // PWM-Pin für Servo
const int PotSIG {A0}; // Analog-Pin für Potentiometer
// Variablen
double PotWert {0}; // Potentiometerwert (0–1023)
double Winkel {90}; // Umgerechneter Winkel (0–180 Grad)
int ServoTemp {0}; // Zusatzverzögerung für Servo (optional)
void setup() {
pinMode(PotSIG, INPUT); // Potentiometer als Eingang konfigurieren
Servo1.attach(Servo1PWM); // Servo an PWM-Pin anschließen
// Servo-Kalibrierung: Endpositionen + Mitte
Servo1.write(0);
delay(1000);
Servo1.write(180);
delay(1000);
Servo1.write(90);
delay(1000);
#ifdef TESTING
Serial.begin(115200); // Serielle Ausgabe aktivieren (Debug)
#endif
}
void loop() {
PotWert = analogRead(PotSIG); // Potentiometerwert einlesen
Winkel = (PotWert / 1023.0) * 180.0; // Skalierung auf 0–180 Grad (1023 -> max. Wert des Poti)
Servo1.write(Winkel); // Servo auf berechneten Winkel setzen
delay(ServoTemp); // Optionale Pause (derzeit 0)
#ifdef TESTING
Serial.println(PotWert); // Debug: Rohwert anzeigen
Serial.println(Winkel); // Debug: Winkel anzeigen
delay(100); // Kurze Pause zur Lesbarkeit
#endif
}