Arduino code Servo wird nicht angesteuert?
Servus ich bin grad an einem Arduino Projekt wo sich ein Servo um 90 grad drehen soll wenn ein Input gegeben wird (hier durch die infrarot Fernbedienung). Der input wird auch erkannt das habe ich in einem anderen Projekt mit dem seriellen monitor getestet. (ohne alle Teile des Codes die den Servo betreffen) Mein Problem ist das sich der Servo zwar auf die in servoblau.write(0); am Anfang angegebenen 0 grad dreht. Aber nicht auf die 90 grad in der Letzen if Funktion. Das ist der code:
# include <IRremote.h>
#include <Servo.h>
Servo servoblau;
int EmpfaengerPin = 11;
void setup() {
servoblau.attach(8);
IrReceiver.begin(EmpfaengerPin);
}
void loop() {
// put your main code here, to run repeatedly:
servoblau.write(0);
if (IrReceiver.decode())
{
delay(200);
IrReceiver.resume();
if (IrReceiver.decodedIRData.command > 0 && IrReceiver.decodedIRData.command < 95)
{
if (IrReceiver.decodedIRData.command == 69) servoblau.write(90);
}
}
}
2 Antworten
Wie schon geschrieben, der servoblau.write(0) gehört nicht in Loop, sondern in Setup.
Die Abfragen da mit "ist größer 0 und kleiner 95" sind total verzichtbar. Du fragst ab auf == 69, und gut ist...
Dann musst Du noch festlegen, wann das Servo wieder zurückdrehen soll.
du hast servo.write(0) im main loop. und kein delay nach dem servo.write(90). das kann nicht funktionieren. der servo wird zurückgesetzt bevor er sich überhaupt bewegen kann... vllt machst du erstmal nen Grundkurs, bevor du dir code zusammen kopierst ;)
pack ein delay hinter servo.write(90) von bspw. 5000ms oder nimm servo.write(0) aus dem main loop und packs in die setup funktion wo es hingehört.
Deswegen empfehle ich einen Grundlagen-Kurs, damit du auch verstehst, was die einzelnen Befehle machen. der main loop wird permanent immer wieder wiederholt. servo.write(0) setzt deinen servo auf 0. danach fragst du ab ob ein entsprechender code vom ir decoder empfangen wird und setzt dann den servo mit servo.write(90) auf 90 grad. aber direkt danach startet dein main loop wieder von vorne und servo.write(0) setzt ihn auf 0. Das geht extrem schnell, so schnell kann sich kein Servo der Welt bewegen. die setup funktion wird nur einmal ausgeführt beim Start des Microcontrollers. Deswegen macht es Sinn, servo.write(0) da rein zu packen, damit er nur einmalig am Programmstart auf 0 gesetzt wird.
Das mit dem delay hab ich auch schon versucht aber das servo.write 0 ins setup muss wusste ich nicht vielen dank. (die codes sind aus dem funduino erklärheftchen hab versucht die zusammenzufügen)