Seite 1 von 1

Serielle Schnittstelle unter Linux

Verfasst: Fr Apr 19, 2013 2:27 pm
von Onraku
Ich habe einen alten Playstation-Controller, und lese den Zustand der Tasten mit einem Arduino aus. Alles was ich dabei nicht brauche fliegt erstmal raus, und übrigt bleibt ein Byte, welches acht Taster-zustände enthält.
Nun möchte ich damit in meinen PC, welcher mit einem USB-Kabel mit dem Arduino verbunden ist.
Der μC kann aber lediglich eine serielle Schnittstelle (RS232???) ansprechen, welche über einen FTDI-Chip realisiert wird.
Im Terminal bekomme ich mit

Code: Alles auswählen

screen /dev/ttyUSB0
genau das was ich haben will, auf der Seite des μC scheint soweit alles klar zu sein.

Aber wie kann ich mit einem Programm das gesendete Byte lesen, um es weiter zu verarbeiten?
Ich bin mittlerweile 4 Tage auf der Suche, egal womit ich Google füttere, ich bekomme nur Links zurück, die ich schon gesehen habe, finde keine Bibliothek die mir weiterhilft (was mir eigentlich am liebsten wäre), und sämtliche Versuche selbst etwas zu implementieren (Stichwort: <termios.h><fcntl.h>) erzeugen mehr Verwirrung als Klarheit.

Mein letzter Versuch in der Richtung sieht so aus:

Code: Alles auswählen

#include <stdlib.h>
#include <stdio.h>
#include <termios.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

int main(){

   struct termios tio;
   int tty_fd;
   fd_set rdset;
   unsigned char c=0;

   memset(&tio,0,sizeof(tio));
        tio.c_iflag=0;
        tio.c_oflag=0;
        tio.c_cflag=CS8|CREAD|CLOCAL;
        tio.c_lflag=0;
        tio.c_cc[VMIN]=1;
        tio.c_cc[VTIME]=0;

        tty_fd=open("/dev/ttyUSB0", O_RDWR | O_NONBLOCK);
        cfsetospeed(&tio,B9600);
        cfsetispeed(&tio,B9600);
        tcsetattr(tty_fd,TCSANOW,&tio);
        while (1)
        {
            read(tty_fd,&c,1);
            printf("%d\n",c);
        }
  return(0);
}
Mir ist klar das die Schleife alles andere als schön ist, und ich das Programm nur mit Gewalt beenden kann.
Als Ausgabe bekomme ich hier nur Nullen.

Als Bibliothek habe ich unter anderem "libserial" ausprobiert, mit gleichem oder ähnlichem Ergebnis, und bevor ich anfange darin herum zu pfuschen, wollte ich dann lieber was eigenes probieren. Der Code ist eine Mischung aus libserial, und Informationen (besser "Halbwissen") aus den "termios" und "fcntl"-Dokumentationen.

Kann mich hier jemand in die richtige Richtung schubsen, oder hat einen Link, der bei mir noch nicht lila ist :(

Re: Serielle Schnittstelle unter Linux

Verfasst: Fr Apr 19, 2013 2:38 pm
von Kerli
Ich hab bis jetzt immer qextserialport verwendet. Du musst dazu allerdings Qt verwenden...

Re: Serielle Schnittstelle unter Linux

Verfasst: Fr Apr 19, 2013 4:49 pm
von cloidnerux
Wenn ich richtig Informiert bin, kannst du einfach /dev/ttyXXX als Datei öffnen und mit den "normalen" Dateioperationen lesen und schreiben.
Das habe ich aber bisher nicht verifiziert, ich hab das letzte mal auch mit qextserialport gearbeitet.

Re: Serielle Schnittstelle unter Linux

Verfasst: Fr Apr 19, 2013 8:01 pm
von nufan
In Zukunft vielleicht für alle 3 interessant:
http://qt-project.org/wiki/QtSerialPort