Daten auslesen über USB- Port



  • Hallo ich bräuchte eure Hilfe. Meine Aufgabe ist es einen Mikrocontroller zu programmieren, der über einen USB-Port eine Nachricht sendet und diese muss ich über ein Programm auslesen. Hier der Arduino Code für den Mikrocontroller.

    #define X_STEP_PIN 54
    #define X_DIR_PIN 55
    #define X_ENABLE_PIN 38
    
    #include <AccelStepper.h>
    
    AccelStepper stepperX(1,X_STEP_PIN, X_DIR_PIN);
    
    float rotation = 10;
    void setup() {
      // put your setup code here, to run once:
    Serial.begin(9600);
    
    // Starte den X-Motor.
      stepperX.setEnablePin(X_ENABLE_PIN);
      stepperX.setPinsInverted(false, false, true);
      stepperX.enableOutputs();
    
       // Speed für den X- Schrittmotor.
      stepperX.setMaxSpeed(200*16);
      stepperX.setSpeed(100*16);
      stepperX.setAcceleration(1000);
    
      
      
    }
    
    void loop() {
    ;
      while (Serial.available() == 0) {
        Serial.print("B");
        delay(1000);
      }     //wait for data available
      String teststr = Serial.readString();  //read until timeout
      teststr.trim();                        // remove any \r \n whitespace at the end of the String
      if (teststr == "A") {
        Serial.println("Turning Motor");
        stepperX.runToNewPosition(rotation);
        rotation += 10;
      } else {
        Serial.println("Something else");
         stepperX.disableOutputs();
      }
    delay(1000);
    }
    

    Das funktioniert auch wunderbar. Über den seriellen Monitor der Arduino IDE sehe ich, dass dauerhaft der Buchstabe B gesendet wird. Auch die Eingabe des Buchstabens A führt dazu, dass sich der Motor dreht. Aber meine Aufgabe ist es dies über ein Programm zu schreiben. Dazu verwende ich die Library von Link Text.
    Nun der Code für das Programm : ```cpp
    #include "serialib.h"
    #include "serialib.cpp"
    #include <iostream>

    int main () {
    serialib serial;
    if (serial.openDevice("COM3", 9600) != 1) {
    std::cout << "Couldnt open connection" << std::endl;
    return 1;
    }
    int z = serial.available();
    std::cout << z << std::endl;

    char* data = "a";
    int x = serial.readChar(data, 0);
    std::cout << data << std::endl;
    

    }

    Bei der Ausgabe sehe ich, dass Daten im Buffer sind, aber es wird nie der Buchstabe B ausgelesen, sondern immer nur a zurückgegeben. Wo liegt mein Fehler?. Vielen Dank.


  • @Aousui sagte in Daten auslesen über USB- Port:

    int main () {
    serialib serial;
    if (serial.openDevice("COM3", 9600) != 1) {
    std::cout << "Couldnt open connection" << std::endl;
    return 1;
    }
    int z = serial.available();
    std::cout << z << std::endl;
    char* data = "a";
    int x = serial.readChar(data, 0);
    std::cout << data << std::endl;

    Probleme:

    • Du achtest nicht auf Rückgabewerte.
    • char* data zeigt auf einen konstanten String -> da muss ein char data[32]stehen
    • Du musst bei serial.readChar die Parameter überprüfen. Ich vermute der erste Parameter entspricht dem Puffer data, wohin er die empfangenen Daten schreiben soll und der zweite Parameter der maximalen Größe des Puffer in Bytes. In meinem Fall 32.


  • Entschuldige bin Anfänger in der Programmierung hihi. Jetzt funktioniert es vielen dank dir.


Log in to reply