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';
}
}
Lesezeichen