#include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address
int _pv; // Analog read 1-1023
int _pv1; // Przeliczenie z pv od 1 do 1000
float _volt; // Przeliczennmie na volty _pv w zakresie 0-5V
int _sp = 5 * 50; // procenty razy 100 na voltach
int _sp1 = 50; // set point w procentach
int _h= 5 * 4; // histereza razy 100 na voltach (dzielimy bo razy juz bylo mnozone xd)
bool _cv; // control value - dioda
int _e; // (sp - pv) razy 100
float _e_float; // error w floatach
void setup() {
lcd.init();
lcd.backlight();
// DDRC = 0x0;
// DDRD = 0x11;
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(10, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
}
// HISTEREZA
void regulator(){
// operacje na voltach 0-5 dlatego razy 100
if ((_volt*100) <= _sp - _h/2){
digitalWrite(2,HIGH);
}
else if((_volt*100) >= _sp + _h/2){
digitalWrite(2,LOW);
}
}
// OBSLUGA PRZYCISKOW
void button(){
if(digitalRead(10)==LOW){
_sp = 5 * 60;
_sp1=60;
}
if(digitalRead(9)==LOW){
_sp = 5 * 40;
_sp1=40;
}
if(digitalRead(8)==LOW){
_h = 5 * 8;
}
if(digitalRead(7)==LOW){
_h = 5 * 10;
}
}
void wyswietlanie(){
// lcd.setCursor(0, 0);
// lcd.print(_pv);
// lcd.setCursor(0, 1);
// lcd.print(_pv1);
// lcd.setCursor(6, 1);
// lcd.print(_volt);
lcd.setCursor(0, 0);
lcd.print("SP=");
lcd.print((int)(_sp/5),1);
lcd.print("%");
lcd.setCursor(0, 1);
if(_h/5 < 10)
{
lcd.print("H =0");
lcd.print((int) (_h/5),1);
lcd.print("%");
}
else
{
lcd.print("H =");
lcd.print((int) (_h/5),1);
lcd.print("%");
}
lcd.setCursor(8, 0);
if(_pv1/10 <10)
{
lcd.print("PV=0");
lcd.print((float) _pv1/10,1);
lcd.print("%");
}
else
{
lcd.print("PV=");
lcd.print((float) _pv1/10,1);
lcd.print("%");
}
lcd.setCursor(8, 1);
if(fabs(_e_float)>=10){
if(_e_float>=0){
lcd.print("E=+");
lcd.print(_e_float,1);
lcd.print("%");
}
if(_e_float<0){
lcd.print("E=");
lcd.print(_e_float,1);
lcd.print("%");
}
}else{
if(_e_float>=0){
lcd.print("E=+0");
lcd.print(_e_float,1);
lcd.print("%");
}
if(_e_float<0){
lcd.print("E=-0");
lcd.print(fabs(_e_float),1);
lcd.print("%");
}
}
}
void loop() {
_pv = analogRead(A0); // zczytywanie wartosci z potencjometru 1-1023
_pv1 = ((float) _pv/1023)*1000; // przeliczanie zakresu na 1-1000
_volt = ((float) _pv/1023)*5; // przeliczenie zakresu 0-5
_e_float = (float) _sp1 - (float) _pv1/10;
wyswietlanie();
regulator();
button();
delay(1000);
lcd.clear();
}
// #include "LiquidCrystal_I2C.h"
// LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address
// void setup() {
// lcd.init(); //initialize the lcd
// //lcd.backlight(); //open the backlight //
// pinMode(2, OUTPUT);
// pinMode(10, INPUT_PULLUP);
// }
// int wys(float n){
// if (n>=100)
// return 8;
// else if (n>=10 && n<100)
// return 9;
// else
// return 10;
// }
// float h=0.08;
// float val;
// float voltage;
// float number;
// float zadane = 5*0.6;
// float cons_volt = 5;
// float histereza = cons_volt * 0.1;
// void regulator(float temp,float cons){
// if (temp <= cons - histereza/2){
// lcd.setCursor(0, 1); // move cursor to (0, 0)
// lcd.print("Jbac ");
// digitalWrite(2, HIGH);
// }else if(temp >= cons +histereza/2){
// lcd.setCursor(0, 1);
// lcd.print("DISA !!");
// digitalWrite(2, LOW);
// }
// }
// void loop() {
// val = analogRead(A0);
// voltage = (val*5.0f)/1023.0f;
// number = (val*100.f)/1023.f;
// //int pos =wys(number);
// lcd.setCursor(0, 0);
// lcd.print(voltage);
// lcd.setCursor(0, 1);
// lcd.print(h);
// lcd.setCursor(0, 2);
// lcd.print(zadane);
// lcd.setCursor(0, 3);
// lcd.print(cons_volt);
// //regulator(voltage,cons_volt);
// if (digitalRead(10) == LOW) {
// lcd.setCursor(10, 3);
// h=0.1;
// zadane = 5*0.2;
// }
// if (digitalRead(9) == LOW) {
// h=0.06;
// zadane = 5*0.9;
// }
// // else{
// // regulator(voltage,cons_volt);
// // }
// delay(1000);
// lcd.clear();
// }
// Z ZAJENDź z ANTONIM
// #include "LiquidCrystal_I2C.h"
// LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address
// void setup() {
// lcd.init();
// lcd.backlight();
// DDRC = 0x0;
// DDRD = 0x11;
// pinMode(2, OUTPUT);
// pinMode(10, INPUT_PULLUP);
// }
// float h=0.04;
// float val;
// float _pv;
// float number;
// float _sp = 5*0.5;
// float cons_volt = 5;
// float histereza = cons_volt * 0.04;
// void regulator(float temp,float cons){
// if (temp <= cons - histereza/2){
// lcd.setCursor(0, 1); // move cursor to (0, 0)
// lcd.print("Hahahahhaha ");
// digitalWrite(2, HIGH);
// }else if(temp >= cons +histereza/2){
// lcd.setCursor(0, 1);
// lcd.print("Jaja !!");
// digitalWrite(2, LOW);
// }
// }
// void loop() {
// val = analogRead(A0);
// _pv = (val*5.0f)/1023.0f;
// number = (val*100.f)/1023.f;
// //int pos =wys(number);
// lcd.setCursor(0, 0);
// lcd.print("PV: ");
// lcd.print(_pv); // wartosc z potencjometryu
// lcd.print(" V");
// lcd.setCursor(0, 1);
// lcd.print("ERROR: ");
// lcd.print(_sp - _pv); // error
// lcd.print(" V");
// regulator(_pv,cons_volt);
// // else{
// // regulator(_pv,cons_volt);
// // }
// delay(1000);
// lcd.clear();
// }