Working on a lab for school, where we have to take the gyroscope values from a PS4 controller and move an avatar around the screen in NCurses with Cygwin using C. Currently I have a scanf() statement scanning in the data from the PS4 controller that works fine in a normal Cygwin window/program, but I know NCurses doesn't use the STDIN so the scanf() data is not updating in the NCurses window. Does anyone know what function I have to use in my program or how to pipe it in the command line? Thanks!
Current command I'm using:
./ds4rd.exe -d 054c:09cc -D DS4_USB -t -g -b | ./lab8.exe 80
Main Code:
// Main - Run with './ds4rd.exe -t -g -b' piped into STDIN
int main(int argc, char* argv[])
{
int t,b_Triangle, b_X, b_Square, b_Circle;
double g_x, g_y, g_z;
if (argc <2) { printf("You forgot the difficulty\n"); return 1;}
int difficulty = atoi(argv[1]); // get difficulty from first command line arg
// setup screen
initscr();
refresh();
// Generate and draw the maze, with initial avatar
srand(time(0));
int colAvatar, rowAvatar;
rowAvatar = 0;
colAvatar = rand() % NUMCOLS;
generate_maze(difficulty);
draw_maze();
draw_character(colAvatar,rowAvatar,AVATAR);
// Read gyroscope data to get ready for using moving averages.
// Event loop
do
{
// Read data, update average
noecho();
scanf("%d, %lf, %lf, %lf, %d, %d, %d, %d", &t, &g_x, &g_y, &g_z, &b_Triangle, &b_Circle, &b_X, &b_Square);
// Is it time to move? if so, then move avatar
sleep(1);
rowAvatar += 1;
if(g_x > 0){
colAvatar -= 1;
}
if(g_x < 0){
colAvatar += 1;
}
MAZE[rowAvatar][colAvatar] = EMPTY_SPACE;
MAZE[rowAvatar][colAvatar] = AVATAR;
mvaddch(rowAvatar,colAvatar,EMPTY_SPACE);
mvaddch(rowAvatar,colAvatar,AVATAR);
refresh();
fflush(stdout);
} while(b_Square != 1); // Change this to end game at right time
// Print the win message
endwin();
printf("YOU WIN!\n");
return 0;
}