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

Обсуждаем контроллеры компании Atmel.
Ответить
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 24
Зарегистрирован: Сб июл 05, 2014 08:27:39
Откуда: Казань

Сообщение 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 часов.
МК начал изучать месяц назад и эта моя первая работа.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 16545
Зарегистрирован: Вт сен 07, 2010 03:01:06
Откуда: Moscow-Izmaylovo

Сообщение m.ix »

лучше две кнопки использовать чем одну.
ещё лучше энкодер с кнопкой - для расширения возможности.
на один провод можно повесить кучу кнопок
каждая кнопка замыкает один резистор на землю - такой принцип у сони - используется ЦАп АЦП принцип
Лечу лечить WWWашу покалеченную технику.
Контактная информация:
Реклама
Опытный кот
Сообщения: 758
Зарегистрирован: Вс фев 10, 2013 15:26:00

Сообщение nirq »

Понятие "алгоритм" проигнорировано за ненадобностью, как в анекдоте про прапорщика и обезьяну с бананом - чо тут думать, писать надо!
OCR0A=eebright, но это не одно и то же... или наоборот.
Можно.
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

Сообщение dr.doc »

нажали кнопку переменная инкрементировалась. Нажали повторно декрементировалась.
Введите флаг - регистр в оперативке, в котором значение определенного бита будет инвертироваться с каждым нажатием на кнопку. А уже в зависимости от состояния этого бита Вам увеличивать или уменьшать. Единственное - так можно сделать только плавную (изменяющуюся при удержании) регулировку.
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Реклама
Эиком - электронные компоненты и радиодетали
c2n
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1193
Зарегистрирован: Ср июл 25, 2012 21:40:09
Откуда: Самара

Сообщение c2n »

"Флаг" - переменная типа bool
Продемонстрирую на примере словестного описания алгоритма....

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

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

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

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

}//КОНЕЦ Событие при нажатии кнопки:
Контактная информация:
Реклама
Ответить

Вернуться в «AVR»