Hallo, ich bin neu beim Programmieren und möchte gerne ein Programm erstellen mit 2 Beweglichen Achsen für die Sonne verfolgung. Habe nach Vorlage gearbeitet! Das Problem ist jetzt ich muss ja 2x die Differenz ausrechnen. 1x zwischen dem LDR links-rechts und 1x zwischen dem LDR oben-unten. bekomme aktuell eine Fehlermeldung, da ich nich weiß wie ich diese unterschiedlich diffieren/bennen kann. Hier das Programm:
// Servo-Library einbinden
#include
// Servo-Objekt horizontal erzeugen, Motor rechts-links
Servo horizontal;
// Startwinkel für den Servo horizontal (Bereich 0-179 Grad)
int servoh = 90;
// Servo-Objekt vertikal erzeugen, Motor oben-unten
Servo vertikal;
// Startwinkel für den Servo vertikal (Bereich 0-90 Grad)
int servov = 45;
void setup() {
// Serielle Schnittstelle initialisieren
Serial.begin(9600);
// Pin 5 PWM als Ausgabe-Pin
pinMode(5, OUTPUT);
// Pin 5 PWM ist Steuerpin für den Servo horizontal, Motor rechts-links
horizontal.attach(5);
horizontal.write(servoh);
delay(20);
// Pin 6 PWM als Ausgabe-Pin
pinMode(6, OUTPUT);
// Pin 6 PWM ist Steuerpin für den Servo vertikal, Motor oben-unten, Startwinkel setzen und warte Zeit
vertikal.attach(6);
vertikal.write(servov);
delay(20);
}
void loop() {
// Helligkeit der 2 lichtempfindlichen Widerstände für horizontal auslesen (Rechts)
int rightEye = analogRead(0);
// Faktor 1.0 anpassen, wenn die Widerstände sehr unterschiedlich sind (Links)
int leftEye = analogRead(1) * 1.0;
// Differenz horizontal ausrechnen
int diff = (rightEye - leftEye);
// Wenn rechts deutlich heller als links -> 2 Grad nach rechts drehen
if (diff > 20) {
servoh = servoh + 2;
}
// Wenn links deutlich heller als rechts -> 2 Grad nach links drehen
if (diff < -20) {
servoh = servoh - 2;
}
// Servo horizontal max. bis 179 Grad drehen
if (servoh > 179) {
servoh = 179;
}
// Servo horizontal min. bis 0 Grad drehen
if (servoh < 0) {
servoh = 0;
}
// Grad an den Servo horizontal schicken
horizontal.write(servoh);
// Warte Zeit bis der Servo horizontal gefahren ist
delay(100);
// Helligkeit der 2 lichtempfindlichen Widerstände für vertikal auslesen (Oben)
int aboveEye = analogRead(2);
// Faktor 1.0 anpassen, wenn die Widerstände sehr unterschiedlich sind (Unten)
int belowEye = analogRead(3) * 1.0;
// Differenz vertikal ausrechnen
int diff = (aboveEye - belowEye);
// Wenn oben deutlich heller als unten -> 2 Grad nach oben drehen
if (diff > 20) {
servov = servov + 2;
}
// Wenn unten deutlich heller als oben -> 2 Grad nach unten drehen
if (diff < -20) {
servov = servov - 2;
}
// Servo vertikal max. bis 90 Grad drehen
if (servov > 90) {
servov = 90;
}
// Servo vertikal min. bis 0 Grad drehen
if (servov < 0) {
servov = 0;
}
// Grad an den Servo horizontal schicken
vertikal.write(servov);
// Die beiden Helligkeitswerte zu Testzwecken an den PC übertragen
Serial.println(String(rightEye) + "-" + String(leftEye));
Serial.println(String(aboveEye) + "-" + String(belowEye));
// Kurze Wartezeit, dann nächste Messung.
// Sollte es beim Testen der Einstellungen zu chaotisch werden,
// diesen Wert einfach auf 50 oder 100 erhöhen und damit den Vorgang verlangsamen
delay(20);
}
PS.: Die Zeiten werden natürlich noch angepasst, ist erstmal zum testen!