Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ?Реакция на продолжительное нажатие кнопки
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Markfly
Прошу помощи. Написал такой текст. По сценарию, при удержании кнопки в течении времени декременирования "Count",по истечении этого времени, если кнопка еще нажата, загорается СИД.При отпускании кнопки, сид гаснет. Соответственно на короткие нажатия СИД не должен реагировать. НО он реагирует. Произвожу короткие последовательние нажатия и он начинает помаргивать... Подскажите, пожалуйста, в чем ошибка, чего я не учел?

CODE
int main()

{
ConfigureButton();

//Main Loop
while(1)
{
if((AT91C_BASE_PIOA->PIO_PDSR & 0x00100000) == 0)//Если кнопка нажата.

{
long int Count = Delay_3sec;//Запись в Count числа
while (((AT91C_BASE_PIOA->PIO_PDSR & 0x00100000) == 0)&&(Count > 0))//Если кнопка нажата и Count не пуст.
{
Count = Count -1; //Декременируем Count.
}
AT91C_BASE_PIOA->PIO_CODR = 0x00000001; //0 on PA0, LED on/ Count пуст и кнопка еще ножата, тогда зажигаем LED.
}

else //Если кнопка не нажималась (или ее отпустили).
{
AT91C_BASE_PIOA->PIO_SODR = 0x00000001; //1 on PA0, LED off //Гасим LED.
}

}


}
artem79
Так и будет в вашем случае СИД зажгется в любом случае при нажатии кнопки.
Markfly
Не понимаю, почему. Если не слишком часто производить кратковременные нажатия, СИД не загорается...
MrYuran
Вот на что люди расходуют мощность АРМов - на декремент каунта в течение 3 секунд...
Охренеть-не встать!
shasik
Цитата(Markfly @ Jul 10 2009, 08:19) *
CODE

long int Count = Delay_3sec;//Запись в Count числа
while (((AT91C_BASE_PIOA->PIO_PDSR & 0x00100000) == 0)&&(Count > 0))//Если кнопка нажата и Count не пуст.
{
Count = Count -1; //Декременируем Count.
}
AT91C_BASE_PIOA->PIO_CODR = 0x00000001; // ЗДЕСЬ БЕДА
}
}


Беда в том, что включение СИДа у Вас происходит в любом случае, независимо от того почему закончился цикл - то ли кнопку отпустили, то ли время уже прошло. Вам не хватает if для проверки причины завершения цикла.
Markfly
Цитата(MrYuran @ Jul 10 2009, 09:40) *
Вот на что люди расходуют мощность АРМов - на декремент каунта в течение 3 секунд...
Охренеть-не встать!

Извините, но на моем этапе это не важно...







shasik, спасибо большое, все заработало!!!
AHTOXA
CODE

long int Count = Delay_3sec;//Запись в Count числа
while (((AT91C_BASE_PIOA->PIO_PDSR & 0x00100000) == 0)&&(Count > 0))//Если кнопка нажата и Count не пуст.
{
Count = Count -1; //Декременируем Count.
}
if (!Count) AT91C_BASE_PIOA->PIO_CODR = 0x00000001; //0 on PA0, LED on/ Count пуст и кнопка еще ножата, тогда зажигаем LED.
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.