Ещё раз вопрос по dely() от чайника - поясните пожалуйста...
- Войдите на сайт для отправки комментариев
Здравствуйте!
Подскажите пожалуйста, каким образом можно реализовать программу (на самом деле стандартную для робототехники), считывающую информацию с датчиков и выдающую в зависимости от полученной информации команды на исполнительные механизмы.
Есть следующая проблема (для моего понимания):
1. Подключаю один светодиод и пишу программу для того, чтобы он мигал 1 раз в секунду - работает, 2 раза в секунду - работает и т.д. Однако при подключении нескольких светодиодов на разные выходы они работают не синхронно (и даже не с теми задержками которые заданы) а ждут отработки команды delay для каждого предыдущего (в последовательности команд) светодиода, причём в это время все остальные процессы тоже "ждут" когда закончится очередной цикл "мигания" очередного светодиода.
2. Каким образом можно (если это возможно) реализовать одновременную работу, в данном случае синхронное мигание (с кратной частотой относительно первого светодиода), нескольких (2-3) светодиодов? В данном случае, если необходимо постоянно считывать данные с датчиков и одновременно организовать мигание светодиода с циклом 5 секунд, то вся система будет останавливаться и ждать 5 сек. пока не отработает delay для светодиода...?
Подскажите пожалуйста, где моя ошибка?!
Вот это посмотрите http://arduino.ru/tutorials/BlinkWithoutDelay
И размножьте этот кусок
для каждого своего управляемого объекта.
Либо в цикл заверните.
БОЛЬШОЕ СПАСИБО!
Дошло)))
Голову сломал уже (((
1. Один светодиод работает (на 13 пине) правильно.
2. Вставляю второй блок (на другой пин - 8) работают оба но неправильно: на 13 мигает на 8 горит постоянно.
3. Меняю местами - первым по очереди 8 пин, вторым 13 пин: 8 теперь работает правильно а 13 постоянно горит.
ПОЧЕМУ ТАК??????!!! В ЧЕМ ОШИБКА???
Для каждого светодиода должны быть свои переменные ledState, previousMillis и interval
И я бы на вашем месте сделал бы так
Вставка программного кода в тему/комментарий
ВСЕ РАБОТАЕТ!
СПАСИБО!
И красивее как-то)))
PS С отдельными переменными я пробовал, но что-то не доработал - все равно глючило...
Можно сделать и так . А вообще зависит от конкретной ситуации. Можно сделать один счетчик и на основе его показаний запускать/останавливать функции.
Спасибо.
Я попробую и так и так...
Да, один счётчик это для меня более приемлемо.
Распишите конкретный алгоритм включения/выключения устройств/функций. Сделать "расписание работы устройств" по счетчику не сложно.
OK!
Я почти скопировал код maksimа. Просто сразу не посмотрел.
Здравствуйте!
Подскажите пожалуйста, каким образом можно реализовать программу (на самом деле стандартную для робототехники), считывающую информацию с датчиков и выдающую в зависимости от полученной информации команды на исполнительные механизмы.
Есть следующая проблема (для моего понимания):
1. Подключаю один светодиод и пишу программу для того, чтобы он мигал 1 раз в секунду - работает, 2 раза в секунду - работает и т.д. Однако при подключении нескольких светодиодов на разные выходы они работают не синхронно (и даже не с теми задержками которые заданы) а ждут отработки команды delay для каждого предыдущего (в последовательности команд) светодиода, причём в это время все остальные процессы тоже "ждут" когда закончится очередной цикл "мигания" очередного светодиода.
2. Каким образом можно (если это возможно) реализовать одновременную работу, в данном случае синхронное мигание (с кратной частотой относительно первого светодиода), нескольких (2-3) светодиодов? В данном случае, если необходимо постоянно считывать данные с датчиков и одновременно организовать мигание светодиода с циклом 5 секунд, то вся система будет останавливаться и ждать 5 сек. пока не отработает delay для светодиода...?
Подскажите пожалуйста, где моя ошибка?!
1)Просто переписать алгоритмы работы программы.
2)"Синхронно" можно управлять светодиодами!,но только вплоть до 1 такта выполнения команды. (1 такт = 1 / тактовая частота, uno 0,0000000625 с/такт) Соответственно пишем часть этого кода на ASM.
Пример кода на asm мигающая светодиодом подключенным к 8-ому порту. Сверхточное время задержки(отставание 1 такт на полный алгоритм расчета времени); тактовая частота 16МГц - это важно для определения значений переменных. Команда sbi выставляет указанный бит регистра в состояние "1". Для одновременного изменения состояния сразу нескольких портов в одной группе следует использовать ldi .
)
Спасибо.
Я попробую и так и так...
Да, один счётчик это для меня более приемлемо.
Как вариант, если не критично, то можно просто в бесконечный цикл загнать все возможные комбинации включения светодиодов с соответствующими задержками между командами. Для решения "в лоб" будет добротно.
Спасибо - я как раз голову ломал над тем, как засинхронизировать всё это и какие поправки и куда давать...
Теперь буду разбираться, ещё раз спасибо - мне нужна точная синхронизация.