Что не так?
- Войдите на сайт для отправки комментариев
Пт, 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++" );
}
}
}
Заранее Спасибо.