gerade auf dem Raspi (Raspbian Jessie) hab ich einiges (!!!) an source codes durchgetestet, bis was funktionierendes dabei war.
Letztlich funktioniert hat dieses hier:
Testcode:Code:/* * rpiconio.h * mimics kbhit(), getch() */ #ifndef RPICONIO_H #define RPICONIO_H #include <stdbool.h> #include <stdio.h> #include <string.h> #include <termio.h> #include <unistd.h> bool kbhit(void) { struct termios original; tcgetattr(STDIN_FILENO, &original); struct termios term; memcpy(&term, &original, sizeof(term)); term.c_lflag &= ~ICANON; tcsetattr(STDIN_FILENO, TCSANOW, &term); int characters_buffered = 0; ioctl(STDIN_FILENO, FIONREAD, &characters_buffered); tcsetattr(STDIN_FILENO, TCSANOW, &original); bool pressed = (characters_buffered != 0); return pressed; } void echoOff(void) { struct termios term; tcgetattr(STDIN_FILENO, &term); term.c_lflag &= ~ECHO; tcsetattr(STDIN_FILENO, TCSANOW, &term); } void echoOn(void) { struct termios term; tcgetattr(STDIN_FILENO, &term); term.c_lflag |= ECHO; tcsetattr(STDIN_FILENO, TCSANOW, &term); } #endif
Code:#include <stdio.h> #include <string.h> #include <unistd.h> #include <wiringPi.h> #include "rpiconio.h" int main(void) { long i=0; echoOff(); int c = '\0'; while (c != 'q') { if (kbhit()) { c = getchar(); printf("(hier ggf. auskommentieren:) got key \'%c\'\n", c); if(c==27) { printf("\nuser break\n"); return 1; } } printf("%ld\n", ++i); delay(100); } echoOn(); return 0; }







Zitieren

Lesezeichen