#include <Arduino.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
const int ledPin = 4;
float watercolumnfull=1670; //Full depth of water column when tank is full, in mm
int sensoroffsetfull=500; //Sensor offset to surface of water when tank is full, in mm
int alarmlvl=50; //LED low level alarm
int calc1=watercolumnfull/100;
int progress = 0;
char buffer [32];
char buffer2 [32];
char buffer3 [32];
int raw = 2170;
int lvl = 0;
void setup(void) {
u8g2.begin();
pinMode(ledPin, OUTPUT);
}
void loop(void) {
u8g2.clearBuffer();
u8g2.setFontMode(1);
u8g2.setBitmapMode(1);
u8g2.drawFrame(12, 19, 104, 17);
u8g2.setFont(u8g2_font_helvB08_tr);
sprintf(buffer,"LEVEL: %d %%",progress);
u8g2.drawStr(31, 48, buffer);
u8g2.drawBox(14, 21, progress, 13);
u8g2.setFont(u8g2_font_6x13_tr);
u8g2.drawStr(15, 11, "WATER TANK LEVEL");
u8g2.setFont(u8g2_font_5x7_tr);
sprintf(buffer2,"RAW:%d mm",raw);
u8g2.drawStr(1, 62, buffer2);
sprintf(buffer3,"| LVL:%d mm",lvl);
u8g2.drawStr(60, 62, buffer3);
u8g2.sendBuffer();
raw= raw - 1;
lvl=watercolumnfull- (raw - sensoroffsetfull);
progress= 100-((raw-sensoroffsetfull)/(watercolumnfull/100));
if (raw<500){
raw=2170;
}
if (progress < alarmlvl) {
digitalWrite(ledPin, HIGH);
}
if (progress > alarmlvl) {
digitalWrite(ledPin, LOW);
}
}