Есть МК PIC16F630 на одной ноге у нее кнопка без фиксации. Нужно в программе отслеживать ее нажатия по такому алгоритму:
нажатие (и ее удержание в нажатом состоянии) менее 200 мс игнорировать.
нажатие до ~1300 - короткое нажатие
нажали и удержали на 1300 и более удержание кнопки (долгое нажатие).
Как-то вот так я это сделал:
......
Label WaitReleaseButton;
procedure Proc;
var N: Byte;
begin
for N:= 1 to 3 do begin
Func;
Delay_ms(3000);
end;
end;
//--------------------- Main -------------------------
var N: Word;
begin
while True do begin
.........
if Button(PORTA, 0, 200, 0) then begin
.......... //Тут код при кратковременном нажатии
for N:= 1 to 1500 do
if not Button(PORTA, 0, 1, 0) then Break;
if Button(PORTA, 0, 1, 0) then begin
Proc; // Это вызывается при удержании кнопки на ~1,5 сек
goto WaitReleaseButton;
end;
..........
WaitReleaseButton:
while not PORTA.B0 do nop;
end; // if Button
end; // while True do begin
end.
При долгом удержании вызывается подпрограмма Proc; которая может и должна выполнятся долгое время
ВОПРОС: Как мне это переделать или доделать или предложите свои вариант
А нужно чтобы во время выполнения Proc обработка кнопки на короткое нажатие осталась.
Т.е. если выполняется Proc а мы во время ее выполнения нажимаем кнопку и удерживаем более 200 мс и тогда нужно
сразу прервать код Proc; и вернуться в главный цикл программы.
Не судите строго, только начинаю изучать МК, а микропаскаль потому что с Delphi знаком.
Раздел: Алгоритмы