#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define inNastavTepChladic A0
#define inNastavTepOdpad A2
int outLed12_otevrenAut = 12;
int outLed10_zavrenAut = 10;
int outLed5_otevrenMan = 5;
int outLed3_zavrenMan = 3;
int outLed4_provoz = 4;
int outVentil8 = 8;
int inPrepinac6 = 6;
int inPrepinac7 = 7;
const int inTeplomer9 = 9;
int chladicTepDalas;
int odpadTepDalas;
int tepChladicVal = 0;
int tepChladicTep;
int tepOdpadVal = 0;
int tepOdpadTep;
int bojlerTep;
int rozdilTeploty = 0;
int rozdilTeplotyVent = 0;
int zapnutiVal = 0;
int vypnutiVal = 0;
int zapnutiHod = 0;
int vypnutiHod = 0;
int zapnutiHodVent = 10;
boolean prepinacAuto = false;
boolean prepinacManualOtevreno = false;
boolean prepinacManualzavreno = false;
boolean ventilOtevren = false;
boolean ventilSeOtvira = false;
boolean ventilZavren = false;
boolean ventilSeZavira = false;
boolean cerpadloObehZaple = false;
boolean cerpadloPrehratiZaple = false;
boolean cekejPoStartu = true;
//dallas
OneWire oneWireDS(inTeplomer9);
DallasTemperature senzoryDS(&oneWireDS);
// Set the LCD address to 0x27 for a 20 chars and 4 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(9600);
pinMode(inPrepinac6, INPUT_PULLUP);
pinMode(inPrepinac7, INPUT_PULLUP);
pinMode(outLed12_otevrenAut, OUTPUT);
pinMode(outLed10_zavrenAut, OUTPUT);
pinMode(outLed5_otevrenMan, OUTPUT);
pinMode(outLed3_zavrenMan, OUTPUT);
pinMode(outLed4_provoz, OUTPUT);
pinMode(outVentil8, OUTPUT);
digitalWrite(outLed12_otevrenAut, LOW);
digitalWrite(outLed10_zavrenAut, LOW);
digitalWrite(outLed5_otevrenMan, LOW);
digitalWrite(outLed3_zavrenMan, LOW);
digitalWrite(outLed4_provoz, LOW);
digitalWrite(outVentil8, LOW);
// zapnutí komunikace knihovny s teplotním čidlem
senzoryDS.begin();
// initialize the LCD
//lcd.begin(); //
lcd.init(); //
lcd.backlight(); //
zobrazHodnoty();
}
void loop() {
zobrazHodnoty();
tepChladicVal = analogRead(inNastavTepChladic);
tepOdpadVal = analogRead(inNastavTepOdpad);
tepChladicTep = map(tepChladicVal, 0, 1023, 20, 80);
tepOdpadTep = map(tepOdpadVal, 0, 1023, 5, 40);
///// wokwi
const float BETA = 3950;
int chladicVal2 = analogRead(A6);
int odpadVal2 = analogRead(A7);
chladicTepDalas = 1 / (log(1 / (1023. / chladicVal2 - 1)) / BETA + 1.0 / 298.15) - 253.15;
odpadTepDalas = 1 / (log(1 / (1023. / odpadVal2 - 1)) / BETA + 1.0 / 298.15) - 253.15;
//// wokwi
// načtení informací ze všech připojených čidel na daném pinu
senzoryDS.requestTemperatures();
//chladicTepDalas = senzoryDS.getTempCByIndex(0);
//odpadTepDalas = senzoryDS.getTempCByIndex(1);
int prepinac6Val = digitalRead(inPrepinac6);
int prepinac7Val = digitalRead(inPrepinac7);
Serial.print(" 6: ");
Serial.print(prepinac6Val);
Serial.print(" 7: ");
Serial.println(prepinac7Val);
// vypni vse D6=1 D7=1
if (prepinac6Val == 1 && prepinac7Val == 1 ) {
prepinacManualOtevreno = false;
prepinacManualzavreno = false;
prepinacAuto = false;
digitalWrite(outLed4_provoz, LOW);
digitalWrite(outLed5_otevrenMan, LOW);
digitalWrite(outLed3_zavrenMan, LOW);
digitalWrite(outVentil8, LOW);
}
// manual-otevreno D6=0 D7=1
if (prepinac6Val == 0 && prepinac7Val == 1 && prepinacManualOtevreno == false) {
prepinacManualOtevreno = true;
prepinacManualzavreno = false;
prepinacAuto = false;
digitalWrite(outLed4_provoz, LOW);
digitalWrite(outLed5_otevrenMan, HIGH);
digitalWrite(outLed3_zavrenMan, LOW);
digitalWrite(outVentil8, HIGH);
}
// manual-zavreno D6=1 D7=0
if (prepinac6Val == 1 && prepinac7Val == 0 && prepinacManualzavreno == false) {
prepinacManualOtevreno = false;
prepinacManualzavreno = true;
prepinacAuto = false;
digitalWrite(outLed4_provoz, LOW);
digitalWrite(outLed5_otevrenMan, LOW);
digitalWrite(outLed3_zavrenMan, HIGH);
digitalWrite(outVentil8, LOW);
}
// automat D6=0 D7=0
if (prepinac6Val == 0 && prepinac7Val == 0 && prepinacAuto == false) {
prepinacManualOtevreno = false;
prepinacManualzavreno = false;
prepinacAuto = true;
digitalWrite(outLed4_provoz, HIGH);
digitalWrite(outLed5_otevrenMan, LOW);
digitalWrite(outLed3_zavrenMan, LOW);
digitalWrite(outVentil8, LOW);
}
// automatika
if (prepinacAuto == true) {
if (chladicTepDalas > tepChladicTep && ventilOtevren == false) {
ventilOtevren = true;
digitalWrite(outVentil8, HIGH);
Serial.println("Auto - zapni");
}
if (odpadTepDalas < tepOdpadTep && ventilOtevren == true) {
ventilOtevren = false;
digitalWrite(outVentil8, LOW);
Serial.println("Auto - vypni");
}
}
}
void zobrazHodnoty() {
delay(500);
//lcd.clear();
lcd.setCursor(0, 0);
lcd.print("T-CH:");
lcd.setCursor(5, 0);
lcd.print(" ");
lcd.setCursor(5, 0);
lcd.print(chladicTepDalas);
lcd.setCursor(8, 0);
lcd.print("N-CH:");
lcd.setCursor(13, 0);
lcd.print(" ");
lcd.setCursor(13, 0);
lcd.print(tepChladicTep);
////
lcd.setCursor(0, 1);
lcd.print("T-OD:");
lcd.setCursor(5, 1);
lcd.print(" ");
lcd.setCursor(5, 1);
lcd.print(odpadTepDalas);
lcd.setCursor(8, 1);
lcd.print("N-OD:");
lcd.setCursor(13, 1);
lcd.print(" ");
lcd.setCursor(13, 1);
lcd.print(tepOdpadTep);
////
}
provoz D4
Ventil D8
A-Otevren12
A-zavren10
M-zavreni3
M-otevren5
TeplChlad
TepOdpad
chladic
odpadni