-
        

Ergebnis 1 bis 4 von 4

Thema: Einlesen von Variablen über den PC?

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2010
    Ort
    Nähe Wien
    Alter
    27
    Beiträge
    108

    Einlesen von Variablen über den PC?

    Anzeige

    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:

    Code:
      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

  2. #2
    Robobionic
    Gast
    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.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    13.01.2014
    Beiträge
    398
    Blog-Einträge
    3
    Eine mögliche Lösung:
    Code:
    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
    }

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.12.2010
    Ort
    Nähe Wien
    Alter
    27
    Beiträge
    108
    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 - - -

    Zitat Zitat von Sisor Beitrag anzeigen
    Eine mögliche Lösung:
    Code:
    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!

Ähnliche Themen

  1. Langsame Frequenz über Line-In einlesen
    Von Cysign im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 03.10.2012, 05:02
  2. Daten über RS232 in Matlab einlesen!
    Von mikey88 im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 4
    Letzter Beitrag: 02.11.2009, 21:10
  3. videos einlesen über pcmcia tv karte
    Von rinner im Forum Software, Algorithmen und KI
    Antworten: 1
    Letzter Beitrag: 22.03.2006, 10:52
  4. Frequenz einlesen über den AVR Butterfly
    Von Heiko R. im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 18
    Letzter Beitrag: 15.11.2005, 07:56
  5. [ERLEDIGT] Einlesen über stdin: argv
    Von Blondie im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 27.01.2005, 11:48

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •