Что не так?

Нет ответов
Marlen S
Offline
Зарегистрирован: 13.01.2015

 

    Всем привет! Не как не могу понять, что не так. Заливаю на 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++" );
    } 
  }
}

 

Заранее Спасибо.