Go Down

Topic: Anfänger braucht Hilfe: Serielle Daten auslesen und weiterverarbeiten (Read 14064 times) previous topic - next topic

Phreak2010

Okay, blöde Frage... Im Root des LIB Ordner, oder im Lib Ordner einen Unterordner AltSoftSerial erstellen?

Und wenn diese installiert sind, dann einfach den Code eingeben der auf der Seite steht und auf den Uno Hochladen?


Serenifly

x:\Arduino\libraries
In der .zip Datei ist ein Ordner. Den kopierst du da so wie er ist zu den anderen Bibliotheken

Hast du noch nie etwas in C/C++ programmiert? #include Direktiven stehen immer ganz am Anfang. Schau dir halt den Code auf der Seite an. Bei AltSoftSerial ist das sogar als fertiges Beispiel dabei.

Brauchen davon tust du das:
Code: [Select]

#include <AltSoftSerial.h>

AltSoftSerial altSerial;

void setup() {
  Serial.begin(9600);
  while (!Serial) ; // wait for Arduino Serial Monitor to open
  Serial.println("AltSoftSerial Test Begin");

  altSerial.begin(9600);
}

void loop() {
  char c;

  if (altSerial.available())
  {
    c = altSerial.read();
    Serial.print(c);
  }
}


Baudrate eventuell anpassen wenn nötig

Phreak2010

Also das was ich damals mit C programmieren musste ist leider nicht der Rede wert.

Meine Baudrate ist 9600. Das passt.

MIt diesem Code kommt folgendes Ergebnis im seriellen Monitor:
http://www.bilder-upload.eu/show.php?file=22f572-1435153702.jpg
http://www.bilder-upload.eu/show.php?file=3163c5-1435153802.jpg

Wobei die Zeichen, die Vorausgehen sich immer ändern.

Ich musste Fotos mache , da ich des zwar mit strg+c kopieren, aber irgendwie nicht einfügen konnte.

Serenifly

Mhh, etwas seltsam. Am Anfang dürfte eigentlich nichts kommen. Ist aber nicht so schlimm. Und danach kommt nichts mehr? Dann passt irgendwas nicht

Wie gesagt, eventuell mal RX/TX Kabel zum Pegelwandler vertauschen. Und auf dem UNO mit AltSoftSerial ist RX auf Pin 8 und TX auf Pin 9

Phreak2010

Danke, das probiere ich direkt mal aus, mit Pin 8 und 9, also tx auf Pin 9 mit der Wellenlinie davor und Rx auf 8 und ggf mal untereinander vertauschen?

Deinen Code habe ich eben einfach mal direkt hochgeladen, also den ursprünglichen, ohne die Modifikation,, die danach kam.

Herausgekommen ist folgendes:
http://www.bilder-upload.eu/show.php?file=7aa496-1435154554.jpg


Serenifly

Versteh erst mal den Code. Der liest nämlich nichts von der seriellen Schnittstelle ein!! Ich habe da die Strings einfach fest reingeschrieben. Da ging es darum das Parsen zu zeigen.

Zum Einlesen brauchst du die read_serial() Funktion hier:
http://forum.arduino.cc/index.php?topic=329469.msg2273780#msg2273780

