Учусь программировать микроконтроллеры AVR, Столкнулся с проблеммой, не могу запрограммировать контроллер на работу от одной кнопки. Задача такая, одной кнопкой на любом входе контроллера по очереди переключать две функции мигания светодиода на любом одном выходе, функции почти одинаковы по алгоритму работы, просто одна функция обеспечивает более быстрое мигание светодиода, чем другая, программирую на С++
хочу запрограммировать контроллер так чтобы он выполнял разные функции в зависимости от нажатия кнопки, но кнопки одной, а не нескольких. это примерно выглядело бы по анологии работы ёлочных герлянд, где при нажатии одной кнопки поочерёдно меняются разные мерцания светодиодов. в приведённой выше мной программе я создал две функции мерцания двух разных светодиодов красного и зелёного подключённых к ножкам Pc0 и Pc1 микроконтроллера Atmega 8 сконфегурированными на выход, функции создал почти одинаковыми только с разной частотой мерцания. хочу одной кнопкой подключённой к ножке Pb5 сконфегурированной на вход, поочерёдно менять функции, нажал кнопку мерцает один светодиод, отжал кнопку ничего не меняется продолжает мерцать тот же светодиод так же как и мерцал, нажал второй раз кнопку мерцает уже другой светодиод с другой частотой, отжал кнопку ничего не меняется продолжает мерцать тот же светодиод так же как и мерцал, нажал ещё раз (третий раз) мерцает опять первый светодиод также как и при нажатии первый раз
#include <delay.h>
int time_1 ();
int time_2 ();
while (1)
{
while (PINB.5==1)
{PORTC.0=0;}
while (PINB.5==0)
{time_2 ();}
while (PINB.0==1)
{time_2 ();}
while (PINB.0==0)
{time_1 ();}
while (PINB.0==1)
{time_1 ();}
}
}
int time_1 ()
{
while (1)
{
// Place your code here
PORTC.1=1; //зажигаем светодиод
delay_ms(200); //пусть горит 200 милисекунд
PORTC.1=0; //гасим светодиод
delay_ms(200); //теперь не горит 200 милисекунд
}
return 0;
}
int time_2 ()
{
while (1)
{
// Place your code here
PORTC.0=1; //зажигаем светодиод
delay_ms(30); //пусть горит 30 милисекунд
PORTC.0=0; //гасим светодиод
delay_ms(30); //теперь не горит 30 милисекунд
}
return 0;
}