Не работает алгоритм
- Войдите на сайт для отправки комментариев
Чт, 23/04/2015 - 16:17
Всем привет! Прошу помощи вас друзья в разработке алгоритма. Задача такая: есть реле, датчик освещенности, часы реального времени. Нужно: чтобы замерялись данные раз в в час ,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. Скорее всего наверно ошибка у меня с флагом или нет? Подскажите как лучше это реализовать? Или как это мне доработать?
Накидаливсё сразу в кучу и почему не работает, начинайте с часов добейтись чтобы в сутки в
Serial.println(); вылетало сигнал типа bool 12 раз 1, 12 раз 0, а дальше само пойдет. Не надо часы в сон вгонять пусть выдают сигнал каждый час но когда истина происходит замер освещенности.