Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Запутался в алгоритме


Автор: 344092 2.11.2008, 12:14
Здравствуёте, я новичёк в написании программ для микроконтроллеров, вот имею дело с контроллером attiny2313.  Вопрос такой, Необходимо на любой порт повесить микрофон и при двух хлопках на другом порте(пине) должен появиться лог1 если ещё хлопнуть 2 раза лог0. При 3 хлопках аналогично но на другой порт(пине) лог1 и лог0 . Чтото вроди включения света хлопками...но так же если хлопнуть 2 раза а через 5 секунд ещё 1раз хлопнуть, тройной хлопок не прошёл бы...(таймер счёта хлопков, например промежуток между хлопками 1сек)Пишу на CVavr  


Автор: smalcom 2.11.2008, 20:28
в чем вопрос состоит?

Автор: Lazin 2.11.2008, 21:25
на порт нельзя просто повесить микрофон, нужно использовать ADC, кстати есть раздел по программированию контроллеров

Автор: 344092 4.11.2008, 07:35
Цитата(smalcom @ 2.11.2008,  20:28)
в чем вопрос состоит?

Вопрос состоит в том, как заставить гореть светодиод на ножке выхода (например PORTB.1). При замыкании ножки входа но не 1 раз а 2....как бы счётчик

Например

Код

if (!(PIND | (1<<PIND1))) // проверить "1" на линии 1 порта D
        {
                          // Если лог1 есть значит
                 PORTB |= _BV(PB1); // установить "1" на линии 1 порта B


                 //иначе
        }
        else
        {
                   

                        PORTB &= _BV(PB1); // установить "0" на линии 1 порта B


А как сделать при ./ проверить "1" на линии 1 порта D дважы??? // Если дважды лог1 есть значит PORTB |= _BV(PB1); // установить "1" на линии 1 порта B

Автор: Mazzi 4.11.2008, 09:57
Вот тебе решение.

Повторять_пока (истина)
{
      Если (хлопок) 
      {
           Если (мы_сейчас_ожидаем_первый_хлопок)
           {
                переходим_в_режим_подсчёта_хлопков();
                счётчик_хлопков++;
                запускаем_таймер_таймаут_ожидания очередного_хлопка();
           }
           иначе // если мы ожидаем очередной хлопок
           {
                 счётчик_хлопков++;
                 перезапускаем_таймер_таймаут_ожидания очередного_хлопка();
           }
      }

      Если (сработал_таймер_таймаут_ожидания очередного_хлопка)
      {
           переходим_в_режим_ожидания_первого_хлопка();
           ОБРАБАТЫВАЕМ_СЧЁТЧИК_ХЛОПКОВ();
      }
}

Удачи!

Автор: 344092 4.11.2008, 15:19
Спасибо Mazzi  smile  попробую  код реализовать...Если возможно то  smile конкретного кода smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)