Не работает алгоритм

StanHD
Offline
Зарегистрирован: 18.09.2014

Всем привет! Прошу помощи вас друзья в разработке алгоритма. Задача такая: есть реле, датчик освещенности, часы реального времени. Нужно: чтобы замерялись данные раз в в час ,12 раз в день. Оставшиеся 12 часов дня замеры происходить не должны. По данным освещенности срабатывал реле если освещенность большая, если маленькая то включалась реле. Я попробовал реализовать это, вот что у меня получилось:

#include <Wire.h>
#include <BH1750FVI.h>
#include <Wire.h>
#include "RTClib.h"
#include "PCF8574.h"

RTC_DS1307 RTC;
PCF8574 pcf;
const int Relay2_led = 6;
BH1750FVI LightSensor;
int numberofInspectionslighting = 0;
uint16_t Light_Intensity = 0;
int chek_light_sensor_time = 0;
boolean led_is_on=false;

long StartRelCn_2 =   1429812180  ;
const long DurationRelCh_2 = 20;


inline boolean isTimeToMeasurelight(long utime)

{
	return (utime >= StartRelCn_2);
}





void setup() {   
  pcf.begin(0x23);
  pcf.pinMode(Relay2_led,OUTPUT);
pcf.clear();
delay(400);
pcf.digitalWrite(Relay2_led,HIGH);
   Serial.begin(9600);
  LightSensor.begin();
  LightSensor.SetAddress(Device_Address_H);
  LightSensor.SetMode(Continuous_H_resolution_Mode);
  
  Wire.begin();
    RTC.begin();

  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
  Serial.println("Running...");
}


void loop() {
  
  DateTime now = RTC.now();
  long utime = now.unixtime();
  
if (numberofInspectionslighting <12)
	{
		led_is_on == true;
	}
	else
	{
		led_is_on == false;
	}

if (isTimeToMeasurelight(utime) && (led_is_on == false)){
	Light_Intensity = LightSensor.GetLightIntensity();
	StartRelCn_2 = StartRelCn_2+10;
	numberofInspectionslighting=numberofInspectionslighting+1;
	if (Light_Intensity>10){
	pcf.digitalWrite(Relay2_led,HIGH);
}
else{
	pcf.digitalWrite(Relay2_led,LOW);
}

}
else{
	
	if (isTimeToMeasurelight(utime) && (led_is_on == true))
	{
		numberofInspectionslighting = 0;
		StartRelCn_2=StartRelCn_2+60;
	}
}



  
  Serial.print("Light: ");
  Serial.print(Light_Intensity);
  Serial.println(" lux");
  delay(1000);
  Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();
    Serial.println("Light: ");
Serial.println(Light_Intensity);
Serial.println("numberofInspectionslighting: ");
Serial.println(numberofInspectionslighting);
Serial.println("isTimeToMeasurelight: ");
Serial.println(isTimeToMeasurelight(utime));

Serial.println("led_is_on: ");
Serial.println(led_is_on);
Serial.println("StartRelCn_2: ");
Serial.println(StartRelCn_2);
Serial.println("utime: ");
Serial.println(utime);
}

Странно себя ведет система. Сначала прибавляет до 12 счетчик и каждое прибавление добавляет 10 а потом на 13 раз 60 прибавляет а потом опять по 10. Скорее всего наверно ошибка у меня с флагом или нет? Подскажите как лучше это реализовать? Или как это мне доработать?

vov4ik
Offline
Зарегистрирован: 10.09.2013

Накидаливсё сразу в кучу и почему не работает, начинайте с часов добейтись чтобы  в сутки в Serial.println(); вылетало сигнал типа bool 12 раз 1, 12 раз 0, а дальше само пойдет. Не надо часы в сон вгонять пусть выдают сигнал каждый час но когда истина происходит замер освещенности.