Go Down

Topic: Problem mit Datenübertragung zum PC (Read 1 time) previous topic - next topic

Se11001

Hm, müsste das nicht eigentlich egal sein? Ist eine If Bedingung erfüllt, werden die inputChar[] Bytes ja auch nur "angschaut" und in eine andere Variable kopiert, und ansonsten nichts gemacht.

michael_x

Quote
nun kommt aber trotzdem nichts an beim Arduino.


Irgendwas wird schon ankommen, wenn der PC was sendet. Mit USB - Verbindung sollte es auch kein Kabel-Problem sein.


Mit sowas wie
Quote
Code: [Select]
      tone(5, 1000, 100);
      delay(200);
      tone(5, 1000, 100);


ist dein Arduino natürlich erstmal beschäftigt, was der PC in dieser Zeit sendet, rauscht erst anschliessend durch deinen 2-Byte Puffer



Se11001

#12
Feb 28, 2013, 06:24 pm Last Edit: Feb 28, 2013, 06:33 pm by Se11001 Reason: 1
Ja schon, aber ich verbinde ja nur einmal und da stören die 200ms nicht wirklich.

Ich habe nun das VB Programm so verändert, dass ich einfach mit Serial.Write arbeite, und siehe da - es kommt etwas an:

Code: [Select]
             Serial.DiscardOutBuffer()
            Serial.Write("P")
            Serial.Write(Lm1)
            O1.Text = Lm1

            Serial.DiscardOutBuffer()
            System.Threading.Thread.Sleep(15)

            V = Analogwert.Value
            Serial.Write("V")
            Serial.Write(V)
            O2.Text = V

            System.Threading.Thread.Sleep(15)

...


Das "Analogwert.Value" ist ein Slider fürs Debuggen, somit kann ich einen beliebigen Wert einstellen.

Der Arduino empfängt jetzt die Buchstaben korrekt und kann so die übertragenen Werte schon richtig zuordnen. Einziges Problem ist, dass die Werte nicht korrekt übertragen werden. Zum Testen habe ich das Programm am Arduino so angepasst, dass er den eingelesenen Wert wieder zurück an den PC schickt. Übertrage ich zum Arduino 0, kommt 48 zurück, bei 1 kommt 49, das geht bis 9 - 57 ab dann kommt immer 48 zurück. Ab undzu springt es auch auf 255.

Wo kann hier noch der Fehler liegen?


michael_x

Quote
Übertrage ich zum Arduino 0, kommt 48 zurück


Das ist kein Fehler ;)
Wenn du mit Basic eine 0 als Text überträgst kommt eine '0' an, und dieser Buchstabe hat den Zahlenwert 48 ( oder 0x30 ) .
Ein 'A' kannst du auch übertragen, das wäre als Zahl eine 65, etc.

Problem ist, wenn du einen Wert > 10 hast, und der als Text, z.B.  "123" übertragen wird.
Dann kommen 3 Byte an: 48, 49, 50 aber du willst nur eins , nämlich die 123.

Die passende Funktion in Basic heisst Chr(x) : Chr(123) = 0x7B = ' { '

Probier mal
Dim val As Byte = Analogwert.Value
Serial.Write("V" & Chr(val))




255 ist die berühmte -1, wenn du ein Serial.Read() machst und gar nichts zu lesen da ist.
Wenn du auch echte 255 hast, musst du
entweder erst auf Serial.available() abfragen, oder in einen int statt ein byte einlesen.

Code: [Select]
int i = Serial.read();
if (i != -1)
{
// i hat jetzt einen Wert zwischen 0 und 255 und kann ohne Informationsverlust als byte verarbeitet werden.
byte c = (byte)i;
}
else
{
  // kein Zeichen zu lesen



Se11001

Ok, danke für die Info - hätte ich mir auch denken können. Ich dachte solange kein " " verwendet wird, wird der Wert an sich gesendet.

Hm, die Funktion Chr(x) scheint nicht existent zu sein? :smiley-slim: (Verwende VB2010 Express)


Go Up