Hallo,
ich möchte mit meinem Raspberry Serielle Daten lesen und Verarbeiten.
Hierfür möchte (besonders der Performance willen) ein kleines C-Tool
schreiben.
wie ich den Seriellen Port öffne und beschreibe bekomm ich hin... aber
beim lesen hängt es
=> ich weiß, dass ich "eine zeit lang lesen" muss, weil ja auch die
Serielle Schnittstelle braucht... aber wie mach ich das am
geschicktesten, dass ich wirklich am Terminal lese bis zum nächsten
"<cr><lf>"
ich bin für jeden Tipp dankbar ;)
wie schon oben erwähnt, arbeite ich mit einem Raspberry... momentan
hängt über USB (9600 Baud) noch ein Arduino dran (auch hier wundert es
mich, dass ich nirgendwo die "geschwindigkeit" declarieren kann), später
soll ein Messmodul seine Dienste verrichten... einerseits werden die
Daten in eine Datenbank geschrieben, andererseits, soll ein webinterface
livedaten abrufen...
tausend Dank
baer schrieb:> aber wie mach ich das am> geschicktesten, dass ich wirklich am Terminal lese bis zum nächsten> "<cr><lf>"
einfach immer 1 Byte lesen und prüfen ob das ende erreicht wurde.
erstmal vielen DANK...
evtl. hätte ich dazuschreiben müssen, dass meine C-Künste eher
anfängerhaft sind...
Auf google finde ich nicht sonderlich viel (vorallem weil sie suche nach
dem buchstaben C nicht immer gleich als "Programmiersprache" erkannt
wird).
ich habe sowas schon getestet...
int ttg = 0;
char * res;
while (ttg < 999) {
res[ttg] = read(rd, reply, 10);
ttg++;
}
printf("%s\n", res);
leider ohne erfolg...
ich fürchte, das read() alleine nicht ausreicht!?
&wie kann ich beim öffnen der Verbindung open( device, O_RDWR ), die
Baud rate mit angeben?
baer schrieb:> vorallem weil sie suche nach dem buchstaben C nicht immer gleich als> "Programmiersprache" erkannt wird
Das Problem hab ich auch oft. Kennt jemand einen trick?
Gruß Jonas
Hi,
ich habe mal den "buf" auf 255 erhöt.. nun bekomm ich überhaut mal was
zurück:
char buf[255];
read(fd, buf, 255);
printf("%s\n", buf);
allerdings sieht der Wert so aus:
xòv¼CÞ~¸CÞ~·CÞ~
(und hat auch keine "Konsistenz")
mit der "Klasse" termios habe ich die Baud rate auf 9600 gesetzt...
leider ohne Auswirkungen... <- weder lesen noch schreiben!
Momentan meldet der Arduino:
LED ist eingeschaltet!
ODER
LED ist ausgeschaltet!
allerdings nicht lesbar für den PI...
Moin,
So einfach ist das nun auch wieder nicht. Du must dir deinen Port
natürlich auch configurieren.
http://stackoverflow.com/questions/6947413/how-to-open-read-and-write-from-serial-port-in-c
Sieht auf den ersten Blick nach einem netten Beispiel aus.
PS: Wenn du C nicht kannst, dann würde ich an deiner Stelle etwas
anderes benutzen. Python z.Bsp. (Bietet sich auf dem RaspPi ja an^^).
Um geschwindigkeit kannst du dir dann Sorgen machen, wenn es so weit
ist. Dann kannst du auch C Module in Python einbinden. Das ist ziemlich
einfach.
Wenn du gleich in C Startest holst du dir an anderer Stelle Probleme
rein, die dir evtl. den Spaß verderben.
PPS: Steck mal das C in "" bei der Google Suche. Hilft..
Grüße,
Wolfgang schrieb:> Jonas G. schrieb:>> Das Problem hab ich auch oft. Kennt jemand einen trick?>> Nimm eine Sprache mit einem vernünftigen Namen, z.B. Fortran ;-)
Programmierer sollten halt etwas kreativer werden und ihre sprachen
nicht nach dem Alphabet benennen :)
@Heinz
erstmal vielen dank... das "Inspiriert" ... leider bekomm ichs trotzdem
nicht ganz hin!
hast du evtl. einen kompletten Testcode? Mein Pi (bzw. gcc kann nicht
viel mit uint16_t anfangen, allerdings müsste unsigned int auch gehen!?)
@nicht"Gast"
aufgeben ist für mich keine Alternative. Etwas was mit Python
funktioniert habe ich bereits gefunden... allerdings bin ich kein freund
von Python und möchte es meiden. Spaß hab ich selbst wenn ich etwas
länger knobeln muss oder 10 mal nachfragen muss (solange es so liebe
leut wie euch gibt...)
vom Prinzip funktioniert ja auch schon fast alles... lediglich beim
"Einlesen" hänge ich jetzt! Das kann ja nicht "unmöglich" sein.
es gibt online schon ein paar seiten. Allerdings wie oben schon erwähnt,
wenn man dann mal C-Code findet, ist es zu 90% für Arduino.
ich suche Mittlerweile nach "ttyACM0 read serial c" ... aber es gibt
dann auch Unterschiede zwischen, das lief mal vor Jahren und das
bräuchte man JETZT...
wenn jemand noch Hilfestellungen hat, oder das Script von Heiz
komplettieren kann wäre nett...
=> die Frage die hier noch offen steht ist auch meine "Herangehensweise"
...
funktioniert das wenn ich erst schreibe und dann lese und der arduino
antwortet auf mein geschriebenes!?
=> oder muss ich da gleich sagen, dass ich nach dem schreiben lesen
möchte... ich versteh zwar den "Ablauf" ganz gut, allerdings weiß ich
nicht, wie es dann in C umgesetzt wird.
Vielen Dank
baer schrieb:> funktioniert das wenn ich erst schreibe und dann lese und der arduino> antwortet auf mein geschriebenes!?> => oder muss ich da gleich sagen, dass ich nach dem schreiben lesen> möchte... ich versteh zwar den "Ablauf" ganz gut, allerdings weiß ich> nicht, wie es dann in C umgesetzt wird.
Hä? Wer redet denn jetzt miteinander?
Der Arduino mit dem PC mit USB-Seriell-Konverter ?
Der Arduino mit dem RPI mit USB-Seriell-Konverter ?
Der Arduiono mit dem RPI über die UART (Pins)
Der RPI mit USB-Seriell-Konverter mit dem PC über USB-Seriell-Konverter?
Der RPI über die UART (Pins) mit dem PC mit USB-Seriell-Konverter?
Und was genau willst du eigentlich machen? Erkläre es doch mal in
"Unverwirrend"
@Timo
hat jeder außer du verstanden!!!
und um eine serielle Schnittstelle anzusprechen ist es völlig egal wie
der letztendliche weg ist (auch wenn ich versteckt sogar meine Methode
aufgezeigt habe) ... der C-code ist der selbe (lediglich der Parameter
'vom Port' ändert sich)!
=> und direkt über dein Post ist auch die Lösung!