Serielle Schnittstelle unter Linux
Verfasst: Fr Apr 19, 2013 2:27 pm
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 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:
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
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
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);
}
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
