#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 //
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);
}
int wys(float n) {
if (n >= 100)
return 9;
else if (n >= 10 && n < 100){
return 10;
}
else{
lcd.setCursor(10, 0);
lcd.print("0");
return 11;
}
}
int _pv; //analog_read
int _pv1000; //1-1000
float _v; // volty 0-5v
int _sp = 60;// nasze 60% SP
int _sp_v = 5 * _sp;//w voltach
int _h = 5 * 4;// histereza w woltach
int _n = 2 * _h;
//cv1 cv 2
int _xpp =5* 40;
float _xpp_f;
int T = 20;
int _e;
float _e_f;
float _cv;
int sw_1,sw_2,sw_3,sw_4;
void E(float n)
{
if(n<10 && n>0)
{
lcd.setCursor(2, 0);
lcd.print("+0");
lcd.print(n,1);
}
if(n>=10)
{
lcd.setCursor(2, 0);
lcd.print("+");
lcd.print(n,1);
}
if(n>-10 && n<0)
{
lcd.setCursor(2, 0);
lcd.print("-0");
lcd.print(fabs(n),1);
}
if(n <= -10)
{
lcd.setCursor(2, 0);
lcd.print("-");
lcd.print(fabs(n),1);
}
}
void przyciski() {
if (sw_1 == LOW) {
_sp_v = 5*50;
_sp = 50;
}
else if (digitalRead(9) == LOW) {
_sp = 40;
_sp_v = 5*40;
}
else if (digitalRead(8) == LOW) {
_h = 5 * 4;
}
else if (digitalRead(7) == LOW) {
_h = 5 * 10;
}
else {
_sp_v= 5 * 60;
_h= 5 * 4;
}
}
void regulator() {
_cv = (100.0f/40.0f)*_e_f + 50;
if(_cv < 0){
_cv = 0;
}
else if(_cv > 100) {
_cv = 100;
}
}
int wypelnienie = 5;
void pwm(){
int wysoki = _cv/wypelnienie;// przez 5% hight
for(int i = 0 ; i <20 ; ++i){
if(wysoki > 0){
digitalWrite(2, HIGH);
}
else{
digitalWrite(2, LOW);
}
wysoki--;
}
delay(50);
}
void loop() {
sw_1 = digitalRead(10);
sw_2 = digitalRead(9);
sw_3 = digitalRead(8);
sw_4 = digitalRead(7);
_pv = analogRead(A0);
_pv1000 = ((float) _pv/1023)*1000;
_v = ((float) _pv/1023)*5;
_e_f = (float) _sp - (float) _pv1000/10;
char i[10];
dtostrf(_e_f, 5, 1, i );
int pos = wys(_pv1000/10);
lcd.setCursor(7, 1);
lcd.print("PV=");
lcd.setCursor(pos+1, 1);
lcd.print((float) _pv1000/10,1);
lcd.setCursor(15, 1);
lcd.print("%");
lcd.setCursor(10, 0);
lcd.print("SP=");
lcd.print(_sp_v/5);
lcd.print("%");
przyciski();
lcd.setCursor(0, 1);
lcd.print("Xp=");
lcd.setCursor(3, 1);
lcd.print((int) (_xpp/5));
lcd.print("%");
lcd.setCursor(0, 0);
lcd.print("E=");
E(_e_f);
lcd.print("%");
// lcd.setCursor(0, 3);
// lcd.print("CV=");
// lcd.print(_cv);
// lcd.print("%");
// lcd.setCursor(8, 3);
// lcd.print("Xp=");
//lcd.print((int) (_xpp/5),1);
//lcd.print("%");
regulator();
pwm();
delay(500);
lcd.clear();
}