Помогите с проэктом
- Войдите на сайт для отправки комментариев
Добрый день всем!
Прошу помочь с проэктом а в частности с кодом.
И так...
Задумка следующая:
Имеем датчик показания которого должна обрабатывать ардвино.
На выходе датчик выдаёт напряжение от 0.00V до 1.00V,миливольты так же важны в показаниях.
В качестве показометра выступают светодиоды в колличестве 10 штук(если возможно 10).
Требуется выводить на светодиоды показания напряжения датчика с дискретностью 0.1mМ.
В диапазоне показаний 0.00-0.10mV загорается 1 Led ,от 0.10-0.20mV 2 Led ... этакая шкала.
В Aduino не силён-только осваиваю...
Думаю так:
в начале кода назначаю A0 входным аналоговым пином а пины 12-3 выходными пинами
назначаю переменную с показаниями с A0
далее процедурой loop снимаем постоянно показания с A0 и дискретно обработав по заданным рамкам выводим на Led соответствующий этому диапазону напряжения?
А в чём Вам нужна помощь?
Помощь в поавильном написание кода,составление логики программы,приходиться вспоминать школьные курсы информатики,рисовать блок схемы выписывать переменные...
Ну, Вы начните что-то делать. Когда человек сам ничего не делает, то это называется не "помощь", а "делать за него". Или Вам это и надо?
Нет конечно,за меня делать не нужно,просто хотел услышать какие то советы знающих в этом деле людей заранее,в частности если ли на ардвино какая то нижняя граница на аналоговом входе.Где то читал что там присутствует 0.6mV.кстате железка будет nano atmega 168
Вот уже дельная информация,спасибо,буду изучать матчасть)))
кстате железка будет nano atmega 168
На нано вроде не бывает atmega168 , только 328
/sites/default/files/u36844/02d3a856-16a6-4229-bced-70f6873dedf0.jpeg
кстате железка будет nano atmega 168
На нано вроде не бывает atmega168 , только 328
плохо видно на фото но есть две версии 168 и 328
Ссылкой нагляднее ))
Получился такой вот скетч:
А в принципе как работает это код уже более-менее устравивает?
Код надо вставлять по правилам. Это не прихоть, без номеров строк его реально невозможно обсуждать. Последнее в скетче мигание нужно было бы взять в фигурные скобки (сейчас к if-у относится только следующая за ним строка, а остальные только портят картину). Но весь этот if не имеет смысла. analogread не вернёт больше 1023. Выкидывайте всё от этого if и до конца, потом скажете, что горит не так, как хотелось бы.
analogReference(INTERNAL)
в сетап закиньте, это достаточно только раз сделать...
Ну если следующий включаете HIGH, то предыдущий зжесь же и выключайте - LOW.
Код надо вставлять по правилам. Это не прихоть, без номеров строк его реально невозможно обсуждать. Последнее в скетче мигание нужно было бы взять в фигурные скобки (сейчас к if-у относится только следующая за ним строка, а остальные только портят картину). Но весь этот if не имеет смысла. analogread не вернёт больше 1023. Выкидывайте всё от этого if и до конца, потом скажете, что горит не так, как хотелось бы.
на счет номерации строк прошу прощения,буду иметь в виду.да после if я понял что безсмысленно,спасибо.
analogReference(INTERNAL)
в сетап закиньте, это достаточно только раз сделать...
Ну если следующий включаете HIGH, то предыдущий зжесь же и выключайте - LOW.
изначально так и написал,но последовательность загорания может быть разной а я выключу конкретный диод или Вы предлогаете прописать HIGH для нужного и LOW для остальных двух?Просто сейчас скетч на 3и диода для простоты составления,в идеале хотелось бы 10ть диодов и тогда придется писать 10 строк с описанием HIGH на 1н нужный и 9 LOW?
p.s. Скетч пишу первый раз,до этого не было опыта.
Тогда проще будет оформить кусок кода, гасящий все светодиоды в самостоятельный кусок кода - функцию.
Перед зажиганием любого светодиода вызываете эту ф-ю и включаете только нужный.
и ещё, какой, по вашему, светодиод будет светить, если значение АЦП будет 341?
Видимо нужно так <==341?
Да нет же.
У вас при 341 совпадёт условие в первом случае и запустит светодиод 0.
Но и далее, 341 также будет удовлетворять следующему условию и засветит светодиод 1.
Очевидно, что где-нибудь нужно убрать одно равно и оставить только знак больше или меньше.
Вот так, например.
Да верно,упущение мое,благодарю за поправку!
Вот так я представляю реализацию
Я имел ввиду не так. На примере Вашего предыдущего -
Для 10 светодиодов:
А если диапазоны для диодов одинаковые то можно обойтись функцией мар
Ну вот, пришли, накидали готового... А как же человеку помучиться-поучиться самому?
ven-til, подозреваю, что у ТС следующим вопросом будет, как вместо 10-19 прописать свои пины с 3 по 12-й ))
Ну вот, пришли, накидали готового... А как же человеку помучиться-поучиться самому?
ven-til, подозреваю, что у ТС следующим вопросом будет, как вместо 10-19 прописать свои пины с 3 по 12-й ))
Накидали пищу для размышлений с разными подходами, вдруг сподвигнет к лучшему, большому и светлому ))
А по поводу пинов я предложу использовать вычитание realPin = 12-(
pinNumber - 10
) чтоб запутать окончательно.Ну вот, пришли, накидали готового...
Дык, дата ж 23.03. Сегодня, так и быть, можно :(
А в принципе как работает это код уже более-менее устравивает?
Плата еще не пришла,поэтому возможности проверить пока нет а покупать в чип и дипе в 3 раза дороже не хочется.
map интересная функция,нужно с ней разобраться,но вижу что здорово оптимизирует код и упрощает
Тут тоже много чего офигительного почитать )))
Пользуюсь,читаю,но на конкретном примере лучше доходит)
На выходе датчик выдаёт напряжение от 0.00V до 1.00V,миливольты так же важны в показаниях.
В качестве показометра выступают светодиоды в колличестве 10 штук(если возможно 10).
Требуется выводить на светодиоды показания напряжения датчика с дискретностью 0.1mМ.
В диапазоне показаний 0.00-0.10mV загорается 1 Led ,от 0.10-0.20mV 2 Led ... этакая шкала.
На выходе датчик выдаёт напряжение от 0.00V до 1.00V,миливольты так же важны в показаниях.
В качестве показометра выступают светодиоды в колличестве 10 штук(если возможно 10).
Требуется выводить на светодиоды показания напряжения датчика с дискретностью 0.1mМ.
В диапазоне показаний 0.00-0.10mV загорается 1 Led ,от 0.10-0.20mV 2 Led ... этакая шкала.
Хотелось бы не равномерную шкалу если говорить о 10 диодах, в середине с более мелким делением(которое еще нужно будет откалибровать) , поэтому возможность устанавливать диапазон привязаный к пину Леда упрощает эту калибровкую.График напряжения датчика
после выполнения условия в void loop() и включения нужного диода функция void offLeds() ведь выключит его ???
Дык по коду - сперва прочитается значние со входа, затем вырубятся все светодиоды, затем включится нужный, согласно величине.
И так по кругу.
Выключение можете чуток укоротить, через цикл, как выше писали
Дык по коду - сперва прочитается значние со входа, затем вырубятся все светодиоды, затем включится нужный, согласно величине.
И так по кругу.
Выключение можете чуток укоротить, через цикл, как выше писали
Неправильно это.
Сначала определяем, какой светодиод должен гореть, а потом - за один проход - зажигаем только его, а остальные гасим. Отдельная процедура для гашения всех светодиодов:
- идеологически вредна,
- перерасходует ресурсы,
- приводит к мерцанию.
Как это сделать, я писал в посте №24. Это не фрагмант, это полный код loop() со всеми вспомогательными функциями.
Скорее всего это так, но для обеспечения нелинейности шкалы (как хочет ТС) всё равно придётся чем-то жертвовать.
Да и вся тема пользы для автора пока не несёт, ибо даже девайса, на котором можно что-то проверить у него нет.
Девайс в пути,но думаю что не дождусь и куплю в чип и дип на днях
Скорее всего это так, но для обеспечения нелинейности шкалы (как хочет ТС) всё равно придётся чем-то жертвовать.
Отнюдь.
Это совершенно другая задача.
Первая задача - определить, какой именно из светодиодов нужно зажигать. И в этой задаче может фигурировать нелинейность шкалы и пр.
И вторая задача - индикация: нужно просто зажечь выбранный светодиод и потушить остальные.
Моя ремарка касалась исключительно второй задачи.
Если интерес представляет первая, то тут тоже несколько вариантов решения. В первую очередь это аналитическая аппроксимация и табличная фкнкция.
Да и вся тема пользы для автора пока не несёт, ибо даже девайса, на котором можно что-то проверить у него нет.