Возникла такая трудность при написании кода.. Делается все на железки с арм процом и подключенным туда LCD дисплеем и телефонной клавиатуры Собственно суть вопроса такова. Если пользователь нажал клавишу Z вывести 1 сообщение и если он нажал клавишу Z в течении 3-х секунд с первого нажатия записать в файл новые данные и вернутся в главное меню Если же из главного меню клавиша Z не нажимается в течении 5 секунд выйти еще выше :) в самое главное меню. Понять не могу как учитывать время, если клавишу не нажималась вообще или нажалась только 1 раз
nt run_compressor_options(){
FILE *compr, *resourse;
time_t start, finish;
char symbol, str[1], *temp, msg[40];
unsigned short int hour, minut, sec, key, j = 0;
float i = 0;
if ((compr = fopen("eeprom","rb+"))==NULL) //Открываем файл из EEPROM для чтения ресурса компрессора
printf("Не удается открыть файл для чтения");
if ((resourse = fopen("res_compr","wb+"))==NULL) //Открываем файл для записи в него форматированного ресурса компрессора
printf("Не удается открыть файл для записи");
while(!feof(compr)){ //Считаваем из EEPROM строку формата ЧЧЧЧ:ММ:СС
fgets(str,12,compr);
}
temp = strtok(str,":"); //Разбиваем ее на ЧЧЧЧ ММ СС
hour = atoi(temp);
temp = strtok(NULL,":");
minut = atoi(temp);
temp = strtok(NULL,":");
sec = atoi(temp);
sprintf(msg,"РЕСУРС КОМПРЕССОРА ЧС:%04d;МН:%2d;СЕК:%2d;",hour,minut,sec); //Записываем в msg строку для вывода на экран
fputs(msg,resourse); //Записываем ее в файл
lcd_print("res_compr", NO_CURSOR);
while(1){
key = get_pkey(); //Обработчик действий пользователя
switch(key){
case KEY_Z: //int i = 14
if (j==0)
time(&start);
rewind(resourse);
sprintf(msg,"Счетчик ресурса обнулисть: Подтвердите...");
fputs(msg,resourse);
lcd_print("res_compr", NO_CURSOR);
if (j==1){
time(&finish);
j=0;
}
i = difftime(start,finish);
printf("\n%f\n",i);
if ((i >=-3)&&(i <= 0)){
rewind(resourse);
sprintf(msg,"РЕСУРС КОМПРЕССОРА ЧС:%s;МН:%s;СЕК:%s;","0000","00","00");
fputs(msg,resourse);
lcd_print("res_compr", NO_CURSOR);
fclose(resourse);
fclose(compr);
exit(0);
}
j++;
break;
default:
lcd_print("res_compr", NO_CURSOR);
} // End of switch
} // End of while
fclose(resourse);
fclose(compr);
return 0;
}
int main(){
run_compressor_options();
return 0;
}