Anfänger braucht Hilfe: Serielle Daten auslesen und weiterverarbeiten

Aaaaalso, die Teile sind heute endlich gekommen.

Ich habe einen Versuchaufbau gestartet, traue mich aber nicht wirklich, Strom darauf zu geben :slight_smile:

Das Display habe fast so wie auf dem folgenden Link angeschlossen, einzige Änderung: Ich habe den Poti der zur Helligkeitsregelung da ist einfach weg gelassen und den Pin, der in folgendem Link mit RS gekennzeichnet ist einfach nicht belegt.

Den Max3232 Adapter gemäß folgendem Bild:

Da meine Platine etwas anders aussieht:

Gnd an Gnd
Vccvom Max3232 an 3,3V am Uno
RXD am Max3232 an TX am Uno
TXD am Max3232 an RX am Uno

Jetzt könnte ich theoretisch den Uno über USB mit dem PC verbinden und Serenifly´s Code Entwurf einfach mal ausprobieren, ist das korrekt, ohne dabei etwas abzuschießen? :slight_smile:

Lass das Display erst mal ganz weg. Das ist nur eine weitere Baustelle.

Verwende AltSoftSerial um eine serielle Schnittstelle auf Pins 8 und 9 zu emulieren:
https://www.pjrc.com/teensy/td_libs_AltSoftSerial.html
(die Library ist wichtig, da die normale Software Serial Klasse Schrott ist)

Und dann als ersten Test erst mal die Software Schnittstelle auf die Hardware Schnittstelle umleiten. Siehe #Reply 1. Dann kannst du dir das im Serial Monitor ansehen.
Dann nmm erst die read_serial() Funktion aus dem Link und ändere die so um, dass du von Software Serial liest. Wenn du was empfängst, gib den gesamten String auf der Hardware Schnittstelle aus. Danach kannst du die Parse Funktion einbinden (dabei auch die Verbesserung aus #Reply 23 beachten). Das kann man alles Schritt für Schritt machen.

Wenn das passt kannst du dich um das Display kümmern.

Das Modul muss übrigens nicht gekreuzt sein. RX kann auch heißen dass man da RX anschließen muss. Das kann man aber ausprobieren.

Generell:
Pins 0/1 sind mit der USB Buchse verbunden über die du den UNO programmierst. Deshalb kannst du da sonst nichts anschließen während der UNO am PC hängt. Durch die Software Schnittstelle hast du dieses Problem nicht. Damit kannst du gleichzeitig am PC und am Gerät hängen.

DU meinst die AltSoftSerial.cpp in das Arduino Fenster ziehen?

Dann die Hardware an den MAX anschließen und umleiten und im Serial Monotor schauen, ob sich was tut? Ich glaube ich stehe gerade auf dem Schlauch ;(

DU meinst die AltSoftSerial.cpp in das Arduino Fenster ziehen?

Nein. Libraries installierst du indem du die .zip Datei in den libraries Ordner der IDE entpackst

Und dann

#include <AltSoftSerial.h>

Siehe Code auf der Seite. Da ist auch genau der Code im die Schnittstellen beidseitig ineinander umzuleiten. Wobei du nur eine Richtung brauchst.

Dann die Hardware an den MAX anschließen und umleiten und im Serial Monotor schauen, ob sich was tut?

Ja. Damit hast du erst mal so wenig andere Fehlerquellen wie möglich.

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.