Какая то неведомая ерунда происходит с моей ардуинкой
- Войдите на сайт для отправки комментариев
Ср, 04/05/2022 - 17:50
Здравствуйте уважаемые!
Тут такое дело.
Своему пауку в террариум решил собрать контроллер температуры, влажности и свет чтобы по таймеру работал.
Код простейший и даже я далекий от C человек написал его. Но теперь какая то ерунда творится.
Я решил сделать индикацию на светодиодах и запихал их в IF, в котором срабатывают реле по датчикам.
................
if (h < H_matrix[0][0]) {
digitalWrite(6, HIGH); // Реле на влажность
digitalWrite(9, HIGH); // Светодиод
}
else if (h >= H_matrix[0][1]) {
digitalWrite(6, LOW);
digitalWrite(9, LOW);
}
...................
Ну вы сами видели. ПРОСТЕЙШИЙ КОД!!!!
Но датчик и реле работают, а светодиод нет))))
Я его в начало (void setup) выводил и он загорался. Минут двадцать игрался с ним миганиями через ШИМ.
Но в IF он не срабатывает. Почему? Подскажите пожалуйста.
У меня например подозрения на заводскую прошивку. Заказал программатор и буду ее перезаливать.
PS А на прошивку у меня реально подозрения.
У моей ардуинки LOW это логическая единица))))))))))))
В куске кода выше я для вас написал правильно HIGH и LOW.
У меня же она по LOW дает HIGH.
arduino nano 328p
Буду очень признателен если поможете.
Вот если что весь код. Вдруг паука или скорпиона возьмете)))
да уж, всё как всегда )))
Здравствуйте.
Какую то ошибку в коде нашли?)))
Намёк ТС не понял, пишем в лоб: http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
)))
Извиняюсь.
Здравствуйте.
Какую то ошибку в коде нашли?)))
не я - канпилятор )))
Ничего себе ошибочка.
эээээмммммм....И ответ искать там или все же как нибудь подскажете
c чего вообще начать разбирать эту проблему)?
И почему у меня при заливании скетча ошибки не выдаются?
Все норм работает (DS3231 , DHT22 ну и реле срабатывают).
c чего вообще начать разбирать эту проблему)?
Начать нужно с того, что изменить логику и превратить "портянку" в нормально читаемый код!
А именно:
1. У тебя везде одни и те же временные интервалы (утро, день и т.д.), так почему ты код делишь на времена года / влажность / температуру и опять по новой интервалы времени? Надо сделать наоборот:
Простынка оооочень сильно сократится. А если она сократится, то и ошибку найти проще. Так что мое мнение - начни с этого!
2. Замени номера используемых пинов на константы с понятным именем. А то постоянно мотать простынку вверх, узнать что это за пин № 6 - как то такое себе...
3. Ну и сами интервалы можно проще описывать:
Ничего себе ошибочка.
не вижу там ни одной ошибки. только предупреждения.
Что касается кода - вы правда думаете. что кто-то будет искать ваши косяки в 700х строчках кода, большая часть из этих строчек - повторы? Нафига вы эту портянку сюда вывалили? Оставьте для теста в коде ОДНО условие по времени и проверьте, будет ли срабатывать светодиод.
Ничего себе ошибочка.
эээээмммммм....И ответ искать там или все же как нибудь подскажете
c чего вообще начать разбирать эту проблему)?
И почему у меня при заливании скетча ошибки не выдаются?
Все норм работает (DS3231 , DHT22 ну и реле срабатывают).
Файл-Настройки-
Показать подробный вывод: - V Компиляция V Загрузка
Сообщения компилятора - Все
Простынка оооочень сильно сократится. А если она сократится, то и ошибку найти проще. Так что мое мнение - начни с этого!
Вау! Круто.
Обязательно так сделаю.
Спасибо.
не вижу там ни одной ошибки. только предупреждения.
Предупреждения по поводу того что я до ненужного код растянул и
ардуинка захлебывается при добавлении туда двух светодиодов?
PS Про простыню на 700 строк согласен.
Если ты попробуешь ПОЧИТАТЬ что написано, то поймёшь что ругань в отношении кода используемых тобой библиотек iarduino_*.h
Вообще-то те пины, которые используете, желательно правильно сконфигурировать на вход или на выход, чтобы потом не удивляться, почему они работают совсем не так, как хочется.
А строки 22,23,24? Хотя я сильно не разматывал эту простыню.
Нет pinmode 9, output для светодиода
Нет pinmode 9, output для светодиода
Да я их пока вырезал,чтобы все остальное работало
Если ты попробуешь ПОЧИТАТЬ что написано, то поймёшь что ругань в отношении кода используемых тобой библиотек iarduino_*.h
Кстати у меня на библиотеки были жалобы.
Тогда снесу библиотеки, начну переписывать по компактнее код и заливая библиотеку сразу по очереди все тестить.
Нет pinmode 9, output для светодиода
Но ты же сам жаловался, что
Но датчик и реле работают, а светодиод нет))))
Пусть сначала код перепишет по компактнее.
Сутки делятся на 5 периодов. Для каждого периода задается Т , ОВВ и время начала. Также задается скорость изменения Т например 2 С/час и ОВВ общие для всех периодов. Получаем такой график Т и ОВВ за сутки. Каждую минуту расчитываем значения уставок и сравниваем с измеренными. Время в минутах с начала суток. Предусмотреть редактирование уставок и сохранение в EEPROM.
Для каждого периода задается Т, ОВВ
Т -таймер типа millis?
А ОВВ это что имеется ввиду?
Ну а с EEPROM справлюсь.
Спасибо.
Для каждого периода задается Т, ОВВ
температура и относительная влажность воздуха
"птичку жалко" - вангую что ТС таки поджарит животинку ...
Всем привет еще раз!)
В общем получается.
- Укоротил код как написал BOOM.
Теперь он не на 687 строк, а на 148 (я все в функцию затолкал и убрал зиму)
- Затем просматривая ход компиляции как написал ua6em.
Я нашел причину огромного колличества предупреждений(Библиотеки кровь пили), да и вообще другие мелкие косяки быстро устраняю.
UNO Приняла уже скетч)
С таким алгоритмом будут большие скачки по Т и по ОВВ. Вместо мин и макс задайте среднее значение уставки, а основную функцию вызывайте раз в 5-20 сек.
С таким алгоритмом будут большие скачки по Т и по ОВВ. Вместо мин и макс задайте среднее значение уставки, а основную функцию вызывайте раз в 5-20 сек.
Ничего себе, я начинаю Вас всех понимать))))
Интересная идея. Обязательно так попробую
С таким алгоритмом будут большие скачки по Т и по ОВВ. Вместо мин и макс задайте среднее значение уставки, а основную функцию вызывайте раз в 5-20 сек.
И кстати у меня уже скачки)))
По влаге - стекла аж изнутри мокрые.С такими диапазонами в течении дня по несколько раз.
Так что обязательно попробую как советуете.
DHT22 так себе сенсор в плане измерения влажности, особенно на высокой влажности.
DHT22 так себе сенсор в плане измерения влажности, особенно на высокой влажности.
HTU 21 нормальный?
В Ютубе один типок сравнивал датчики и HTU 21 минимальные погрешности имел.
HIH4000 нормальный
HIH4000 нормальный
0_0
Он и стоит норм)
На Али 1 тыр. Как кило колбасы.
На Али 1 тыр. Как кило колбасы.
хорошей )))
BME280 температура влажность и давление в одном флаконе и качество измерений в порядке.
Здравствуйте Уважаемые еще раз!!!
Тут у меня к продолжению темы еще вопросик.
Помните в начале темы я жаловался на негорящие светодиоды?
Вопрос решился и даже больше скажу - светодиоды были заменены на надписи ВКЛ/ВЫКЛ на дисплее.
Все работает, НО эти надписи закреплены на срабатывания реле и пока такового не произойдет они не появляются в цикле (первое включение их короче нет).
Я решил закрепить надписи на наличие/отсутствие логики на пине реле.
И мне получается надо один и тот же пин сделать OUTPUT(что бы реле работало) и INPUT(чтобы digitalRead работало).
А как это сделать???
У меня начинает все безбашено щелкать.
Читать пин можно всегда, независимо от того вход он или выход. Код показывай.
Ща я уберу все ненужное
Номера строк нужны.
Что в этой строке делается
if
(digitalRead(temperature_relay == HIGH)) ? Больше не глядел код.
PIN_TEMPERATURE_RELE так ведь понятней обозначить пи на котором висит реле?
Номера строк нужны.
Что в этой строке делается
if
(digitalRead(temperature_relay == HIGH)) ? Больше не глядел код.
PIN_TEMPERATURE_RELE так ведь понятней обозначить пи на котором висит реле?
Вот тут я и считываю с пина реле
Все лишнее убрал
Строка 8 отменяет строку 6. Выкладывай код, который компилируется и работает. Если работает не так как нужно, то задавай вопросы.
Я стер это сообщение.
Что я тут написал уже не имеет смысла.
Только путать будет.
Если работает не так как нужно, то задавай вопросы.
Блин нашел причину.
Pyotr простите меня пожалуйста за беспокойство.
И благодарю Вас за столь быстрый отклик на мою проблему.
Короче косяк в синтаксисе. Я тут пролистал свои шпаргалки и нашел причину.
Я писал...
if (digitalRead(PIN_TEMPERATURE_RELAY == HIGH))
А надо было...
if (digitalRead(PIN_TEMPERATURE_RELAY) == HIGH)
Спасибо еще раз Вам.
Всех благ!