Я не очень знаком с кодом C, поэтому у меня есть некоторые проблемы с настройкой данного кода.Это код кнопки выключения малины пи.GPIO имеет высокий, пока никто не нажимает кнопку.Все работало нормально, пока я не добавил USV.С тех пор как я его подключил, уровень GPIO время от времени падает, только очень короткое время.Поэтому я попытался установить задержку для действия выключения, но оно не работает несколькими способами, которые я пробовал.Это соответствующая часть сценария;это больше не работает.Нажатая кнопка больше не распознается.
while(1) {
memset(rdbuf, 0x00, RDBUF_LEN);
lseek(fd, 0, SEEK_SET);
ret=poll(&pfd, 1, POLL_TIMEOUT);
if(ret<0) {
logging(LOG_CRIT,"error polling interrupt - exiting");
close(fd);
exit(EXIT_FAILURE);
}
if(ret==0) {
continue;
}
ret=read(fd, rdbuf, RDBUF_LEN-1);
/*Errorhandling*/
if(ret<0) {
logging(LOG_CRIT,"error reading gpio - exiting");
exit(EXIT_FAILURE);
} else {
if (ret==0) {
logging(LOG_INFO,"Got interrupt from shutdown key. Checking delay");
if ( delay == 9 ) {
logging(LOG_INFO,"got interrupts from shutdown key, shutting down now");
system("shutdown -h now");
exit(0);
} else {
/* oss << "got interrupt from shutdown key*/
char buffer[1024];
snprintf(buffer, sizeof(buffer), "Got interrupt from shutdown key, Counter not 10 (%i). Shutdown delayed...", delay);
logging(LOG_INFO,buffer);
delay++;
}
} else {
logging(LOG_INFO,"No interrupts from shutdown key. Checking Delay.");
if ( delay >= 1 ) {
char buffer[1024];
snprintf(buffer, sizeof(buffer), "Counter: %i Signal unterbrochen. Setze Counter zurück.", delay);
logging(LOG_INFO,buffer);
delay = 0;
}
}
}
}
В чем разница между опросом и чтением?Моя идея заключается в том, что задержка считается до тех пор, пока GPIO нажата (0), если она равна 9 (или что-то, что будет около одной секунды во время выполнения), сценарий должен отключить распи.Если кнопка больше не нажата, задержка должна быть установлена на ноль.Это то, что никогда не работало.Мне удалось отложить отключение, но отсчет продолжался несколько дней.
Спасибо за вашу помощь.