Und zwar so umschreiben dass es mit softSerial geht. Also statt:
Code: [Select]

  while (Serial.available())
  {
    char c = Serial.read();


So:
Code: [Select]


  while (softSerial.available())
  {
    char c = softSerial.read();


Außerdem musst du den Puffer größer machen. Mindestens auf maximale Zeilenlänge + 1

Und dann in loop() erst mal so:
Code: [Select]

void loop()
{
  if (read_serial())
  {
    Serial.println(serial_buffer));
  }
}



Dazu muss aber erst mal die Übertragung so gehen! Deshalb habe ich dir dazu geraten das Schrittweise zu machen. Gerade weil du keinen Plan hast was du machen musst.

Phreak2010

Ja, das Schrittweise hat auch absolut Sinn, denn im Moment tu ich mich unheimlich schwer damit. Ich hoffe, das kommt noch.

Wenn ich jetzt an die Pins 8 und 9 gehe erscheint bei der einen Konstellation AltSoftSerial Test Begin ohne die komischen Zeichen davor, wenn ich RX und TX vertausche, dann erscheint erst das gleiche und danach rasten scheinbar Wahllose Buchstaben ziemlich schnell über den Serial Monitor. Etwas wirklich lesbares war leider nicht dabei.

Am Uno leuchtet die TX Lampe, die RX bleibt aus, wenn ich die Pins vertausche bleiben beide LED´s aus.

Ich glaube, irgendwas mache ich da falsch... Wohl bemerkt mit dem  Test Code für AltSoftSerial. Deinen habe ich jetzt wieder komplett heraus genommen.


Serenifly

Wenn irgendwelche unlesbaren Zeichen ankommen liegt das i.d.R. an einer falsch eingestellten Baudrate. Also es kommt was an, aber wird mit der falschen Frequenz abgetastet und kann daher nicht dekodiert werden.

Aber das hattest du gesagt stimmt. Was war den die nötige Einstellung in HTerm? Und auch welches Datenformat? Ich hoffe mal 8N1 (8 Datenbits, 1 Stop-Bit, keine Parität). Ein Problem mit AltSoftSerial ist nämlich, dass es nur ein Datenformat beherrscht. 8N1 ist Standard, aber es gibt auch Geräte die was anders haben.

Phreak2010

Also die Baudrate in Hterm war 9600. Diese fand sich auch im Code wieder, sowie im Fenster des Seriellen Monitors.

Ich habe gerade noch mal hterm laufen, habe nur den Com ausgewählt, 9600 Baud eingestellt und auf Ascii geklickt. Schon kommen lesbare Daten. Zwar mit den komischen Zeichen dazwischen, wie du sie vielleicht von den Bildern noch kennst :) Aber es ist Reinschrift.

Sonst hab ich keine Werte gesetzt oder Haken gesetzt

Was vielleicht interessant ist: Unten in Hterm steht: Connect to COM4 (b:9600 d:8 s:1 p:none)

Hat das etwas zu sagen? Anbei ein "screenshot" da mein Netbook zum experimentieren nicht am Netzt hängt und ich schreibe vom Mac aus, da soll es, wie ich gelesen hae etwas umständlicher sein, Adruino zu betreiben...

http://www.bilder-upload.eu/show.php?file=58f988-1435157952.jpg

Serenifly

Gut. Also nichts exotisches. Ganz normal 9600/8N1 :)

Dann sollte es aber eigentlich gehen.... :( Vielleicht kann jemand anderes mal was dazu sagen.



Quote
Zwar mit den komischen Zeichen dazwischen
Das sind keine komischen Zeichen, sondern CR + LF. Also der Zeilenumbruch. Wenn du auf dem Arduino println() machst oder auch in einer Text-Datei eine neue Zeile anfängst ist das genauso.

Phreak2010

Hmm um so mehr irritiert mich das nun. Denn pin 8 und 9, Masse und 3,3v... Da hab ich denk ich mal nichts falsch gemacht.

Und viel mehr kann ich ja in diesem Test nicht einstellen. Komisch :(

Serenifly

3,3V? Das hatte ich ganz übersehen! Schließe da mal 5V an. Dein UNO läuft mit 5V und der MAX3232 geht auch mit 5V

Phreak2010

Hmm hab ich gerade getan...

Jetzt rasen die Schriftzeichen nicht mehr so schnell durch den Serial Monitor, sondern aktualisieren sich blockweise im ca. 3 Sekunden Takt. Aber leider ist diesmal auch wieder keine Reinschrift dabei, sondern nur wahllose Buchstaben, die keinen Sinn ergeben :(

Phreak2010

An meinem Stecker sind auch nur 3 Pins belegt, Nämlich 1,3 und 4. Kann es sein, dass der Max3232 das Signal an einem anderen Pin erwartet?


Go Up