Что не так?
- Войдите на сайт для отправки комментариев
Пт, 30/01/2015 - 22:55
Всем привет! Не как не могу понять, что не так. Заливаю на UNO (smd китай) скетч и выдает следующее, идет время на lcd, часы оставляют последний символ часа, минут и даже секунд ( тоесть тупо цифру 9) и это происходит циклично. "Hours" задерживает беспорядочно, "Minutes" оставляет с 59 секунды и до 11 следушей минуты и показывает что-то типо этого ( 21:59:59 --> 22:1(9):16 ), девятка так же залипает и с 30 на 40 секунду.
Как этот отрывок привести лад?
if (DS>setTmp&&Relay_4p==HIGH) { Relay_4p=LOW; digitalWrite(Relay_4, LOW); lcd.setCursor(12, 1); lcd.print("R4++"); } if (DS<setTmp&&Relay_4p==LOW) { Relay_4p=HIGH; digitalWrite(Relay_4, HIGH); lcd.setCursor(12, 1); lcd.print("R4--"); }
Заливка.
#include <Wire.h> #include <OneWire.h> #include <DallasTemperature.h> #include <LiquidCrystal_I2C.h> #include <DS1307.h> LiquidCrystal_I2C lcd(0x27,16,2); OneWire oneWire(10); // Термометр будет подключен на Pin 10 DallasTemperature sensors(&oneWire); // Создаем объект sensors, подключенный по OneWire DeviceAddress tempDeviceAddress; // переменная для хранения адреса датчика float DS=0; // переменная для текущего значения температуры int setTmp=24; // переменная для заданного значения температуры boolean Relay_4p=HIGH; // Переменна для хранения состояния реле вентиляции long previousMillis1 = 0; // Объявим переменные для задания задержки long interval1 = 1000; // интервал опроса датчиков температуры char incomingByte; int hours; int minutes; int On_Time=0; int Off_Time=0; int Curent_Time=0; int Relay_1 = 2; // R1 int Relay_2 = 3; // R2 int Relay_3 = 4; // R3 - Свет int Relay_4 = 5; // R4 - Вентиляция void setup(){ Wire.begin(); sensors.begin(); Serial.begin(9600); // Инициализируем Serial соединение lcd.init(); lcd.backlight(); lcd.begin(16, 2); lcd.setCursor(0, 0); lcd.print(">> ON >>"); lcd.setCursor(0, 1); lcd.print("<< <<"); Serial.println("Controller ON"); delay(1000); lcd.clear(); // Инициализируем термодатчик и установим разрешающую способность 12 бит sensors.getAddress(tempDeviceAddress, 0); sensors.setResolution(12); pinMode(Relay_1, OUTPUT); // R1 pinMode(Relay_2, OUTPUT); // R2 pinMode(Relay_3, OUTPUT); // R3 pinMode(Relay_4, OUTPUT); // R4 digitalWrite(Relay_1, HIGH); digitalWrite(Relay_2, HIGH); digitalWrite(Relay_3, HIGH); digitalWrite(Relay_4, HIGH); } void loop(){ hours = RTC.get(DS1307_HR,true); minutes = RTC.get(DS1307_MIN,false); lcd.setCursor(0,0); lcd.print(hours); lcd.print(":"); lcd.print(minutes); lcd.print(":"); lcd.print(RTC.get(DS1307_SEC,false)); On_Time=(6*60+01)-1; Off_Time=(23*60+59)-1; Curent_Time=RTC.get(DS1307_HR,true)*60+RTC.get(DS1307_MIN,false); // текущее время if (Curent_Time >= On_Time && Curent_Time <= Off_Time) { digitalWrite(Relay_3, LOW); lcd.setCursor(8, 1); lcd.print("R3++"); } else { digitalWrite(Relay_3, HIGH); lcd.setCursor(8, 1); lcd.print("R3--"); } // (DS18b20) Опроса датчика, вывод на LCD, управление вентиляции unsigned long currentMillis1 = millis(); if(currentMillis1 - previousMillis1 > interval1) { previousMillis1 = currentMillis1; // Запуск процедуры измерения температуры sensors.setWaitForConversion(false); sensors.requestTemperatures(); sensors.setWaitForConversion(true); sensors.getAddress(tempDeviceAddress, 0); DS=sensors.getTempC(tempDeviceAddress); Serial.print("Temperature: "); Serial.print(DS); Serial.println(" *C"); lcd.setCursor(9, 0); lcd.print(DS); lcd.setCursor(14, 0); lcd.print("*C"); } if (DS>setTmp&&Relay_4p==HIGH) { Relay_4p=LOW; digitalWrite(Relay_4, LOW); lcd.setCursor(12, 1); lcd.print("R4++"); } if (DS<setTmp&&Relay_4p==LOW) { Relay_4p=HIGH; digitalWrite(Relay_4, HIGH); lcd.setCursor(12, 1); lcd.print("R4--"); } // Проверяем Serial порт, если получим значение включаем порты реле if (Serial.available() > 0) { incomingByte = Serial.read()-48; if(incomingByte == 1) { int Val = !digitalRead(Relay_1); digitalWrite(Relay_1, Val); lcd.setCursor( 0, 1 ); lcd.print( Val ? "R1--" : "R1++" ); } if(incomingByte == 2) { int Val = !digitalRead(Relay_2); digitalWrite(Relay_2, Val); lcd.setCursor( 4, 1 ); lcd.print( Val ? "R2--" : "R2++" ); } } }
Заранее Спасибо.