Прошу помощи по декларированию переменных
- Войдите на сайт для отправки комментариев
Добрый день!
Кратко : по специальности электрик, работаю управленцем, но хобби (сборка свяких электронных штук типа ламповы усилителей меня оч увлекает)
Вообще не программист и никогда не был, но вот приобрел стартовый набор UNO с разными модулями - уже как третий вечер осваиваю по тихому.
Для себя решил создавать наращивая, пока максимально не задействую модули и входы, причем планировал усложнять сборку
Код составляю по аналогии с вложенными уроками и параллельно сверяюсь с разделом "Программирование" на данном сайте
Цель проекта - собрать систему контроля параметров воды в аквариме и поддержания нужного значения pH подачей углекислоты через эл. магнитный клапан
Сейчас проблема - датчик DHT11 дает показания однократно, далее - на дисплее прописываются нули.
Система просле сброса кнопкой RESET повторяет цикл для влажности и температуры ОДНОКРАТНО дает реальные показания ( к примеру влажность 42% и температура 25С) , далее все снова по нулям , а цикл с заданием аналоговой переменной работает исправно.
К плате подключен дисплей 1602 Д( 2,3,4,5)
управление для эл. клапана оргаизовано на Д13,
сервопривод ( до кучи) на 10 выводе
DHT11 на входе Д1, а Аналоговый сигнал с потенциометра - на А0
Ниже код с комментарием
#include <DHT.h> #include <Servo.h> #include <LiquidCrystal.h> DHT dht(1, DHT11); // тут я инициировал датчик Servo servo1; LiquidCrystal lcd(12, 11, 5, 4, 3 ,2); void setup() { dht.begin(); lcd.begin(2, 50); servo1.attach(10); pinMode(13,OUTPUT); //это управление клапаном подачи СО pinMode(1,INPUT); // это вход с датчика DHT11 -ПРАВИЛЬНО ЛИ Я ЕГО ТУТ ОБЪЯВИЛ ИЛИ ОН ИСКЛЮЧАЕТСЯ ИЗ ЦИКЛА ЗАПИСИ ЗНАЧЕНИЯ } void loop() { int rezuk = analogRead(0); // объявляю переменный аналоговый сигнал - с аналогового датчика lcd.setCursor(0 ,0); lcd.print("pH"); lcd.setCursor(3 ,0); lcd.print(rezuk); float h = dht.readHumidity(); // Read temperature as Celsius (the default) float t = dht.readTemperature(); // Read temperature as Fahrenheit (isFahrenheit = true) float f = dht.readTemperature(true); lcd.setCursor(0 ,1); lcd.print("H:"); lcd.setCursor(4,1); lcd.print(h); lcd.setCursor(10,1); lcd.print("T"); lcd.setCursor(12,1); lcd.print(t); delay(2500); lcd.clear(); // проверяю уровень регулируемого параметра по pH digitalWrite(13,LOW); if (rezuk>600) { digitalWrite(13,HIGH); } Serial.begin(9600); //проверял на мониторе как дребезжит переменный резистор Serial.println(rezuk,DEC); delay(15); rezuk = map(rezuk,0,1024,0,180); // а это что называется - до кучи покрутить пропорционально сероприводом servo1.write(rezuk); delay(2); }
А Вы временно всё из лупа уберите, оставьте только DHT и вывод его значения в Serial....
Ок ! Спасибо - думал над этим , но было жалко - сейчас уберу все лишнее и пока выведу на монитор по послед порту
А чего жалеть? Ставите камменты /* - в начале фрагмента кода и */ - в конце. Таким образом временно выключаете этот фрагмент.
Оставил дисплей и послед порт с датчиком
ниже код
...и строка #41 вообще не на месте стоит.
Эх, жалко я в дороге, а то как в добрые времена, подлючил бы свой I2C 1602 ...
а так вижу, уберите датчик с 1 пина на другой.
...и строка #41 вообще не на месте стоит.
поэтому один раз и срабатывает.
и вот результат повторился - однократно получаю данные и на дисплей и на монитор по послед порту , а далее идет все по
тексту Humidity: nan % Temperature 00 *C
СПАСИБО ВАМ ОГРОМОЕ!!!! - на 8 пин переключил и все работает!!!
СПАСИБО ВАМ ОГРОМОЕ!!!! - на 8 пин переключил и все работает!!!
причину поняли ?
или и так сойдет ?
а 41 строку я на 12 поставлю - это я просто в строчках напутал , когда в разные куски циклов ставил блок вывода влаж/температуры на экран.
Еще раз спасибо! сам бы долго ковырялся
причине не понятна чем Д1 от Д8 отличается - только если аппаратно внутри схемы есть особенность
причине не понятна чем Д1 от Д8 отличается - только если аппаратно внутри схемы есть особенность
так и есть, а особеность эта кроется в Serial.begin(), выучите и запомните, вы вроде не "глупый новичок".
приеду домой, проверю! :))))
причине не понятна чем Д1 от Д8 отличается - только если аппаратно внутри схемы есть особенность
https://www.arduino.cc/reference/en/language/functions/communication/serial/
Ищете свою Ардуину, смотрите в колонку Serial Pins и размышляете почему всё работало так плохо.
Нашёл:
"В Uno, Nano, Mini и Mega контакты 0 и 1 используются для связи с компьютером. Подключение чего-либо к этим контактам может помешать этому общению, в том числе вызвать неудачные загрузки на доску."
Очень Вам признателен, так много связных условий, что разом все не изучишь.
Эту тему, на вооружение возьмите. Поможет и при разводке платы, и при подобных вопросах.