#include <LiquidCrystal_I2C.h>
float IMax = 30.00;
float Imin = 00.00;
float Iset = 00.00;
// ADC INPUT
// Current sense @ GPIO33
// Voltage sense 1st @ GPIO32
// Voltage sense 2nd @ GPIO35
// Temperature sense @ GPIO34
#define I_sense 33
#define V_sense_1st 32
#define V_sense_2nd 35
#define temp_sense 34
// Digital INPUT
// Red_button @ GPIO26
// Yellow_button @ GPIO25
// Rotary_button @ GPIO27
// Rotary Encoder
// DT @GPIO14
// CLK @GPIO12
#define red_button 26
#define yellow_button 25
#define rotary_button 27
#define Encoder_DT 14
#define Encoder_CLK 12
// Digital OUTPUT
// PWM control @ GPIO4
// Fan control @ GPI15
// Gate control @ GPIO2
#define PWM_pinout 4
#define fanCtrl_pinout 15
#define gateCtrl_pinout 2
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup() {
// put your setup code here, to run once:
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0); //(column, row)
lcd.print("Const. Current");
pinMode(Encoder_CLK, INPUT_PULLUP);
pinMode(Encoder_DT, INPUT_PULLUP);
}
////////////////////////////////////////// ROTARY ENCODER ///////////////////////////////////////
int select_digit = 1;
uint8_t mode = 0;
// float digits = 4.00;
void countup(float* digits, int* point, float* Max) {
switch (*point) {
case 0:
if((*digits + 0.01) > *Max) { *digits = *Max; }
else {*digits = *digits + 0.01;}
break;
case 1:
if((*digits + 0.1) > *Max) { *digits = *Max; }
else {*digits = *digits + 0.1;}
break;
case 2:
if((*digits + 1.0) > *Max) { *digits = *Max; }
else {*digits = *digits + 1.0;}
break;
case 3:
if(((*digits + 10.0) > *Max)) { *digits = *Max; }
else {*digits = *digits + 10.0;}
break;
}
}
void countdown(float* digits, int* point, float* min) {
switch (*point) {
case 0:
if((*digits - 0.01) < *min) { *digits = *min; }
else {*digits = *digits - 0.01;}
break;
case 1:
if((*digits - 0.1) < *min) { *digits = *min; }
else {*digits = *digits - 0.1;}
break;
case 2:
if((*digits - 1.0) < *min) { *digits = *min; }
else {*digits = *digits - 1.0;}
break;
case 3:
if(((*digits - 10.0) < *min)) { *digits = *min; }
else {*digits = *digits - 10.0;}
break;
}
}
bool lastClk = HIGH;
bool newClk;
bool dtValue;
void rotaryEncode() {
newClk = digitalRead(Encoder_CLK);
if (newClk != lastClk) {
lastClk = newClk;
dtValue = digitalRead(Encoder_DT);
if (newClk == LOW && dtValue == HIGH) {
countup(&Iset, &select_digit, &IMax);
}
if (newClk == LOW && dtValue == LOW) {
countdown(&Iset, &select_digit, &Imin);
}
}
}
////////////////////////////////////////// ROTARY ENCODER ///////////////////////////////////////
void loop() {
// put your main code here, to run repeatedly:
rotaryEncode();
lcd.setCursor(0, 1);
lcd.print("Set : ");
if(Iset < 10.00) {
lcd.setCursor(6, 1);
lcd.print("0");
lcd.setCursor(7, 1);
lcd.print(Iset);
}
else {
lcd.setCursor(6, 1);
lcd.print(Iset);
}
}