Go Down

Topic: Bytes in Array schreiben (Read 2150 times) previous topic - next topic

666

Hi, hat jemand eine idee wie ich 16bit große Zahlen über rs232 zum Arduino schicken und dort in ein Array schreibe?

Mein Wissensstand:

Die 16bit teile ich in 2mal 8bit auf und schicke sie auf die schnittstelle, das ist nicht mein Problem.

Die empfangenen bytes möchte ich nun in meinem array speichern.

Dachte mir, erst mit serial.available warten bis ich Werte bekomme,
dann mit serial.read jedes byte über eine for schleife in mein Array schreiben.
Natürlich vorher mit serial.beginn(9600) den öffnen.

krieg über meinen serial monitor nur y´s mit "ü" strichen drüber.

Hat jemand ne Code Idee?

Liege ich so weit schon mal richtig das der Serial Monitor mir ASCII Zeichen schickt?

Schon mal Danke fürs Gedanken machen
Matthias

666

hier ein Teil des Quelltextes

if (Serial.available())
 {    
      for (int i=0;i<=3;)
   {  
     Summe = Serial.read();      
     Array=Summe ;
     Summe =+ Array;
     i++;
     
   }
 }
 

udoklein

Sind die Baudraten bei Arduino und dem Monitor identisch eingestellt?

Der Monitor schickt auch nur Bytes. Fragt sich ob Du die als ASCII Zeichen interpretieren willst. Auf der Leitung gibt es da keinen Unterschied.

Udo
Check out my experiments http://blog.blinkenlight.net

Jomelo

#3
Aug 26, 2010, 07:07 pm Last Edit: Aug 26, 2010, 07:08 pm by Jomelo Reason: 1
Probier es mal anders zum testen:


while(Serial.available()) {
     Serial.println(Serial.read());        
}

Serial.println("\n\n\n");

Wenn dieser Code immer noch nur Müll ausgibt stimmt irgendwas mit deiner Baudrate nicht.
Du solltest auch testen ob deine Zeichen die du überträgst vielleicht nicht als ascii dargestellt werden können.

[edit]
Da war wer schneller
[/edit]
while(!success){try++;}

666

Ist beides 9600baud.

Hab es halbwegs. Kriege die Daten, kann sie auch zurück schicken.
Probleme hatte ich bei 32767, danach ging nix mehr, hab dann die gesendete Zahle auf ne 2te Variable aufgeteilt, also high un low byte einzeln und dann ging es.
Kann mir einer sagen was das Problem bei 32767 ist?

Jomelo

Das liegt an der Größe des Datentypes:

16bit int geht von [ch8722]32.768 bis 32.767
16bit unsigned int geht dann von 0 bis 65.535

Wenn du deinen Datentyp als unsigned wählst könnte dein 16bit langes word auch ohne teilen gespeichert werden.

Quelle:
http://de.wikipedia.org/wiki/Integer_(Datentyp)
Tabelle zu "Maximaler Wertebereich von Integer"

while(!success){try++;}

666

haben als datentyp long, also daran liegt es nicht.

uwefed

Der Datentyp long ist aber nicht 16 Bit groß sonder 32 Bit mit Vorzeichen.
Grüße Uwe

666

Ich glaub wir haben da Zeitprobleme.

Ich schicke mit c# diverse Werte, will sie mir in ein Array schreiben im µC und sie dann zurück schicken an C#.

Nur nach ca 5 richtig zurückgegebenen Werten gibt er nichts richtiges mehr,

C# und der Arduino stehen beide auf 9600.

Muss ich die for schleife noch zusätlich takten oder so?

Gruß
Matthias

Go Up