#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
#define BUTTON_LEFT_PIN 5
#define BUTTON_RIGHT_PIN 6
#define BUTTON_LOCK_SET_PIN 7
#define BUTTON_ESC_PIN 8
#define BUTTON_CLK_PIN 2
#define BUTTON_DT_PIN 3
#define BUTTON_SW_PIN 4
U8G2_SSD1306_128X64_ALT0_F_HW_I2C u8g2(U8G2_R3, /* reset=*/ U8X8_PIN_NONE); // same as the NONAME variant, but may solve the "every 2nd line skipped" problem
//U8G2_ST7920_128X64_F_SW_SPI u8g2(U8G2_R0, /* clock=*/ PA5, /* data=*/ PA7, /* CS=*/ PB0, /* reset=*/ U8X8_PIN_NONE);
//U8G2_ST7920_128X64_F_HW_SPI u8g2(U8G2_R0, /* CS=*/ PB0, /* reset=*/ U8X8_PIN_NONE);
float rnd;
float U_Set = 10.000;
float I_Set = 10.000;
float P_Set = 100.00;
float U_Out = 10.000;
float I_Out = 10.000;
float P_Out = 100.00;
const int ledPin = 13;
const int buttonPin = 2;
byte buttonState;
byte LE = 10;
byte H_Set = 10;
byte H_Out = 70;
void setup() {
u8g2.begin();
Serial.begin(9600);
pinMode(BUTTON_LEFT_PIN, INPUT_PULLUP);
pinMode(BUTTON_RIGHT_PIN, INPUT_PULLUP);
pinMode(BUTTON_LOCK_SET_PIN, INPUT_PULLUP);
pinMode(BUTTON_CLK_PIN, INPUT_PULLUP);
pinMode(BUTTON_DT_PIN, INPUT_PULLUP);
pinMode(BUTTON_SW_PIN, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
}
void loop() {
static uint32_t tmr1;
if (millis() - tmr1 >= 250) {
tmr1 = millis();
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_profont15_tr);
main_page();
// ... write something to the buffer
u8g2.sendBuffer();
}
static uint32_t tmr2;
if (millis() - tmr2 >= 1000) {
tmr2 = millis();
rnd = random(1000);
if (U_Out > 10) {
U_Out = U_Out - rnd / 1000;
} else {
U_Out = U_Out + rnd / 1000;
}
I_Out = U_Out;
P_Out = I_Out * U_Out;
}
static uint32_t tmr3;
if (millis() - tmr3 >= 100) {
tmr3 = millis();
button_Lock_Set ();
}
}
void main_page() {
u8g2.drawButtonUTF8(5, H_Set, U8G2_BTN_INV, u8g2.getDisplayWidth() - 5 * 2, 5, 2, "SETUP" );
u8g2.setCursor(LE, H_Set + 18);
if (U_Set < 10) {
u8g2.print(0);
}
u8g2.print(U_Set, 3);
u8g2.print("V");
u8g2.setCursor(LE, H_Set + 32);
if (I_Set < 10) {
u8g2.print(0);
}
u8g2.print(I_Set, 3);
u8g2.print("A");
u8g2.setCursor(LE, H_Set + 46);
if (P_Set < 100) {
u8g2.print(0);
}
if (P_Set < 10) {
u8g2.print(0);
}
u8g2.print(P_Set, 2);
u8g2.print("W");
u8g2.drawButtonUTF8(5, H_Out, U8G2_BTN_INV, u8g2.getDisplayWidth() - 5 * 2, 5, 2, "OUTPUT" );
u8g2.setCursor(LE, H_Out + 18);
if (U_Out < 10) {
u8g2.print(0);
}
u8g2.print(U_Out, 3);
u8g2.print("V");
u8g2.setCursor(LE, H_Out + 32);
if (I_Out < 10) {
u8g2.print(0);
}
u8g2.print(I_Out, 3);
u8g2.print("A");
u8g2.setCursor(LE, H_Out + 46);
if (P_Out < 100) {
u8g2.print(0);
}
if (P_Out < 10) {
u8g2.print(0);
}
u8g2.print(P_Out, 2);
u8g2.print("W");
u8g2.drawButtonUTF8(5, 127, U8G2_BTN_INV, u8g2.getDisplayWidth() - 5 * 2, 5, 2, "ALARM CV" );
if (P_Out > 100) {
u8g2.drawButtonUTF8(40, H_Set + 18, U8G2_BTN_INV, 0, 2, 2, "V" );
}
}
void button_Lock_Set () {
if (digitalRead(BUTTON_LOCK_SET_PIN) == HIGH) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}
void button_Left () {
}
void button_Right () {
}