//1
#include "RTClib.h"
RTC_DS1307 rtc;
DateTime now;
byte hrs, mins, secs;
#define KI 10 // коефицент для силы тока
const float BETA = 3950; // should match the Beta Coefficient of the thermistor
#define PIN_SPump 2
#define PIN_R0 3 // relay N
#define PIN_R1 4 //rel1
#define PIN_R2 5 //rel2
#define PIN_R3 6 //rel3
#define PIN_R4 7 //rel4
#define CELSIUS_MULT 64
#define CELSIUS_MULT_F 64.0
#define PIN_ESP A3
char Tempr; //
char TemprBuf;
enum KeyType { _DTempr1,_DTempr2,_DR0,_DR1,_DR2,_DR3,_DR4,//setDay
_NTempr1,_NTempr2,_NR0,_NR1,_NR2,_NR3,_NR4,//set Night
_Tempr1,_Tempr2,_R0,_R1,_R2,_R3,_R4, // State
_Tin,_Tin2,_Tout,_Twt,_pzmI,_pzmU,_pzmF,_pzmP,_Ipump,_I0,_I1,_I2, //sens int
_Esp,_Day,_v220,_Pump,_hr,_mn,_sc, //Sens boolean
_SetDay,_SetNight,_Sens,_Counters,_GetSet,
_noneKey } Key;
enum eventType {_none,_lcd,_sensor,_state,_rel,_calcAverage,_sendSerial,_relSwitch,_sendSettings};
volatile eventType Event;
struct CounterPack {
unsigned int P0; // Wt общее потребление
unsigned int P1; // Wt потребление насоса
unsigned int P2; // Wt потребление нагревателей
int tick;
} Counter;
struct SensPack {
float Tin;
float Tin2;
int Tout;
int Twt;
int pzmI; // общая
int pzmU;
int pzmF;
int pzmP;
int Ipump; // НАСОС
int Icontr; // УПРАВЛЯЕМАЯ НАРГУЗКА БЕЗ НАСОСА
int I0; // Wt общее потребление
int I1; // Wt потребление насоса
int I2; // Wt потребление нагревателей
boolean Day;
boolean Esp;
boolean v220;
boolean Pump;
boolean R0;
boolean R1;
boolean R2;
boolean R3;
boolean R4;
byte hr;
byte mn;
byte sc;
} Sens;
SensPack SensBuf;
volatile boolean ScreenNeedUpdate=true;
volatile boolean RPump=0;
volatile boolean RelNeedUpdate=false;
volatile boolean StateNeedUpdate=false;
volatile boolean SetUpdate=0;
boolean RTempr;
boolean RTime;
boolean RHeatUp;
boolean RBuf;
boolean R0Invert=0;
//boolean R0=1;
//boolean R1=1;
//boolean R2=1;
//boolean R3=0;
//boolean R4=1;
//enum RelType {_tmax,_r0,_r1,_r2,_r3,_r4}
//const byte N=10
//boolean Rel[N]
struct RelStruct {
int Tempr1;
int Tempr2;
boolean Day;
boolean RTempr1;
boolean RTempr2;
boolean R0;
boolean R1;
boolean R2;
boolean R3;
boolean R4;
// byte R1switch;
// byte R2switch;
// byte R3switch;
// byte R4switch;
} ;
boolean R2switch=0;
boolean R3switch=0;
boolean R4switch=0;
RelStruct State; //current state
RelStruct Set; //curent settings
RelStruct SetDay;
RelStruct SetNight;
RelStruct StateBuf;
unsigned long Tmr;
int TmInterval=500;
unsigned long TmrTick;
unsigned long TmrSensor;
int TmSensor=1000;
unsigned long TmrSwitch;
int TmSwitch=3000;
unsigned long TmrSend;
int TmSend=2000; // sec
int TickCounter=0;
int Sendcounter=0;
int IntervalSend=3;
//int SwitchCounter=0;
byte RelSwitch=0;
boolean Anim=false;
boolean Day=true;
//#define PIN_Day 13 //
String Str="";
void SensorRead();
void SendCounters(); //serialTransfer.h
#include "sensor.h"
#include "myLCD.h"
#include "serialTransfer.h"
void initDate();
void setup()
{
myLCDSetup();
Serial.begin(9600);
Serial.println("Start");
initDate();
sensorSetup();
pinMode(PIN_SPump, INPUT_PULLUP);
pinMode(PIN_ESP, INPUT);
pinMode(PIN_R0, OUTPUT); // rel1
pinMode(PIN_R1, OUTPUT); // rel1
pinMode(PIN_R2, OUTPUT); //rel2
pinMode(PIN_R3, OUTPUT);
pinMode(PIN_R4, OUTPUT);
Event=_none;
//HeatUp=1;
//RPump=digitalRead(PIN_SPump);
RPump=digitalRead(PIN_SPump);
SensorRead();
display();
RelUpdate();
attachInterrupt(0, R0Enable, CHANGE);
Tmr=millis();
TmrTick=Tmr;
//TmrSensor=Tmr;
//TmrSwitch=Tmr;
//TmrSend=Tmr;
}
void R0Enable()
{
if (!RPump) digitalWrite(PIN_R0,0);
RPump=digitalRead(PIN_SPump);
Event=_state;
}
void RelSwitchUpdate()
{
switch (RelSwitch) {
case 0:
R2switch=1;
R3switch=0;
R4switch=0;
RelSwitch=1;
break;
case 1:
R2switch=0;
R3switch=1;
R4switch=0;
RelSwitch=2;
break;
case 2:
R2switch=0;
R3switch=0;
R4switch=1;
RelSwitch=0;
break;
}
R2switch=1;
R3switch=1;
R4switch=1;
}
int Tick=1000;
void loop()
{
//Event=_none;
SeralTick();
if ( (Tmr - TmrTick) >= Tick) { Event=getTimeEvent(); Anim=(!Anim); TmrTick=Tmr; }
switch (Event) {
case _sensor : SensorRead();
StateUpdate();
RelSwitchUpdate(); //break;
display();
RelUpdate();
CountersUpdate();
//SendUpdate();
break;
case _state : StateUpdate();
RelSwitchUpdate();
display();
RelUpdate();
//SendUpdate();
break;
case _sendSettings:SendSingle(_SetDay);
Event=_none;
break;
}
Tmr=millis();
}
void SPrint(RelStruct _R)
{
Serial.print("R0-5:"+String(_R.R0)+String(_R.R1)+String(_R.R2)+String(_R.R3)+String(_R.R4));
Serial.print("");
}
void initDate()
{
SetDay.Day=1;
SetDay.Tempr1=11;
SetDay.Tempr1=12;
SetDay.R0=1; //пушка вентилятор + 1,5квт
SetDay.R1=0; //geirf + 1,5квт
SetDay.R2=1; // котельная 400вт
SetDay.R3=0; // комната 1эт 1квт
SetDay.R4=1; // спальня 2эт 400вт
SetDay.RTempr1=0; // ?
SetDay.RTempr2=0;
// SendSingle(_SetDay);
SetNight.Tempr1=20;
SetNight.Tempr2=18;
SetNight.Day=0;
SetNight.R0=1; //пушка вентилятор + 1,5квт
SetNight.R1=1; //geirf + 1,5квт
SetNight.R2=1; // котельная 400вт
SetNight.R3=1; // комната 1эт 1квт
SetNight.R4=1; // спальня 2эт 400вт
SetNight.RTempr1=0; // ?
SetNight.RTempr2=0;
// SendSingle(_NTempr); SendSingle(_NR0); SendSingle(_NR1); SendSingle(_NR2); SendSingle(_NR3); SendSingle(_NR4);
// Serial.println();
//Set=SetDay;
//State=SetDay;
State.R0=0;
State.R1=0;
State.R2=0;
State.R3=0;
State.R4=0;
Counter.tick=0;
Counter.P0=0;
}