Anfänger braucht Hilfe: Serielle Daten auslesen und weiterverarbeiten

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?

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:

#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

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.

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

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

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:

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

So:

  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:

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.

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.

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.

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 :slight_smile: 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

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

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

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.

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 :frowning:

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

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 :frowning:

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?

Das ist die Standard-Belegung:

Also 2, 3 und 5

Hmm das passt. Also betrachtet man die Max3232 Platine, dann sind es an diesem Stecker die Ins 2,3 und 5, betrachtet man das Kabel, die von meinem Computer kommen, dann sind es die 1,3 und 4.

Wenn was ankommt wird die wahrscheinlich Verkabelung passen. Irgendwelche Signale werden wohl detektiert. Wobei das auf deinem ursprünglichen Bild mit den Pfeilen nicht so passt:


Ich nehme mal das ist jetzt anders

Du kannst mal probieren die Baudrate der Hardware Schnittstelle (d.h. Serial) höher zu machen. So dass schneller gesendet als empfangen wird. Das gleich schnell zu machen ist vielleicht keine so gute Idee. Aber mit richtigen RS-232 Geräten und dem Arduino habe ich selbst keine große Erfahrung. Wobei das theoretisch ziemlich simpel ist. Und MAX232 habe ich schon öfters auf anderen µC verwendet.

Ja, das ist jetzt anders, dabei ging es mir primär um die TX/RX Anschlüsse... Aber das ist ja jetzt eh anders mit Pin 8 und 9.

Du meinst im Code schon mal auf 19200 baud gehen zum Beispiel? Am Computer, der die Daten liefert kann ich leider nichts einstellen.

Sehe ich das richtig, dass es jetzt im Seriellen Monitor wie in Hterm aussehen müsste?

Phreak2010:
Du meinst im Code schon mal auf 19200 baud gehen zum Beispiel? Am Computer, der die Daten liefert kann ich leider nichts einstellen.

Ich sagte ja die Hardwareschnittstelle. Also USB zum Computer. Das zum Gerät ist nur eine Software-Emulation. Die ist schlechter als Hardware, aber mit AltSoftSerial sollte das gehen.

Sehe ich das richtig, dass es jetzt im Seriellen Monitor wie in Hterm aussehen müsste?

Ja, wobei die CR+LF Zeichen da nicht anzeigt werden und der Zeilenumbruch automatisch gemacht wird.

Du kannst ich aber auch mit HTerm mit dem Arduino verbinden wenn du willst.

Das habe ich gerade probiert. Leider auch ohne Erfolg.Gibgt es noch alternativen zu AltSoftSerial? Vielleicht kommt das AltSoftSerial einfach nicht mit den Daten zurecht?