Следить за 6 аналоговыми пинами одновременно
- Войдите на сайт для отправки комментариев
Втр, 24/01/2012 - 17:02
Такая задача - следить за 6 аналоговыми входами и при появлении какой-либо активности на одном из них посылать по serial информацию: номер пина + значение. Далее, на другой стороне serial другая программа будет принимать решение на основе номера пина.
и при появлении какой-либо активности
А что такое "активность на одном из аналоговых пинов"?
Например, что-то подано на вход, напряжение
Оно всегда подано на вход - напряжение. Иногда оно, конечно, может быть равно и нулю, но на аналоговом входе это случается гораздо реже, чем на цифровом (там все, что ниже примерно половины напряжения питания - ноль)
Ясно. Спасибо. Ну, как думаете, можно решить мою задачу? Смотреть за всеми 6 входами и просто отсылать в serial значения вместе с номером пина - что-то вроде пакета, который будет слушать другая программа на другой стороне?
Потенциометр подключен к пину 0. Читаю пин 4 например (видно в коде) и видно, что там напряжение также изменяется при настройке потенциометра. Почему?
Ясно. Спасибо. Ну, как думаете, можно решить мою задачу? Смотреть за всеми 6 входами и просто отсылать в serial значения вместе с номером пина - что-то вроде пакета, который будет слушать другая программа на другой стороне?
Конечно можно.
Самое простое решение. Определите, с какой частотой должна происходить отправка каждого очередного пакета и, проверяя значение millis(), в нужные моменты считывайте текущие значения на аналоговых входах, формируйте пакет данных, отправляйте.
Ну или считывайте значения в несколько раз чаще, сравнивайте их со значениями из предыдущего отправленного пакета и, когда значение по одному из каналов отклонится от предыдущего на заданную величину - формируйте пакет и вместе с меткой времени отправляйте. Вполне возможно, будет немного экономичнее в плане трафика.
Потенциометр подключен к пину 0. Читаю пин 4 например (видно в коде) и видно, что там напряжение также изменяется при настройке потенциометра. Почему?
Остальные пины (кроме 0) в воздухе висят? Ну идет какая-нибудь наводка через внутренние pullup-резисторы.
ну, а смысле тогда иметь 6 разных входов, если напряжение гуляет по всем?
>>ну, а смысле тогда иметь 6 разных входов, если напряжение гуляет по всем?<<
Изучите подтягивающие резисторы. Если пин никуда не подключен на нем будет все что угодно.
Выходы:
Либо подключите внутренний подтягивающий резистор pulldown.
Либо внешний , 10 -20 кОм.
Тогда , в отсутствии сигнала , на порту будет 0 .
Тогда , в отсутствии сигнала , на порту будет 0 .
Либо Vпит - в зависимости от того подключен резистор по схеме pulldown (ваш вариант) или pullup.
Моя задача читать аналоговые входы на присутствие напряжения на них и отправлять пакет "номер пина + напряжение на пине" по serial на другую программу, которая будет обрабатывать эти данные. Не хотелось бы засорять serial бесполезными данными, а оптправлять инфу только о том пине, где есть имеющее смысл напряжение. Задача - выбрать пин, где есть важное напряжение и отправлять пакет только с этим пином, а не 6 пакетов с 6 пинами.
Ну так выбирайте "пин с важным напряжением" и отправляйте пакет "номер пина"-"напряжение".
Задачу "выбрать пин, где есть важное напряжение" никто, кроме вас, не решит - ведь никто, кроме вас, не знает, какое напряжение является важным.
в первую очередь подтяните внутренние резисторы
digitalWrite(A0, LOW);