Motorgeschwindigkeit über Serielle Schnittstelle eingeben

Guten Tag zusammen,

wie kann ich über die Serielle Schnittstelle die Motorgeschwindigkeit eingeben?
Als Anfänger verzweifel ich da gerade ein wenig,....

Hier mal die Katastrophe, die ich bis jetzt zusammengetippt habe...

int direction =12;
int speed=3;
int v;
void setup(){
pinMode(direction,OUTPUT);
pinMode(speed,OUTPUT);
Serial.begin(9600);
Serial.println("Motorgeschwindigkeit eingeben");
}
void loop(){
digitalWrite(direction,LOW);
v=Serial.read();
analogWrite(speedA,v);
delay(2000);
analogWrite(speedA,LOW);
}

  • Du kannst nur etwas von der Seriellen Schnittstelleempfangen, wenn auch etwas da ist! Dazu empfiehlt es sich, vor dem Lesen mit if (Serial.available() > 0) zu überprüfen, ob tatsächlich etwas gesendet wurde.
  • Serial.read() gibt dir den ASCII Code des empfangenen Zeichens zurück. Da du hier Dezimalzahlen in Integer umwandeln willst, bietet sich stattdessen die Funktion Serial.parseInt() an. Die gibt dir eine Ganzzahl zurück.
  • Ein Delay während der Eingabe ist äußerst ungünstig, wenn deine Steuerung schnell reagieren soll. Raus damit!
  • "speedA" ist nicht als Variable deklariert, stattdessen nur "speed". Du musst immer dieselben Bezeichnungen verwenden.

ungetester korrigierter Code:

const int direction =12;
const int speed = 3;

void setup(){
 pinMode(direction,OUTPUT);
 pinMode(speed,OUTPUT);
 digitalWrite(direction,HIGH);
 Serial.begin(9600);
 Serial.println("Motorgeschwindigkeit eingeben");
}
void loop(){
  if (Serial.available() > 0){
    int v = Serial.parseInt();
    analogWrite(speed,v);
  }
}

Gruß,
Marv

Schau dir mal in das, mit der Arduino-IDE mitgelieferte Beispiel
Communication > ReadASCIIstring an.
Da wird genau das beschrieben.