термостат и таймер
- Войдите на сайт для отправки комментариев
Сб, 10/03/2018 - 22:00
Сделал скетч набора температуры по таймеру.Никак не могу добиться задать температуру и затем включить таймер
#include <EEPROM.h> #include <OneWire.h> #include <LiquidCrystal.h> // Подключаем библиотеку LiquidCrystal_I2C #include <DallasTemperature.h> // Подключаем библиотеку DallasTempature #define DS18B20 15 // Указываем, к какому выводу подключена DQ byte simvol[8] = {B11100,B10100,B11100,B00000,B00000,B00000,B00000,B00000,}; // Символ градуса OneWire oneWire(DS18B20); DallasTemperature sensors(&oneWire); LiquidCrystal lcd(8,9,4,5,6,7); int led = 13; // LED подсоединен к выводу 13 int x; //шина кнопок unsigned long currentTime; //текущее время unsigned long loopTime; //время окончания unsigned long LimitTime = 0; //таймер boolean running = false; //Флаг Запуска отсчета byte qty; // количество градусников на шине int temp; int tempMin = 35; // температура начала вращения вентилятора int tempMax = 48; // максимальная температура, когда вентилятор вращается на 100% int OUT = 12; int sensor=A2; int dig_out; float millivolt; void setup() { pinMode(OUT, OUTPUT); pinMode(led, OUTPUT); // устанавливаем вывод 12 как выход pinMode(A2,INPUT); // sets A2 as input lcd.begin(20, 4); currentTime = millis(); // считываем время, прошедшее с момен Serial.begin(9600); lcd.setCursor(1, 3); sensors.begin(); // Запуск библиотеки, по умолчанию 9 бит lcd.setCursor(2,0); // Устанавливаем курсор на 1 строку, ячейка 2 lcd.print(" t ="); // Выводим текст } void loop() { if (running == true) { //Выбран режим отсчета //отсчет времени currentTime = millis(); loopTime = currentTime + LimitTime; //когда закончить while(currentTime < loopTime){ // сравниваем текущее время с вр окончания digitalWrite(led, HIGH); // включаем LED digitalWrite(OUT, LOW); //Проверяем кнопку "Прервать" x = analogRead (0); //считываем шину кнопок delay(200); //защита от дребезга if (x < 60) { //"прервать" кнопка "Right " lcd.begin(20, 4); lcd.setCursor(24, 1); lcd.print("ERROR"); //выводим прервано //устанавливаем начальные значения running = false; LimitTime = 0; delay(3000); //пауза lcd.begin(20, 4); goto bailout; //переход на опрос клавиатуры } lcd.begin(20, 4); lcd.createChar(1, simvol); // Создаем символ под номером 1 sensors.requestTemperatures(); // Считываем показания температуры lcd.setCursor(8,0); // Устанавливаем курсор на 1 строку, ячейка 7 temp = sensors.getTempCByIndex(0); lcd.print(temp); // Выводим показания температуры lcd.setCursor(12,0); // Устанавливаем курсор на 1 строку, ячейка 12 lcd.print("\1"); // Выводим символ градуса lcd.setCursor(13,0); // Устанавливаем курсор на 1 строку, ячейка 13 lcd.print("C"); dig_out=analogRead(A2); millivolt=(dig_out*0.250); lcd.setCursor(26, 0); // выводим с 21го символа на экране в третьей строке. lcd.print(millivolt); // prints the input voltage lcd.print(" "); lcd.print(" Bar"); delay(100); // Выводим текст lcd.setCursor(1, 1); //курсор в 0 lcd.print("Taimer "); //время до окончания lcd.setCursor(8, 1); lcd.print(LimitTime/60000+1); lcd.print(" min"); LimitTime = LimitTime - (millis() - currentTime); //уменьшаем таймер для вывода на экран currentTime = millis(); //получаем новое время delay(800); } //окончание работы таймера lcd.setCursor(20, 1); lcd.print(" "); lcd.setCursor(20, 1); lcd.print("Off:"); running = false; delay (3000); digitalWrite(led, LOW); //отключаем диод digitalWrite(OUT, HIGH); lcd.begin(20, 4); } else {//Выбираем режим отсчета bailout: keypad (); } } //функция опроса клавиш: вверх вниз и выбор void keypad () { x = analogRead (0); delay(200); digitalWrite(led, LOW); digitalWrite(OUT, HIGH); lcd.setCursor(21,1); lcd.print ("taim"); lcd.setCursor(25,1); lcd.print (" "); if (x < 200) { //клавиша вверх if ((LimitTime + 60001) <= 1500001) //максимум 10 минут { LimitTime += 60000; // + 1 минута lcd.setCursor(26,1); lcd.print (LimitTime/60000); } else { //если пытаемся прибавить больше 25 минут lcd.setCursor(28,1); lcd.print ("max25"); delay (1000); lcd.setCursor(28,1); lcd.print (" "); } } else if (x < 400){ //кнопка вниз if (LimitTime > 60000) // минимум 1 минута { LimitTime -= 60000; lcd.setCursor(25,1); lcd.print (LimitTime/60000); } else { lcd.setCursor(28,1); lcd.print ("min1"); delay (1000); lcd.setCursor(25,1); lcd.print (" "); } } else if (x < 800){ //кнопка выбор if (LimitTime !=0 ) {running = true; //Запуск отсчета lcd.begin(20, 4); lcd.setCursor(4,1); lcd.print ("Start "); delay(1000); } else {//если не выбрали время lcd.setCursor(27,1); lcd.print ("00"); } } lcd.createChar(1, simvol); // Создаем символ под номером 1 lcd.setCursor(15,0); lcd.print(" "); lcd.setCursor(17, 1); lcd.print(13); lcd.print(" "); sensors.requestTemperatures(); // Считываем показания температуры lcd.setCursor(8,0); // Устанавливаем курсор на 1 строку, ячейка 7 temp = sensors.getTempCByIndex(0); lcd.print(temp); // Выводим показания температуры lcd.setCursor(12,0); // Устанавливаем курсор на 1 строку, ячейка 12 lcd.print("\1"); // Выводим символ градуса lcd.setCursor(13,0); // Устанавливаем курсор на 1 строку, ячейка 13 lcd.print("C"); // Выводим текст lcd.setCursor(18, 0); // рисуем птичка выхода for (int i = 0; i < qty; i++){ if (digitalRead(OUT)) lcd.write(2); else lcd.print(" "); } for (int i = 0; i < qty; i++) lcd.print(i+1); dig_out=analogRead(A2); millivolt=(dig_out*0.250); // converts the reading to millivolt lcd.setCursor(26, 0); // выводим с 21го символа на экране в третьей строке. lcd.print(millivolt); // prints the input voltage lcd.print(" Bar"); lcd.print(" "); }
тут все родили уже:
http://arduino.ru/forum/proekty/sutochnyi-termostat-dlya-gazovogo-kotla