Программно реализовать таймеры. Вопрос.

Тема в разделе "Arduino & Shields", создана пользователем ilgamer, 20 апр 2012.

  1. ilgamer

    ilgamer Нерд

    Привет.

    Собираюсь собрать хитрое но простое устройство, считающее расстояние, преодоленное человеком на велосипеде. Не столь важно, как я собираюсь реализовать это на деле, просто уточню что буду использовать магнит и сенсор постоянного магнитного поля и светодиод.

    Мне необходимо сделать программу, мигающую светодиодом с периодом в одну секунду. Сделать это я смогу, используя delay. А вот если мне необходимо в этот момент читать аналоговый сигнал с сенсора? Как быть? Выручайте!

    Я почему то уверен что все кроется в таймерах, но как их реализовать я не имею представлений.
     
  2. wellgold

    wellgold Нуб

    Вам сюда: http://arduino.cc/en/Tutorial/BlinkWithoutDelay
     
  3. Витя

    Витя Гик

    А как он будет считать растояние? Магнит на колесо и считать сколько раз он прокрутился напротив сенсора. Если так то лучше делать по другому. Сделать обработчик прерываний который будет срабатывать когда сенсор регистрирует магнит. А мигание тогда можно сделать и как обычно.
     
  4. ilgamer

    ilgamer Нерд

    Прости, что? О каких ты прерваниях говоришь? Я уже все продумал, осталось решить проблему со светодиодом.

    Кстати, вопрос: "Я получаю инфу с сенсора и хочу выводить на жк экран. Например, обновляя значения каждую секунду. Как быть?"
     
  5. Витя

    Витя Гик

    Ну так ты говоришь что проблема в том, чтобы читать данные с сенсора если вдруг ты ушел в delay. Значит чтение сенсора делаешь в loop функции сам. Но это не самое удачное решение оно клевое только для тестов. А по нормальному МК сам должен вызывать твой код сам следя за данными с сенсора. Можно настроить прерывание например когда на ножке сигнал меняется. Это более правильно чем самому читать данные.

    А вот остальной код вроде мигания светодиодом можно уже как раз писать в loop как угодно используя delay. Когда данные с сенсора поступят МК прервет этот код и выполнит код прерывания где как раз можно например посчитать что велосипед прокрутил колесо очередной раз. А дальше МК продолжит опять выполнение кода из loop. Получится типа параллельное выполнение кода когда можно не парится по поводу delay функции.

    В любом случае чтобы использовать таймеры нужно будет писать прерывание. Только его будет вызывать не изменение значения на ножках а сам таймер. Это просто не показать примером там очень много разного. Нужно просто все это прочитать в документации. Еще можно взять например готовую библиотеку вроде MsTimer2 http://arduino.cc/playground/Main/MsTimer2 Но не зная как работают таймеры всеравно не получится писать нормально. Например при работе второго таймера нельзя будет писать в 11 порт насколько помню.
     
  6. ilgamer

    ilgamer Нерд

    Ладно, с этим понятно. Я еще вопрос выше задал. Как одновременно или каждую секунду выводить еще на жк экран все?
     
  7. Витя

    Витя Гик

    wellgold как раз написал пример. Можно еще использовать вот эту библиотек http://arduino.cc/playground/Code/Timer Там можно до 10 независимых таймеров поставить.
     
    ilgamer нравится это.
  8. ilgamer

    ilgamer Нерд

    То что нужно.