Страница 1 из 1

Как инкрементировать и декрементировать одной кнопкой.

Добавлено: Сб июл 05, 2014 09:04:57
Ljutyj
Всем привет. Делаю ночник на тини13. Управляю аппаратным ШИМ. При включении можно выбрать как будет увеличиваться значение OCRA ступенчато или плавно. Ступенчатый режим работает более или менее.
Спойлер{
OCR0A=eebright;//

if(!eeflag)// флаг ступенчатого режима
{
if(!trig && OCR0A<238)//если кнопка нажата
{
while(!trig);// ждем отжатия кнопки
delay_ms(50);//антидребезг
eebright+=60;// увеличиваем переменную на 60
}

if(!trig && OCR0A>237)если кнопка нажата
{
while(!trig);// ждем отжатия кнопки
delay_ms(50);//антидребезг
eebright=0; // сбрасываем
}
}
А второй режим хочу сделать следующим : нажали кнопку переменная инкрементировалась. Нажали повторно декрементировалась. Как можно это сделать. Пробовал так не получается.
Спойлерif(eeflag==1)
{
if(!trig && !i && OCR0A<255)
{
delay_ms(50);
eebright++;
i=1;
}

if(!trig && i==1 && OCR0A>0)
{
delay_ms(50);
eebright--;
i=0;
}
}
Пожалуйста укажите на мои ошибки, и можно ли используя таймер по переполнению, сделать отключение к примеру через 6 часов.
МК начал изучать месяц назад и эта моя первая работа.

Re: Как инкрементировать и декрементировать одной кнопкой.

Добавлено: Сб июл 05, 2014 10:14:15
m.ix
лучше две кнопки использовать чем одну.
ещё лучше энкодер с кнопкой - для расширения возможности.
на один провод можно повесить кучу кнопок
каждая кнопка замыкает один резистор на землю - такой принцип у сони - используется ЦАп АЦП принцип

Re: Как инкрементировать и декрементировать одной кнопкой.

Добавлено: Сб июл 05, 2014 12:48:18
nirq
Понятие "алгоритм" проигнорировано за ненадобностью, как в анекдоте про прапорщика и обезьяну с бананом - чо тут думать, писать надо!
OCR0A=eebright, но это не одно и то же... или наоборот.
Можно.

Re: Как инкрементировать и декрементировать одной кнопкой.

Добавлено: Сб июл 05, 2014 13:27:26
dr.doc
нажали кнопку переменная инкрементировалась. Нажали повторно декрементировалась.
Введите флаг - регистр в оперативке, в котором значение определенного бита будет инвертироваться с каждым нажатием на кнопку. А уже в зависимости от состояния этого бита Вам увеличивать или уменьшать. Единственное - так можно сделать только плавную (изменяющуюся при удержании) регулировку.

Re: Как инкрементировать и декрементировать одной кнопкой.

Добавлено: Ср июл 09, 2014 12:27:55
c2n
"Флаг" - переменная типа bool
Продемонстрирую на примере словестного описания алгоритма....

Код: Выделить всё

Плюсовать = Истина;

{//Событие при нажатии кнопки:

     Если плюсовать == истина тогда
     {
     Плюсовать = ложь;
     ...
     Значение++
     ...
     } иначе
     {
      Плюсовать = Истина;
      ...
      Значение--
      ...
      }

}//КОНЕЦ Событие при нажатии кнопки: