Also bei mir klappt es im Test mit einer LED einwandfrei und ich bekomme auch die Drehrichtung zurück.
Eingabeformat:
1) + oder - senden
2) Geschwindigkeit senden
wenn ich als Geschwindigkeit 200 angebe, leuchtet die LED deutlich.
Bevor du die Drehrichtung änderst, musst du immer ein Komma senden, damit der Motor angehalten wird. Dann kannst du wieder die Drehichtung und Geschwindigkeit festlegen.
Bei der Ansteuerung von Motoren verwendet man häufig Rampen zum kontrollierten Beschleunigen und Abbremsen der Motoren, um Stromspitzen zu vermeiden. Ich poste nochmal einen Code, der Rampen zum Beschleunigen und Abbremsen der Motoren verwendet.
Code:char eingabe = 's'; int geschwindigkeit = 0; void setup(){ Serial.begin(9600); pinMode(11, OUTPUT); pinMode(10, OUTPUT); pinMode(9, OUTPUT); } void loop(){ if (Serial.available()){ eingabe = Serial.read(); } if (eingabe == '+'){ // zuerst überprüfen, ob vorwärts oder rückwarts gefahren werden soll if(Serial.available()){ geschwindigkeit = Serial.read(); // nochmals auf eine Eingabe der Geschwindigkeit warten digitalWrite(10, LOW); // digitalWrite(9, HIGH); // for(int i = 0; i <= geschwindigkeit; i = i + 10){ analogWrite(11, i); // Nun den eingegebenen Wert in das Timer PWM-Register schreiben = Geschwindigkeit regeln delay(20); } Serial.println("LINKS"); } } if (eingabe == '-'){ // dasselbe für Rückwärtsfahrt if(Serial.available()){ geschwindigkeit = Serial.read(); digitalWrite(10, HIGH); // digitalWrite(9, LOW); // for(int i = 0; i <= geschwindigkeit; i = i + 10){ analogWrite(11, i); // Nun den eingegebenen Wert in das Timer PWM-Register schreiben = Geschwindigkeit regeln delay(20); } Serial.println("RECHTS"); } } if (eingabe == ','){ for(int i = geschwindigkeit; i >= 0; i = i - 10){ analogWrite(11, i); // Nun den eingegebenen Wert in das Timer PWM-Register schreiben = Geschwindigkeit regeln delay(20); } geschwindigkeit = 0; Serial.println("STOP"); eingabe = 's'; } }







Zitieren

Lesezeichen