/*
Funkční
- tlacitka aktivní
- nastavování pomocí tlačítek - OK
- mod pro ladění byte ladeni_sekundy = 1;
- nutno zkontrolovat v setup: Casovac_nasobek a Casovac_nastav_prirustek
- U arduina nefunguje OLED
OVLÁDÁNÍ:
- MENU: Tlc_1 a Tlc2 dlouze (svítí Led_4)
Tlc_1 + / Tlc2 - (blikne Led_3)
nečinnost = po několika sekundách se vrátí do normálu (Led_4 zhasne)
- Aktivace časovače: Tlc_1 dlouze (Led_3 se rozesvítí a svítí)
- Zapnutí časovače: Tlc_2 dlouze (Led_3 zhasne)
- Tlc_1 kratce -DOKONČIT NÁVOD !!!!!!!!!!!!!!!!!!!!!!!!!!!!!
dodelat TLC_3 - doladit
*/
byte ladeni_sekundy = 0; // pro ladění 1sekundy/0minuty
int Casovac_t_nastaveno = 2; // počáteční čas časovače v sekundách/minutách
int rozdil_Mh_limit_max = 25; // limit pro rozdíl Mh pro změnu čerpadla v sekundách
int beh_naprazdno = 15; // počet sekund běhu čer při nízkém tlaku - došla voda
int Tlak_min = 20; // min tlak pro zapnutí čerpadla
int Tlak_max = 40; // max tlak pro vypnutí čerpadla
/* Piny pro ARDUINO *****************************/
byte Led_1 = 13;
byte Led_2 = 12;
int Led_3 = 6;
int Led_4 = 5;
byte Led_5 = 10;
byte Led_6 = 9;
byte Tlc_1_Pin = 8;
byte Tlc_2_Pin = 7;
byte Tlc_3_Pin = 11;
int Tlak_Pin = A0; //Pin čidlo tlaku
int Rele_Cer_ON[] = {4, 3}; //Piny pro relé čerpadel Sever a Jih
/* Piny pro ESP32 ***************************************
byte Led_1 = 2;
byte Led_2 = 12;
byte Tlc_1_Pin = 4;
byte Tlc_2_Pin = 15;
int Tlak_Pin = 35; //Pin čidlo tlaku
int Rele_Cer_ON[] = {25, 26}; //Piny pro relé čerpadel Sever a Jih
*/
int Tlc_1_kratce = 0; //bylo zmáčknuto Tlc
int Tlc_2_kratce = 0; //bylo zmáčknuto Tlc
int Tlc_3_kratce = 0; //bylo zmáčknuto Tlc
byte Dve_Tlc_kratce = 0; //byly zmáčknuty 2 Tlc
byte Kratky_stisk_t = 1; // čas pro detekci krátkého stisku
byte Dlouhy_stisk_t = 2; // čas pro detekci dlouhého stisku
int oled_zobraz_menu_t = 0; //pomocná pro pauzu zobrazení oled_zobraz_menu
int Tlc_1_dlouze = 0; //bylo zmáčknuto Tlc
int Tlc_2_dlouze = 0; //bylo zmáčknuto Tlc
int Tlc_3_dlouze = 0; //bylo zmáčknuto Tlc
int Dve_Tlc_dlouze = 0; //byly zmáčknuty 2 Tlc
byte Zadne_Tlc = 0; //není zmáčknuté žádné tlačítko
byte Tlc_1 = 0; //pomocná
byte Tlc_2 = 0; //pomocná
byte Tlc_3 = 0; //pomocná
int Tlc_1_pocitani = 0; //pričítání času zmáčknutého Tlc
int Tlc_2_pocitani = 0; //pričítání času zmáčknutého Tlc
int Tlc_3_pocitani = 0; //pričítání času zmáčknutého Tlc
int Dve_Tlc_pocitadlo = 0; //pocitadlo sekund při zmačknutí 2 tlačítek naráz
int Led_pauza = 100;
int Led[] = {0, 100}; //pomocná pro rozblikání některé led a frekvence
int Tlak_Pin_Val = 0; //přečtená hodnota z tlakoměru, použita pro přemapování rozsahu
int Tlak = 0; //hodnota tlaku v Barech
int Prumery = 6; // počet průměrů pro stabilitu tlaku
int Tlak_d = 0; //dočasná hodnota tlaku pro výpočet průměrné hodnoty
int Cer_S = 0; //pomocná pro zapnutí čerpadla na S
int Cer_J = 1; //pomocná pro zapnutí čerpadla na J
int Cer = 0; //aktuálně provozované čerpadlo 0-S/1-J
int Je_voda = 1; //info, že je voda
int bezi = 0; //info, že běží čerpadlo
int bezi_Cas = 0; //pomocná pro chod naprázdno
int bezi_Cas_Mh[] = {0, 0}; //motohodiny jednotlivých čer v (s)
byte blokace_zmeny_cer = 0; //pro blokaci další změny čerpadla
byte id_zmeny = 0; //pocitadlo zmen čerpadel
int rozdil_MH = 20; //aktuální rozdíl Mh
//int rozdil_Mh_limit[] = {-20, 20}; // limit pro rozdíl Mh pro změnu čerpadla
int ID_mereni = 1; //ID měření
int prirustek = 1;
String slovo = "ahoj" ;
int slovo_h = 0;
String slovo1 = "";
int slovoh1 = 99;
String slovo2 = "";
int slovoh2 = 99;
int akce_pocitani = 0; //čítač v menu nastavení
int akce_zadani = 1; //pokusná proměnná, nyní se nevyužívá
int cekani_nastaveni = 1000; //v menu nastavení čekání pro zobrazení
int Casovac_nasobek = 120; //pro bliknutí časovače 1blik=2minut (120)
int Casovac = 0; //stav časovače 1zapnuto/0vypnuto
int Casovac_t = 0; //aktuální hodnota času v časovači v sekundách/minutách
//int Casovac_t_nastaveno = 2; // počáteční čas časovače v sekundách/minutách
int Casovac_nastav_prirustek = 1; //v nastavení přírustek při Tlc
int Casovac_t_docasny = 1; //pomocná proměnná
int Stop_cas = 0; //proměnná pro vypnutí časovače
/***********************setup*******************************************************/
void setup() {
if(ladeni_sekundy == 1){
Casovac_nasobek = 2; // násobek počtu bliknutí 2=1x blik pro 2s
Casovac_nastav_prirustek = 2; // v nastavení při zmáčknutí Tlc změní hodnotu (2=2s )
}
if(ladeni_sekundy == 0){
Casovac_nasobek = 120; // násobek počtu bliknutí 120=1x blik pro 2s
Casovac_t_nastaveno = 60 * Casovac_t_nastaveno;
Casovac_nastav_prirustek = 60; // v nastavení při zmáčknutí Tlc změní hodnotu (120=2minuty)
}
Casovac_t = Casovac_t_nastaveno;
Serial.begin(9600);
//Serial.begin(115200);
//Serial.println("Hello, ESP32!");
pinMode(Led_1, OUTPUT);
pinMode(Led_2, OUTPUT);
pinMode(Led_3, OUTPUT);
pinMode(Led_4, OUTPUT);
pinMode(Led_5, OUTPUT);
pinMode(Led_6, OUTPUT);
pinMode(Tlc_1_Pin, INPUT_PULLUP); //Zmáčknuto je HIGH
pinMode(Tlc_2_Pin, INPUT_PULLUP);
pinMode(Tlc_3_Pin, INPUT_PULLUP);
pinMode(Tlak_Pin, INPUT);
pinMode(Rele_Cer_ON[Cer_S], OUTPUT);
digitalWrite(Rele_Cer_ON[Cer_S], !LOW); //!HIGH - zapnuto
pinMode(Rele_Cer_ON[Cer_J], OUTPUT);
digitalWrite(Rele_Cer_ON[Cer_J], !LOW); //!HIGH - zapnuto
// Cer = Cer_S; //nastavení provozního čerpadla S/J
// Tlak_Pin = 0;
Serial.println (" BYL PROVEDEN NOVY START ARDUINA ");
delay(1000);
}
/***********************funkce******************************************************/
void Led_blik() {
digitalWrite(Led[0] , HIGH);
delay(Led[1] );
digitalWrite(Led[0] , LOW);
delay(Led[1] );
}
void Led_1_blik() {
digitalWrite(Led_1, HIGH);
delay(Led_pauza);
digitalWrite(Led_1, LOW);
delay(Led_pauza);
}
void Led_2_blik() {
digitalWrite(Led_1, HIGH);
delay(Led_pauza);
digitalWrite(Led_1, LOW);
delay(Led_pauza);
}
/**********************stisk Tlc*****************************/
void Tlc_stisk() {
Tlc_1 = !digitalRead(Tlc_1_Pin);
Tlc_2 = !digitalRead(Tlc_2_Pin);
if (Tlc_1 == 1 && Tlc_2 == 1 ){
Zadne_Tlc = 0;
Dve_Tlc_pocitadlo += 1;
//Serial.print(" 2 Tlc aktivni(s): ");
//Serial.println(Dve_Tlc_pocitadlo);
if (Dve_Tlc_pocitadlo == 1){
digitalWrite(Led_1, HIGH);
digitalWrite(Led_2, HIGH);
Dve_Tlc_kratce = 1;
Tlc_1_pocitani = 0;
Tlc_1_kratce = 0;
Tlc_2_pocitani = 0;
Tlc_2_kratce = 0;
Serial.println(" Dve_Tlc_kratce: ");
//Led_pauza = 1000;
//Led_1_blik();
}
if (Dve_Tlc_pocitadlo > Dlouhy_stisk_t ) {
Dve_Tlc_dlouze = 1;
Dve_Tlc_kratce = 0;
Led_pauza = 100;
Led_1_blik();
Led_2_blik();
Led_1_blik();
Led_2_blik();
Serial.println(" Dve_Tlc_dlouze ");
}
}
if (Tlc_1 == 1 && Tlc_2 == 0){
Zadne_Tlc = 0;
Tlc_1_pocitani += 1;
// Serial.print(" Tlc1 aktivni(s): ");
// Serial.println(Tlc_1_pocitani);
if (Tlc_1_pocitani == Kratky_stisk_t){
digitalWrite(Led_1, HIGH);
Tlc_1_kratce = 1;
Serial.print(" Tlc1 kratce: ");
Serial.println(Tlc_1_kratce);
}
if (Tlc_1_pocitani > Dlouhy_stisk_t ) {
Tlc_1_dlouze = 1;
Serial.print(" Tlc_1 DLOUZE: ");
Serial.println(Tlc_1_dlouze);
Tlc_1_kratce = 0;
// Serial.print(" Tlc1 kratce: ");
// Serial.println(Tlc_1_kratce);
Led_pauza = 50;
Led_1_blik();
}
}
if (Tlc_1 == 0 && Tlc_2 == 1){
Zadne_Tlc = 0;
Tlc_2_pocitani += 1;
//Serial.print(" Tlc2 aktivni(s): ");
//Serial.println(Tlc_2_pocitani);
if (Tlc_2_pocitani == Kratky_stisk_t){
digitalWrite(Led_2, HIGH);
Tlc_2_kratce = 1;
Serial.print(" Tlc2 kratce: ");
Serial.println(Tlc_2_kratce);
}
if (Tlc_2_pocitani > Dlouhy_stisk_t ) {
Tlc_2_dlouze = 1;
Serial.print(" Tlc_2 DLOUZE: ");
Serial.println(Tlc_2_dlouze);
Tlc_2_kratce = 0;
// Serial.print(" Tlc2 kratce: ");
// Serial.println(Tlc_2_kratce);
Led_pauza = 50;
Led_2_blik();
}
}
if (Tlc_1 == 0) {
digitalWrite(Led_1, LOW);
Tlc_1_pocitani = 0;
Tlc_1_kratce = 0;
Tlc_1_dlouze = 0;
Dve_Tlc_kratce = 0;
Dve_Tlc_dlouze = 0;
Dve_Tlc_pocitadlo = 0;
/* Serial.print(" Tlc1 kratce: ");
Serial.println(Tlc_1_kratce);
Serial.print(" Tlc_1 DLOUZE: ");
Serial.println(Tlc_1_dlouze); */
}
if (Tlc_2 == 0) {
digitalWrite(Led_2, LOW);
Tlc_2_pocitani = 0;
Tlc_2_kratce = 0;
Tlc_2_dlouze = 0;
Dve_Tlc_kratce = 0;
Dve_Tlc_dlouze = 0;
Dve_Tlc_pocitadlo = 0;
/* Serial.print(" Tlc2 kratce: ");
Serial.println(Tlc_2_kratce);
Serial.print(" Tlc_2 DLOUZE: ");
Serial.println(Tlc_2_dlouze); */
}
if (Tlc_1 == 0 && Tlc_2 == 0){
Zadne_Tlc = 1;
}
/*
Serial.print(" Tlc1 kratce: ");
Serial.println(Tlc_1_kratce);
Serial.print(" Tlc_1 DLOUZE: ");
Serial.println(Tlc_1_dlouze);
Serial.print(" Tlc2 kratce: ");
Serial.println(Tlc_2_kratce);
Serial.print(" Tlc_2 DLOUZE: ");
Serial.println(Tlc_2_dlouze);
Serial.print(" 2 Tlc kratce: ");
Serial.println(Dve_Tlc_kratce);
Serial.print(" 2 Tlc DLOUZE: ");
Serial.println(Dve_Tlc_dlouze);
*/
}
void Vyber_cerp() {
Tlc_3 = !digitalRead(Tlc_3_Pin);
if (Tlc_3 == 1 ){
Tlc_3_pocitani += 1;
// Serial.print(" Tlc1 aktivni(s): ");
// Serial.println(Tlc_1_pocitani);
if (Tlc_1_pocitani == Kratky_stisk_t){
digitalWrite(Led_5, HIGH);
Tlc_3_kratce = 1;
Serial.print(" Tlc3 kratce: ");
Serial.println(Tlc_3_kratce);
}
if (Tlc_3_pocitani > Dlouhy_stisk_t ) {
Tlc_3_dlouze = 1;
Serial.print(" Tlc_3 DLOUZE: ");
Serial.println(Tlc_3_dlouze);
Tlc_3_kratce = 0;
// Serial.print(" Tlc1 kratce: ");
// Serial.println(Tlc_1_kratce);
// Led_pauza = 50;
// Led_1_blik();
}
switch (Tlc_3_pocitani) {
case 1:
digitalWrite(Led_5, HIGH);
digitalWrite(Led_6, LOW);
Cer = Cer_S;
Serial.println("Zmena cerpadla rucne Cer_S");
digitalWrite(Rele_Cer_ON[Cer_S], !HIGH);
digitalWrite(Rele_Cer_ON[Cer_J], !LOW);
slovo = "Provoz S";
blokace_zmeny_cer = 1;
id_zmeny = 3;
Serial.println("blokace_zmeny_cer rucni zadani: ANO");
slovo = "Blokc zmen";
break;
case 2:
digitalWrite(Led_5, LOW);
digitalWrite(Led_6, HIGH);
Cer = Cer_J;
Serial.println("Zmena cerpadla rucne Cer_J");
digitalWrite(Rele_Cer_ON[Cer_S], !LOW);
digitalWrite(Rele_Cer_ON[Cer_J], !HIGH);
slovo = "Provoz J";
blokace_zmeny_cer = 1;
id_zmeny = 3;
Serial.println("blokace_zmeny_cer rucni zadani: ANO");
slovo = "Blokc zmen";
break;
case 3:
digitalWrite(Led_5, HIGH);
digitalWrite(Led_6, HIGH);
Cer = Cer_S;
Serial.println("Zmena cerpadla rucne Cer_S");
digitalWrite(Rele_Cer_ON[Cer_S], !HIGH);
digitalWrite(Rele_Cer_ON[Cer_J], !HIGH);
slovo = "Provoz S+J";
blokace_zmeny_cer = 1;
id_zmeny = 3;
Serial.println("blokace_zmeny_cer rucni zadani: ANO");
slovo = "Blokc zmen";
break;
case 4:
digitalWrite(Led_5, LOW);
digitalWrite(Led_6, LOW);
blokace_zmeny_cer = 0;
id_zmeny = 0;
Tlc_3_pocitani = 0;
break;
}
}
}
/******************************************************************/
void Dve_Tlc_dlouze_akce() { //skok do akce (menu) po Dve_Tlc_dlouze
if (Dve_Tlc_dlouze == 1 ){
akce_pocitani = 0; //pocitadlo casu v celé akci
akce_zadani = 0;
Led[1] = 1000; //pauza mezi stavy níže
digitalWrite(Led_3 , HIGH);
digitalWrite(Led_4 , HIGH);
delay(Led[1] );
digitalWrite(Led_3 , LOW);
digitalWrite(Led_4 , LOW);
delay(Led[1] );
digitalWrite(Led_4 , HIGH);
Serial.println(" akce_dve_tlacitka_nastaveni: ");
//Serial.println(akce_pocitani);
for (int i = 0; i <= 10; i++) { //smyčka pro zadání tlačítky, po i max (10) skončí
//Serial.print(" Casovac: ");
//Serial.println(Casovac);
slovo1 = "Casovac: ";
slovoh1 = Casovac;
delay (1000); //pauza pro zadávání hodnot časovače v menu
//Serial.print(" i: ");
//Serial.println(i);
akce_pocitani += 1; //pocitadlo casu v celé akci po 1
/** Serial.print(" akce_pocitani: ");
Serial.println(akce_pocitani);
Serial.print(" Tlc_1_kratce: ");
Serial.println(Tlc_1_kratce);**/
if (Dve_Tlc_dlouze == 1 ){ //blokace ukončení for při držení obou TLC
i = 0;
}
Tlc_stisk();
switch (Tlc_1_kratce) {
case 1:
akce_zadani += 1;
Casovac_t_nastaveno += Casovac_nastav_prirustek;
Led[0] = Led_3;
Led[1] = 100;
Led_blik();
Serial.print(" Casovac: ");
Serial.println(Casovac_t_nastaveno);
// Tlc_1_kratce = 0;
i = 0;
// Serial.print(" akce_zadani: ");
// Serial.println(akce_zadani);
// Serial.print(" Tlc_1_kratce v CASE_1: ");
// Serial.println(Tlc_1_kratce);
break;
case 0:
Tlc_1_kratce = 0;
// Serial.print(" Tlc_1_kratce v CASE_2: ");
// Serial.println(Tlc_1_kratce);
break;
}
switch (Tlc_1_dlouze) {
case 1:
akce_zadani += 5;
Casovac_t_nastaveno += Casovac_nastav_prirustek;
Led[0] = Led_3;
Led[1] = 100;
Led_blik();
Serial.print(" Casovac: ");
Serial.println(Casovac_t_nastaveno);
// Tlc_1_kratce = 0;
i = 0;
// Serial.print(" akce_zadani: ");
// Serial.println(akce_zadani);
// Serial.print(" Tlc_1_kratce v CASE_1: ");
// Serial.println(Tlc_1_kratce);
break;
case 0:
Tlc_1_dlouze = 0;
// Serial.print(" Tlc_1_dlouze v CASE_2: ");
// Serial.println(Tlc_1_dlouze);
break;
}
switch (Tlc_2_kratce) {
case 1:
akce_zadani -= 1;
Casovac_t_nastaveno -= Casovac_nastav_prirustek;
Led[0] = Led_3;
Led[1] = 100;
Led_blik();
Serial.print(" Casovac: ");
Serial.println(Casovac_t_nastaveno);
// Tlc_1_kratce = 0;
i = 0;
// Serial.print(" akce_zadani: ");
// Serial.println(akce_zadani);
// Serial.print(" Tlc_1_kratce v CASE_1: ");
// Serial.println(Tlc_1_kratce);
break;
case 0:
Tlc_2_kratce = 0;
// Serial.print(" Tlc_1_kratce v CASE_2: ");
// Serial.println(Tlc_1_kratce);
break;
}
switch (Tlc_2_dlouze) {
case 1:
akce_zadani -= 1;
Casovac_t_nastaveno -= Casovac_nastav_prirustek;
Led[0] = Led_3;
Led[1] = 100;
Led_blik();
Serial.print(" Casovac: ");
Serial.println(Casovac_t_nastaveno);
// Tlc_1_kratce = 0;
i = 0;
// Serial.print(" akce_zadani: ");
// Serial.println(akce_zadani);
// Serial.print(" Tlc_1_kratce v CASE_1: ");
// Serial.println(Tlc_1_kratce);
break;
case 0:
Tlc_2_dlouze = 0;
// Serial.print(" Tlc_1_dlouze v CASE_2: ");
// Serial.println(Tlc_1_dlouze);
break;
}
slovo2 = "Cas: ";
slovoh2 = Casovac_t_nastaveno;
oled_zobraz_menu();
}
Serial.println(" AKCE SKONCILA ");
digitalWrite(Led_4 , LOW);
//delay (1000);
//Tlc_stisk();
}
}
void ZmerTlak() { //Zprůměrovaná aktuální hodnota - (z "Prumery" hodnot)
byte i = 0;
Tlak = 0;
Tlak_d = 0;
for (i = 0; i < Prumery; i++) { //suma hodnot a přemapování
Tlak_Pin_Val = analogRead(Tlak_Pin); //hodnota na pinu s tlakoměrem
//Tlak_d = map(Tlak_Pin_Val, 0, 4095, 0, 120); //ESP32_přepočet hodnoty na Tlak v Pa
Tlak_d = map(Tlak_Pin_Val, 0, 1023, 0, 120); //UNO_přepočet hodnoty na Tlak v Pa
Tlak += Tlak_d; //uložení sumy nových hodnot tlaku
delay (100);
}
Tlak = Tlak / Prumery ; //Průměrná hodnota z Prumery
Serial.print ("Tlak_Pin: ");
Serial.print (Tlak_Pin_Val);
Serial.print (" Tlak_Pa: ");
Serial.println (Tlak);
}
void Spinani_cerp() { //funkce na ovládání a regulaci čerpadel
if (Tlak < Tlak_min && bezi == 0 && id_zmeny < 2 ) { //zapnutí stojícího cer od nízkého tlaku (1x)
bezi = 1;
bezi_Cas = 0; //vynulování počítadla délky běhu po každém zapnutí pro detekci behu naprazdno
Serial.print("start cerpadla: ");
Serial.println(Cer);
//Serial.print("bezi_Cas: ");
//Serial.println(bezi_Cas);
//Serial.print("Casovac bezi: ");
//Serial.println(Casovac_t);
//slovo = "BEZI";
}
if (bezi == 1){ //když je čerpadlo v chodu:
digitalWrite(Rele_Cer_ON[Cer], !HIGH);
bezi_Cas += prirustek; //počítání délky běhu po každém zapnutí
bezi_Cas_Mh[Cer] += prirustek; //počítání motohodin jednotlivých čerpadel
//rozdil_MH = bezi_Cas_Mh[0] - bezi_Cas_Mh[1];
rozdil_MH -= 1;
Serial.print("rozdil_MH: ");
Serial.println(rozdil_MH);
if (Casovac == 1){
Casovac_t -= 1; //když je čerp zapnuté a běží, tak časovač běží
}
}
if (Tlak > Tlak_max ) { //STOP cerpadla od Tlak_max
bezi = 0;
id_zmeny = 0;
Serial.println("STOP cerpadla od Tlak_max ");
slovo = "Stop Pmax";
}
if (Casovac == 1 && Casovac_t < 0 ) { //STOP cerpadla od casovace
bezi = 0;
Stop_cas = 1;
Led[0] = Led_4;
digitalWrite(Led[0] , HIGH);
// id_zmeny = 0;
Serial.println("STOP cerpadla od casovace ");
slovo = "Stop CAS";
}
if (Tlak < Tlak_min && bezi_Cas > beh_naprazdno ) { //zjištění běhu bez vody - prázdná nádrž
Je_voda = 0;
bezi = 0;
Serial.println("** NENI VODA **");
slovo = "NENI VODA";
}
if (bezi == 0 ) { //skutečné vypnutí čerpadla
digitalWrite(Rele_Cer_ON[Cer], !LOW);
//Serial.println("if (bezi == 0 )");
}
}
void prep_cer_voda() { //přepnutí čerpadel, když dojde voda
switch (Cer){
case 0:
Cer = Cer_J;
Serial.println("Zmena cerpadla od NENI_VODA na Cer_J");
digitalWrite(Rele_Cer_ON[Cer_S], !LOW);
slovo = "Zmena J";
break;
case 1:
Cer = Cer_S;
Serial.println("Zmena cerpadla od NENI_VODA na Cer_S ");
digitalWrite(Rele_Cer_ON[Cer_J], !LOW);
slovo = "Zmena S";
break;
}
Je_voda = 1;
id_zmeny += 1;
//Serial.println("Je_voda = 1;");
Serial.print("id_zmeny: ");
Serial.println(id_zmeny);
// Cas_zmeny_cer = 0;
blokace_zmeny_cer = 1;
Serial.println("blokace_zmeny_cer: ANO");
slovo = "Blokc zmen";
}
void prep_cer_Mh() { //periodické přepínání čerpadel od Mh
switch (Cer){
case 0:
Cer = Cer_J; //změna na čerpadlo 1
Serial.println("Zmena cerpadla na Cer_J od Mh");
digitalWrite(Rele_Cer_ON[Cer_S], !LOW);
slovo = "Zmena Mh-J";
break;
case 1:
Cer = Cer_S; //změna na čerpadlo 0 (kotelna)
Serial.println("Zmena cerpadla na Cer_S od Mh");
digitalWrite(Rele_Cer_ON[Cer_J], !LOW);
slovo = "Zmena Mh-S";
break;
}
id_zmeny = 0;
//Cas_zmeny_cer = 0;
bezi_Cas = 0; //vynulování počítadla délky běhu po každém zapnutí pro detekci behu naprazdno
}
void oled_zobraz(){ //pro OLED zobrazení, na arduinu nepoužito
/** display.clearDisplay();
display.setCursor(0, 0);
display.print(Tlak);
display.print(" Cer ");
display.print(Cer);
display.print(" ");
display.println(bezi);
display.print("t: ");
display.print(Casovac);
display.print(" ");
display.println(Casovac_t);
// display.print(bezi_Cas_Mh[0]);
// display.print(" ");
// display.print(bezi_Cas_Mh[1]);
display.print("MH: ");
display.println(rozdil_MH);
display.print(slovo);
display.print(slovo_h);
display.display();**/
}
void oled_zobraz_menu(){ //pro OLED zobrazení, na arduinu nepoužito
/** display.clearDisplay();
display.setCursor(0, 0);
display.println(slovo1);
display.println(slovoh1);
display.print(slovo2);
display.println(slovoh2);
display.display();**/
}
/***********************loop********************************************************/
void loop() {
delay (500);
ID_mereni += prirustek;
//Serial.print(" ID_mereni: ");
//Serial.println(ID_mereni);
ZmerTlak();
Tlc_stisk();
Dve_Tlc_dlouze_akce();
oled_zobraz();
if (Tlc_1_dlouze == 1 ){ //aktivace časovače
Casovac = 1;
Casovac_t = Casovac_t_nastaveno ; //nastavení časovače na zadanou hodnotu
Serial.println("!!!!!!! Tlc_1_dlouze !!!!!!!!! : ");
Serial.print("!!!!!!! Casovac_t_nastaveno !!!!!!!!! : ");
Serial.println(Casovac_t_nastaveno);
Serial.print("!!!!!!! Casovac_t !!!!!!!!! : ");
Serial.println(Casovac_t);
Stop_cas = 0;
slovo = "CASOVAC 1";
slovo1 = "Casovac: ";
slovoh1 = Casovac;
slovo2 = "Cas: ";
slovoh2 = Casovac_t_nastaveno;
oled_zobraz_menu();
Serial.print("!!!!!!! CASOVAC AKTIVNI !!!!!!!!! : ");
Serial.println(Casovac_t);
Led[0] = Led_3;
Led[1] = 1000;
Led_blik();
digitalWrite(Led_3 , HIGH);
digitalWrite(Led_4 , LOW);
delay (2000);
}
if (Tlc_1_kratce == 1 ){ //zobrazení zadaného stavu časovače
Serial.print("!!!!!!! Casovac_t_nastaveno !!!!!!!!! : ");
Serial.println(Casovac_t_nastaveno);
Casovac_t_nastaveno = Casovac_t_nastaveno / Casovac_nasobek;
if (Casovac == 0){
for (int i = 0; i <= Casovac_t_nastaveno; i++) {
Serial.print("!!!!!!! Casovac_t_nastaveno !!!!!!!!! : ");
Serial.println(Casovac_t_nastaveno);
if (Tlc_1_dlouze == 1){
i = Casovac_t_nastaveno;
}
Led[0] = Led_4;
Led[1] = 500;
Led_blik();
Tlc_stisk();
}
Casovac_t_nastaveno = Casovac_t_nastaveno * Casovac_nasobek;
Serial.print("!!!!!!! Casovac_t_nastaveno !!!!!!!!! : ");
Serial.println(Casovac_t_nastaveno);
slovo1 = "Casovac: ";
slovoh1 = Casovac;
slovo2 = "Cas: ";
slovoh2 = Casovac_t;
oled_zobraz_menu();
oled_zobraz_menu_t = ID_mereni;
}
// delay (2000);
}
if (Tlc_2_kratce == 1 ){ //zobrazení aktuálního stavu časovače
Serial.print("!!!!!!! Casovac_t !!!!!!!!! : ");
Serial.println(Casovac_t);
Casovac_t_docasny = Casovac_t / Casovac_nasobek;
//Serial.println(Casovac_t);
for (int i = 0; i <= (Casovac_t_docasny); i++) {
if (Tlc_2_dlouze == 1){
break;
}
Led[0] = Led_4;
Led[1] = 500;
Led_blik();
Serial.println(Casovac_t);
Tlc_stisk();
}
//Serial.println(Casovac_t);
}
if (Tlc_2_dlouze == 1 ){ //zrušení časovače
Casovac = 0;
Stop_cas = 0;
// id_zmeny = 0;
slovo = "CASOVAC 0";
Casovac_t = Casovac_t_nastaveno;
slovo1 = "Casovac: ";
slovoh1 = Casovac;
slovo2 = "Cas: ";
slovoh2 = Casovac_t_nastaveno;
oled_zobraz_menu();
Serial.println("!!!!!!! CASOVAC ZRUSEN !!!!!!!!! ");
//Led[0] = Led_3;
//Led[1] = 1000;
//Led_blik();
digitalWrite(Led_3 , LOW);
digitalWrite(Led_4 , LOW);
//Serial.println(Casovac_t);
delay (2000);
}
if(Casovac == 1) {
Serial.print("CASOVAC : ");
Serial.println(Casovac_t);
}
oled_zobraz();
if (Je_voda == 1 && Stop_cas == 0) {
Spinani_cerp();
//Serial.println("if (Je_voda = 1 && Stop_cas == 0) ");
}
if (Je_voda == 0 && id_zmeny < 2){ //přepnutí čerpadlel když není blokace další změny
//Serial.print("Je_voda: ");
//Serial.println(Je_voda);
prep_cer_voda();
//Serial.println("if (if (Je_voda == 0 && id_zmeny < 2) ");
}
if (rozdil_MH == 0){ //při rozdílu Mh se spustí změna čerpadla
if (blokace_zmeny_cer == 0){ //pokud není blokace změny, kdy na vedlejším došla voda
Serial.print("Prejeti od rozdilu Mh ");
slovo = "Prejet od Mh";
bezi_Cas_Mh[0] = 0;
bezi_Cas_Mh[1] = 0;
prep_cer_Mh();
rozdil_MH = rozdil_Mh_limit_max;
}
}
//Serial.print("id_zmeny: ");
//Serial.println(id_zmeny);
//Serial.print("rozdil_MH: ");
//Serial.println(rozdil_MH);
}