класс чтения / gpio дает всегда 0 - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь написать программу чтения GPIO через драйвер класса. Я установил GPIO22 в качестве входа, подключил медленный генератор к GPIO22, и я читаю файл значений. Это дает всегда 0 и ничего не меняется в течение периодов. Если мне повезет с запуском в хорошее время, это будет 1. Итак, это, вероятно, не проблема с драйверами. Закрытие файла значений и его повторное открытие дает хороший результат, но медленный.

FILE *fd_gpio;

void errExit(char *msg) {
perror(msg);
exit(1);
}

void open_gpio(void) {

fd_gpio = fopen("/sys/class/gpio/gpio22/value", "rw");

if (fd_gpio == NULL) {
    if (system("echo '22' > /sys/class/gpio/export") == -1)
        errExit("GPIO22 handler creation");
fd_gpio = fopen("/sys/class/gpio/gpio22/value", "rw");
}
system("echo 'in' > /sys/class/gpio/gpio22/direction");
system("echo 'both' > /sys/class/gpio/gpio22/edge");
sleep(1);
}

void close_gpio(void) {
fclose(fd_gpio);
}


int main(int argc, char **argv) {
int i;
char value;

open_gpio();
for(i = 0; i < 10000000; i++) {
    rewind(fd_gpio);
    value = fgetc(fd_gpio);
    if (value != 48) printf("%i\n", value); }
close_gpio();
return 0;
 }
...