Кажется, проблема в ваших заявлениях о задержке.И в pressed
, и в unpressed
вы ждете 3 x 500 мс.
В цикле вы хотите посмотреть bit_is_clear
400 раз, прежде чем изменять clicked
.
Так что, похоже, *Значение 1009 * должно быть истинным за 600 секунд до изменения clicked
.
Обратите внимание, что это
if(clicked){
pressed();
}else if(!clicked){
unpressed();
}
совпадает с
if(clicked){
pressed();
}else
unpressed();
}
, поэтому в каждом циклеВы введете один из них.
Далее кажется странным, что здесь нет else
:
if(bit_is_clear(PINC, PINC5)){
sigurno_pritisnut++;
if(sigurno_pritisnut > 500){
clicked = !clicked;
sigurno_pritisnut = 0;
}
}
else
{
// ... don't you need some code here?
}
Так кнопка работает так
bit_is_clear
== true означает нажато
bit_is_clear
== false означает выпущено
вам понадобится что-то вроде:
while (1)
{
while (1) // Loop until a state is changed
{
if(bit_is_clear(PINC, PINC5))
{
// pressed
if (clicked)
{
// Same state so just continue...
sigurno_pritisnut = 0;
continue;
}
sigurno_pritisnut++;
if(sigurno_pritisnut > 400){
clicked = 1;
sigurno_pritisnut = 0;
// State change - break out
break;
}
}
else
{
// released
if (!clicked)
{
sigurno_pritisnut = 0;
continue;
}
sigurno_pritisnut++;
if(sigurno_pritisnut > 400){
clicked = 0;
sigurno_pritisnut = 0;
break;
}
}
}
if(clicked){
pressed();
}else{
unpressed();
}
}
Таким образом, вы звоните pressed
/ unpressed
только когда что-то новое произошло.