PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Einlesen von Variablen über den PC?



ijjiij
15.08.2015, 16:46
Hallo miteinander!

Nach längerer Pause sitze ich jetzt wieder an einem neuen Projekt.
Diesmal mit einem Arduino Mega 2560 aus Steuerung.

Dabei soll ein Schrittmotor eine Anzahl an Drehungen machen, die ich vorher über den Seriellen Monitor vom PC einlese.

Der Teil mit dem Schrittmotor funktioniert soweit auch.
Was ich irgendwie nicht gebacken bekomme, ist das Einlesen vom PC.

Mein bisher (vermutlich) bester Versuch war:


Serial.println("Bitte die gewünschte Länge eingeben:");
if(Serial.available()>0)
{
laenge = Serial.read();
Serial.println(laenge, DEC);
}

Allerdings läuft in der Konsole ständig nur:

Bitte die gewünschte Länge eingeben:
0
Bitte die gewünschte Länge eingeben:
0
Bitte die gewünschte Länge eingeben:
0
Bitte die gewünschte Länge eingeben:
0
Bitte die gewünschte Länge eingeben:
0

Und das bis in die Unendlichkeit....

Kann mir da vielleicht jemand weiterhelfen?

Vielen Dank und liebe Grüße,
ijjiij

Robobionic
15.08.2015, 18:10
Hallo,

Du führst Deinen code ja auch in einer Schleife aus.
Es wird nicht auf eine Eingabe gewartet sondern nur überprüft ob Serial available ist.

Da dies immer der Fall ist steht auch immer das gleiche in der Ausgabe weil laenge 0 ist.

Bitte die gewünschte Länge eingeben:
0

Nimm erstmal das Serial.println("Bitte die gewünschte Länge eingeben:"); aus dem loop sonst wird das natürlich bei jedem Durchlauf ausgegeben.
Und füg nach dem Serial.Read(); folgendes ein.

if (laenge == 1) {
Serial.println(laenge, DEC); }

oder am besten gleich ein switch

switch(laenge)
{
case 1:
Serial.println(laenge, DEC);
break;
case 2:
Serial.println(laenge, DEC);
break;
default:
break;
}

Damit erreichst Du, dass nur dann eine Ausgabe erfolgt wenn die Eingabe 1 oder 2 war.
Und noch was ist laenge als int deklariert? Zur Not zeigst Du uns mal Deinen gesamten loop.

Sisor
15.08.2015, 19:35
Eine mögliche Lösung:

void setup() {
Serial.begin(9600);
}

void loop() {
Serial.println("Bitte die gewuenschte Laenge eingeben:");
while (!Serial.available()); // warte auf Eingabe
if (Serial.available() > 0) {
int laenge = Serial.parseInt(); // Integer-Zahl auslesen [parseFloat() bei Fliesskommazahl]
Serial.print("Laenge mal 2: ");
Serial.println(laenge*2); // Mit Zahl rechnen und Ergenbnis ausgeben
}
while (Serial.available()) Serial.read(); // Serial-Puffer durch Lesen löschen
}

ijjiij
15.08.2015, 19:52
Hallo,

vielen Dank für deine Antwort!
Die Abfrage hab ich absichtlich in die Loop gepackt, da der Ablauf (Abfrage, Motorbewegung) sich immer wiederholen sollte...

Also um konkret zu sein:
Es soll die zurückzulegende Läge für das Förderband eingelesen werden.
Dann dreht sich das Förderband bzw. der Schrittmotor die entsprechende Distanz weiter, bzw. einige Male hin und her.
Danach soll wieder eine andere Länge eingelesen werden und der Vorgang wird wiederholt.

Daher steht die Abfrage in dem Loop drin.

Ist es möglich die Loop so lange an der Stelle zu pausieren, solange bis der Byte übertragen wurde?
Ansonsten müsste ich mir eine andere Möglichkeit überlegen...

- - - Aktualisiert - - -


Eine mögliche Lösung:

void setup() {
Serial.begin(9600);
}

void loop() {
Serial.println("Bitte die gewuenschte Laenge eingeben:");
while (!Serial.available()); // warte auf Eingabe
if (Serial.available() > 0) {
int laenge = Serial.parseInt(); // Integer-Zahl auslesen [parseFloat() bei Fliesskommazahl]
Serial.print("Laenge mal 2: ");
Serial.println(laenge*2); // Mit Zahl rechnen und Ergenbnis ausgeben
}
while (Serial.available()) Serial.read(); // Serial-Puffer durch Lesen löschen
}


Vielen Dank!

Funktioniert perfekt!