Помогите новичку с данной переменной "int setTmp=0"
- Войдите на сайт для отправки комментариев
Ср, 21/01/2015 - 20:09
Дорогие форумчане! Помогите с данным кодом пж, не могу сообразить :( не хватает опыта.
За ранее Спасибо всем откликнувшимся.
Задача заключается в том, что надо указать переменную заданного значения темпиратуры "int setTmp=0" уже в самом коде программы. Думаю по самому коду программы Вы поймете что иммею в виду. Код нашел в интернете и он мне подошел, решил немного упрастить. Так как изначально данную переменную управляли с клавиатуры lcd шилда, а у меня её нет да и ненужна, я решил вбить её сразу в код.
OneWire oneWire(10); // Термометр будет подключен на Pin 10 DallasTemperature sensors(&oneWire); // Создаем объект sensors, подключенный по OneWire // Создаем переменные для работы с термометром DeviceAddress tempDeviceAddress; // переменная для хранения адреса датчика float temp1=0; // переменная для текущего значения температуры int setTmp=0; // переменная для заданного значения температуры // Реле подключено к пину D11 #define RELAY_PIN 11 // Объявим переменную для хранения состояния реле boolean relayStatus1=LOW; // Объявим переменные для задания задержки long previousMillis1 = 0; long interval1 = 1000; // интервал опроса датчиков температуры void setup() { //Настроим пин для управления реле pinMode(RELAY_PIN,OUTPUT); digitalWrite(RELAY_PIN,LOW); //Считаем из постоянной памяти заданную температуру setTmp=EEPROM_read_byte(0); // Инициализируем термодатчик и установим разрешающую способность 12 бит sensors.begin(); sensors.getAddress(tempDeviceAddress, 0); sensors.setResolution(12); } void loop(){ // Модуль опроса датчиков и получения сведений о температуре // Вызывается 1 раз в секунду unsigned long currentMillis1 = millis(); if(currentMillis1 - previousMillis1 > interval1) { previousMillis1 = currentMillis1; // Запуск процедуры измерения температуры sensors.setWaitForConversion(false); sensors.requestTemperatures(); sensors.setWaitForConversion(true); // Считывание значения температуры sensors.getAddress(tempDeviceAddress, 0); temp1=sensors.getTempC(tempDeviceAddress); // Вывод текущего значения температуры на дисплей lcd.setCursor(0, 0); lcd.print("T1:"); lcd.setCursor(3, 0); lcd.print(temp1); } //Проверка условия включения/выключения нагревателя if (temp1<setTmp&&relayStatus1==LOW) { relayStatus1=HIGH; digitalWrite(RELAY_PIN,HIGH); } if (temp1>setTmp&&relayStatus1==HIGH) { relayStatus1=LOW; digitalWrite(RELAY_PIN,LOW); } }
24 строку комментируете, в 7 строке вместо 0 указываете температуру при которой должно выполниться условие включения реле
Спасибо Penni.
Что бы не флудить на форуме создавая новые темы решил запилить сюда еще один вопрос.
Это проверка уровня раствора в ёмкости.
Как правильно будет описать данную функцию рамера воды? Нужно если уровень раствора больше то включаем индекатор, но если раствора меньше тоже ключаем индекатор притом что если уровень раствора не больне и не меньше индекатор выключен. Правильно ли я описал ниже и что можно именить что бы было правильнее, вроде так.
За ранее спасибо.
Если раствора больше или раствора меньше включаем индикатор, иначе индикатор отключаем.
Правильно ли будет выдать сообщения об о значении переменной реле Cooler_2 на lcd 1602 в таком плане кода?
Это полный код
У Вас Cooler_2p уже показывает состояние реле включено/выключено, зачем повторно читать, то что только что установили.
Выводите Cooler_2p на экран и всё.
Я тоже об этом подумал и решил изменить но правильно ли это или нет безпонятий. Посмотри пж
Ну скажем так, это будет работать :) Еще один момент у Вас два if и строго больше и меньше стоит. Если температура будет ровна той что в setTmp то Вы не попадёте ни в одно условие, соответственно ничего не включите выключите и не покажите на экране хотя смотря что получить хотим может так и надо.
А как решить это проблему? :)
Что-то типо такого?
Для Вашей задачи это нормально. Если равно будет то просто мимо пройдем и ничего не сделаем. На экране останется текущий статус и все.
Слушай, а при таком условии я не убью реле от быстрого износа? Когда он будет сравнивать постоянно сначения в приделе от +23 и +25. Просто если он станет на этом уровне то без остановки будет клацать клемами реле.
Никто не будет клацать, проверяется же через && состояние, если оно выключено то еще раз его выключать никто не удет, так же и с включением. Можно разброс температур увеличить. Можно вместо реле полевик взять, ему не важно сколько раз там его дёрнули
Понял, Спасибо :)
Можно еще вопрос?)
Почему когда я вставляю данный код в свой скетч (просто выводить информацию без каких либо дальныйших действий) ардуино начинает подвисать, а точнее уже само управление реле становится лагающим :(
Сам код выглядет так:
Ну как минимум считывание температуры раз в секунду идёт, а сравнение идёт на каждом цикле loop. Смысла в этом нет. К тому же 1 секунда это сильно круто, за такое время температура не поменяется, если только со строительным феном бегать к датчику. А так не знаю, никогда оптимизацией не занимался под ардуинку, всегда хватало.
Где мне что вставить, что бы сократить задержку считывания dht11 хотя бы на 5-10 секунд?
DHT довольно медленные датчики, время считывания сенсора более 2х секунд, я с ними не работал, как чего ускорить не знаю.