Go Down

Topic: Visual Studio 2010 + Arduino Nano Datenaustausch?? (Read 1 time) previous topic - next topic

zwobot

hallo alle miteinander,

ich hoffe ihr könnt mir bei meinem problem weiterhelfen.
folgende situation:

ich habe ein programm das mit vs2010 express geschrieben ist und mir x-y-koordinaten über usb an mein nano sendet.
diese werden dann im nano weiterverarbeitet und am ende werden zwei schrittmotoren entsprechend der koordinaten gestellt.
so sollte es zumindest sein....is es aber natürlich nich.

die rx-diode auf dem nano blinkt zwar wie verrückt aber die schrittmotoren bewegen sich keinen millimeter.
die codezeile in der die x-y-koordinaten von vs2010 gesendet werden sieht folgendermaßen aus:

comPort.WriteLine(x_achse + ";" + y_achse);

x_achse und y_achse sind jeweils zwei int werte.
aus der vs-hilfe bin ich auch nich schlauer geworden, weis nur das mit diesem befehl ein string gesendet wird (da sich der debugger nicht meldet beim compilen denke ich mal das eine typumwandlung von int zu char automatisch erfolgt).

nun meine frage: wer kennt sich mit diesem befehl aus und kann mir sagen wie die daten tatsächlich übertragen werden (klartext).

beispielwerte für x_achse =123
und für              y_achse =456

für das empfangen der daten auf dem nano hatten ich mir folgendes vorgestellt:

while(Serial.available()&& index < 7)
 {
   buf = Serial.read();
   val_buf[index++] = buf;
       
 }
 if(index == 7 && val_buf[3]==';')
 {
   val_buf_x_achse[0] = val_buf[0];
   val_buf_x_achse[1] = val_buf[1];
   val_buf_x_achse[2] = val_buf[2];
   val_buf_y_achse[0] = val_buf[4];
   val_buf_y_achse[1] = val_buf[5];
   val_buf_y_achse[2] = val_buf[6];
   
   x_achse = atoi(val_buf_x_achse);
   y_achse = atoi(val_buf_y_achse);
   index=0;
 }


was hab ich falsch gemacht?? wo liegt der hund begraben?? vielleicht ne doch ne abschließende null am stringende einfügen??
hab langsam nen knoten im hirn....

hoffe ihr könnt mir helfen und bedanke mich schonmal im vorfeld

gruß ZwoBot

uwefed

2 Sachen; strings müssen am Ende mit einer null abgeschlossen sein darum mußt Du hinzufügen:
val_buf_x_achse[3] "0;
dann mußt Du den string in eine int-Variable mit
valx = atof(val_buf_x_achse); umwandeln.
Das gleich gilt für die y Achse.
Außerdem mußt Du sicher sein, daß auch bei kleinen Zahlenwerten immer 3 stellen übertragen werden (009 statt 9).

Mit diesem Code blockiert sich der Arduino nicht wenn weniger Byte übertragen werden. Die Kontrolle von i ergibt ob alle übertragen wurden.
Code: [Select]

long incomingByte;  
char Data[8];
int i=0;
unsigned long Tempo;

...

do {
    if (Serial.available()) {      
      Data[i] = Serial.read();
      i++;
      }    
    if(i<1)Tempo = millis();
    } while (i<7&&(millis()-Tempo) < 500);
 
  Data[i] = 0;    
  incomingByte = atof(Data);  
   i=0;



Grüße Uwe

Go Up