- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 9 von 9

Thema: Kommunikation zwischen Arduino und Matlab

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    BraucheHilfe
    Gast
    okay vestehe, es kann also nicht unterschieden werden. Habe jetzt den serial.print(":") eingefügt. Hat soweit erstmal leider auch nichts geholfen.
    Ich habe jetzt mal debugged. Die Variable a (siehe code) kann er noch einlesen. Das wirklich komische ist aber, dass im workspace für a ein leerer Array steht also []. Dann ist auch versändlich, dass
    Matlab in der nächste Zeile streikt bei voltage1(i)=a; da er ja an die Stelle i keinen Array schreiben kann. Daher kommt der 'dimension mismatch'.

    Code:
    while i<=Zeit
        a=fscanf(serialport,'%f:');
        voltage1(i)= a;
        time(i)=i;
        i=i+1;
    end
    Die Ausgabe in der Arduino Konsole schaut nun so aus:
    Code:
             0.00:0.00:0.00:0.00:...
    Also wieder Leerzeichen die am Anfang stehen. Da stellt sich mir jetzt die Frage, ob das Board die Leerzeichen am Anfang an Matlab sendet und daher als Wert von a ein leeres array schreibt?

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    dann versuch es nochmal mit println OHNE :
    und statt fscanf mit readline (das ließt immer bis zum nächsten \n) und dann sscanf auf den gelesenen String ... ich glaube diesmal hab ich es richtig geschrieben XD

    dann kannst du das gelesene auch besser debuggen, also ob evtl. müll empfangen wurde
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  3. #3
    BraucheHilfe
    Gast
    Also das mit readline geht ja glaub ich nur wenn ich eine Datai einlese oder? Ich möchte es aber direkt vom Serialport einlesen.
    Ich habe nochmal was neues probiert.

    Arduino code:
    Code:
    const float sensorVoltage=A0;
    void setup() {
      Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps
    }
    void loop() {
      int inputVoltage2=analogRead(sensorVoltage); // Spannungswert im bereich zw 0-1023  
      float voltage2=5*inputVoltage2/1024;  // Skalierung auf 0-5V
      Serial.println(voltage2);
      
    }
    und der Matlab code:
    Code:
    delete(instrfind({'Port'},{'COM5'}));
    s = serial('COM5', 'BaudRate', 9600);
    fopen(s);
    a=fscanf(s,'%f');
    disp(a)
    Im workspace erhalte ich :
    Wert: Value:
    a 1x7 char

    aber wenn ich a öffne oder ausgebe (disp(a)) steht dort lediglich: ÿ0.00
    Warum wird es mir in char gespeicht? Der hintere Wert 0.00 passt aber. Er erstellt einen char array und setzt mir komische Zeichen davor... Wieso?
    Gruß

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    40
    Beiträge
    3.416
    das "ÿ" steht für 255, also ist dein Serialport nicht ganz sauber oder produziert im ersten Moment Müll, hier sollte man einen anderen Ansatz versuchen!

    Aber nochmal zum readline ... readline wartet immer bis zum Empfang eines newline oder kurz "\n" befor es von der Ausführung zurückkommt, genauso wie dein fscanf versucht erst den angegebenen Wert zu interpretieren

    fscanf das f vorne steht übrigens für file, ein serialstream ist das gleiche wie ein filestream die sind identisch bis auf dass die Datei bis zum EOF schon da ist, während der serialstream quasi erst über den input aufgebaut wird

    Für den veränderten Ansatz und um das überschüssige 0xFF loszuwerden könntest du mal über ein Handshake nachdenken, bei dem du erst ein Zeichen von Arduion bekommst, dann ein Zeichen zum Synchronisieren schickst, dass der Arduino mit einer passende Antwort bestätigen muss ... danach kannst du davon ausgehen immer die Zeichen in der gleichen Reihenfolge zu Empfangen .... oder du machst die Lösung mit dem ":" nochmal und machst einfach solange read() auf deinen stream biss du ein ":" erhälst und beginnst danach erst mit fscanf, also das ":" zum synchronisieren

    UART am PC ist invertiert, solang dein Controller also keinen Pegel auf die Leitung legt, denkt dein Computer du sendest nur 1en, bricht dann nach einem internen timeout ab verwirft den fehler dass er kein stopbit erhalten hat und speichert eben 0xff/255/0b11111111 im stream ... und darüber stolpert dein fscanf
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  5. #5
    BraucheHilfe
    Gast
    Vielen Dank ,
    habe es mit dem ":" auf die Reihe bekommen =)
    Gruß

Ähnliche Themen

  1. Antworten: 0
    Letzter Beitrag: 26.02.2014, 07:09
  2. I²C Kommunikation zwischen AVR - PIC
    Von Eigo im Forum Robby RP6
    Antworten: 2
    Letzter Beitrag: 17.05.2010, 20:02
  3. Kommunikation in Matlab über RS232
    Von timmy83 im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 4
    Letzter Beitrag: 22.02.2007, 19:01
  4. Kommunikation zwischen uP und Pc
    Von XC866 im Forum C - Programmierung (GCC u.a.)
    Antworten: 3
    Letzter Beitrag: 14.02.2007, 14:48
  5. Kommunikation zwischen PC und BOT
    Von corpsealive im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 9
    Letzter Beitrag: 07.07.2006, 06:40

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

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

LiFePO4 Speicher Test