Прерывания по изменению состояния pin
- Войдите на сайт для отправки комментариев
Приветствую, есть UNO клон. Необходимо чтобы при поступлении на датчик тока "HIGH" - выполнялось некое действие, при этом датчик тока выдаёт аналоговое значение и для придания ему LOW или HIGH использую код:
int valb0 = (analogRead(vdat2)); // берём значение с датчика тока vdat2 valb0 = constrain(valb0, 440, 510); // ограничиваем значения int valb1 = map (valb0, 440, 510, LOW, HIGH) // передаём в valb1 1 или 0
Ибо значение самопроизвольно меняется в диапазоне +-20 независимо от того есть нагрузка или нет.
Как понимаю, прерывания работают только от внешнего фактора (кнопки) и не могут постоянно опрашивать программно изменился ли "valb1"?
И в довесок: возможно поступление сразу 2х сигналов, то есть от двух датчиков сразу и это должно выводить третье действие.. Возможно ли и это? При том что датчиков тока всего 3, но одновременно могут работать только 2 линии тока (не зависит от ардуино), например 1+2 или 1+3.
Чего-то я почитал о прерываниях и кажется вообще не в ту сторону копаю..
Подскажите как это всё реализовать не дожидаясь пока выполнится loop.. Скорость в миллисекундах не требуется, но тормоза в 2-3 сек. уже существенны (=
всё реализовать не дожидаясь пока выполнится loop.. Скорость в миллисекундах не требуется, но тормоза в 2-3 сек. уже существенны (=
это почему у тебя loop выполняется 2-3 секунды?
ты представляешь, какая общая производительность твоей балалайки, в таком случае?
ты надеешься, что она(производительность) кардинально возрастёт, если ты будешь использовать прерывания?
Я не говорил о производительности в целом, loop воспроизводит у меня бегущую строку и со всеми delay выполняется около 2 мин..
Говорилось о том чтобы выполнялось условие при достижении значения на датчике и что бы это значение НЕ считывать вручную в loop, а оно было завязано на прерывании и вообще если это возможно. И как написал выше, возможно мне нужно не прерывание, а что-то иное..
В общем текущая задача, как писал выше: Необходимо чтобы при поступлении на датчик тока "HIGH" - выполнялось некое действие.
Именно к этой фразе я отнёс то, что неприемлимо дожидаться в loop считываний с датчика. При этом есть 3 датчика, которые необходимо мониторить, при включении каждого из которых наступает определённое действие, в дополнении может наступить одновременно 2 действия.
loop воспроизводит у меня бегущую строку и со всеми delay выполняется около 2 мин..
это глупо.
как написал выше, возможно мне нужно не прерывание, а что-то иное..
http://arduino.ru/tutorials/BlinkWithoutDelay
неприемлимо дожидаться в loop считываний с датчика.
кем неприемлимо?
в дополнении может наступить одновременно 2 действия.
рассчитываете заюзать два прерывания одновременно?
Про loop и delay вроде понял по статье..
Считываний неприемлимо дожидаться раз в 2 мин. Неприемлимо задачей, ибо выполняться в текущей конфигурации она будет редко и пропустит появление на датчике HIGH.
Именно про прерывания одновременно я и спрашивал, возможно или нет..
Видимо, да что-то я неправильно понял из уроков... Сейчас попробую перекроить скетч.
Именно про прерывания одновременно я и спрашивал, возможно или нет..
в принципе - возможно, но когда ты избавишься от delay - может оказаться ненужным.
закоментируй в своём скетче все delay и проверь время исполнеия кода по методике http://arduino.ru/forum/obshchii/vremya-na-ispolnenie-raznykh-funktsii - ты получишь реальное время одного цикла своей программы, так как бы она была написана без delay.
В общем с delay это я на свотодиодах баловался, убрал, там всё как надо..
Но во теперь столкнулся с тем, что в коде бегущей строки пример по вашей ссылке выполняется только после полного прохождения строки..
Сам скетч найденый в интернете:
В данном примере светодиод загорается только после полного прохождения бегущей строки, а потом тухнет после второго прохода этой же строки..
В общем с delay это я на свотодиодах баловался, убрал, там всё как надо..
Но во теперь столкнулся с тем, что в коде бегущей строки пример по вашей ссылке выполняется только после полного прохождения строки..
В данном примере светодиод загорается только после полного прохождения бегущей строки, а потом тухнет после второго прохода этой же строки..
обрати внимание, что в коде есть
while
(*s != 0)
читаем описалово: While будет вычислять в цикле непрерывно и бесконечно до тех пор
т.е. ты настойчиво желаешь наступать на грабли, вместо написания кода, где что-то будет исполняться без задержек.
Спасибо, сейчас поковыряю этот while..
...при этом датчик тока выдаёт аналоговое значение и для придания ему LOW или HIGH использую код:
.....
Попробуйте опрашивать пин с датчиком как цыфровой через digitelRead(14), на входе МК стоит компаратор и он сам отсечет все что ниже 1.8В как LOW все что выше как HIG.
А то что скетч выполняется 2минуты, плохо нужно переделывать.((