#include <Arduino.h>
#include <U8g2lib.h>
//CALE, SCL A5, SDA A4
#include <Wire.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ 16, /* data=*/ 17); // ESP32 Thing, HW I2C with pin remapping
void setup(){
u8g2.begin();
}
char sbuff[16];
void draw0(){
u8g2.setFont(u8g2_font_6x10_mr); //choose a suitable h or m font
u8g2.setCursor(0,20);
u8g2.print("61.2%");
u8g2.sendBuffer();
delay(1000);
u8g2.setCursor(0,20);
u8g2.print(" ");
u8g2.sendBuffer();
delay(1000);
u8g2.setCursor(0,20);
u8g2.print("73.4%");
u8g2.sendBuffer();
}
void drawBattSOC(float BattSOC){
dtostrf(BattSOC, 3, 1, sbuff);
sprintf(sbuff+strlen(sbuff), "%%");
u8g2.setFont(u8g2_font_profont29_mr);
u8g2.setCursor(0,20);
u8g2.print(sbuff);
}
void drawCellVMin(float cellVMin){
dtostrf(cellVMin, 3, 3, sbuff);
sprintf(sbuff+strlen(sbuff), "V");
u8g2.setFont(u8g2_font_profont15_mr);
u8g2.setCursor(85,18);
u8g2.print(sbuff);
}
void drawCellVMax(float cellVMax){
dtostrf(cellVMax, 3, 3, sbuff);
sprintf(sbuff+strlen(sbuff), "V");
u8g2.setFont(u8g2_font_profont15_mr);
u8g2.setCursor(85,18+14);
u8g2.print(sbuff);
}
void drawACVolts(float ACVolts){
dtostrf(ACVolts, 3, 0, sbuff);
sprintf(sbuff+strlen(sbuff), "V");
u8g2.setFont(u8g2_font_profont15_mr);
u8g2.setCursor(0,45);
u8g2.print(sbuff);
}
void drawACAmps(float ACAmps){
dtostrf(ACAmps, 3, 0, sbuff);
sprintf(sbuff+strlen(sbuff), "A");
u8g2.setFont(u8g2_font_profont15_mr);
u8g2.setCursor(0,45+12);
u8g2.print(sbuff);
}
void drawCabinHeatWatt(int16_t cabinHeatWatt){
sprintf(sbuff, "%dW", cabinHeatWatt);
u8g2.setFont(u8g2_font_profont15_mr);
u8g2.setCursor(35,48);
u8g2.print(sbuff);
}
void drawMileage(float miles){
dtostrf(miles, 3, 1, sbuff);
sprintf(sbuff+strlen(sbuff), "M");
u8g2.setFont(u8g2_font_profont15_mr);
u8g2.setCursor(70,63);
u8g2.print(sbuff);
}
void draw1(){
drawBattSOC(98.6);
drawCellVMin(3.812);
drawCellVMax(3.823);
drawACVolts(120);
drawACAmps(32);
drawCabinHeatWatt(7500UL);
drawMileage(12345.3);
u8g2.sendBuffer();
}
void drawSpeedMPG(float speedMPH){
dtostrf(speedMPH, 3, 0, sbuff);
//sprintf(sbuff+strlen(sbuff), "mph");
u8g2.setFont(u8g2_font_profont22_mr);
u8g2.setCursor(0,15);
u8g2.print(sbuff);
}
void drawPowerkW(float kw){
dtostrf(kw, 3, 1, sbuff);
sprintf(sbuff+strlen(sbuff), "KW");
u8g2.setFont(u8g2_font_profont22_mr);
u8g2.setCursor(50,15);
u8g2.print(sbuff);
}
void drawHVV(float HVV){
dtostrf(HVV, 3, 1, sbuff);
sprintf(sbuff+strlen(sbuff), "V");
u8g2.setFont(u8g2_font_profont17_mr);
u8g2.setCursor(75,33);
u8g2.print(sbuff);
}
void drawHVA(float HVA){
dtostrf(HVA, 3, 1, sbuff);
sprintf(sbuff+strlen(sbuff), "A");
u8g2.setFont(u8g2_font_profont17_mr);
u8g2.setCursor(75,48);
u8g2.print(sbuff);
}
void drawTime(float time){
dtostrf(time, 3, 0, sbuff);
sprintf(sbuff+strlen(sbuff), "ms");
u8g2.setFont(u8g2_font_profont15_mr);
u8g2.setCursor(85,62);
u8g2.print(sbuff);
}
void drawEff(float eff){
dtostrf(eff, 1, 2, sbuff);
sprintf(sbuff+strlen(sbuff), "m/w");
u8g2.setFont(u8g2_font_profont17_mr);
u8g2.setCursor(0,33);
u8g2.print(sbuff);
}
void drawIDist(float dist){
dtostrf(dist, 3, 0, sbuff);
sprintf(sbuff+strlen(sbuff), "MM");
u8g2.setFont(u8g2_font_profont15_mr);
u8g2.setCursor(0,48);
u8g2.print(sbuff);
}
void drawIEng(float eng){
dtostrf(eng, 3, 0, sbuff);
sprintf(sbuff+strlen(sbuff), "WH");
u8g2.setFont(u8g2_font_profont15_mr);
u8g2.setCursor(0,63);
u8g2.print(sbuff);
}
void draw2(){
drawSpeedMPG(65);
drawHVV(388.1);
drawHVA(123.2);
drawPowerkW(50.3);
drawTime(1563.2);
drawEff(3.51);
drawIDist(854.3);
drawIEng(211.23);
u8g2.sendBuffer();
}
unsigned long drawt(){
u8g2.setFont(u8g2_font_6x10_mr);
u8g2.setCursor(0,20);
u8g2.print(F("W5"));
//u8g2.sendBuffer();
//u8g2.setFont(u8g2_font_6x12_mr);
u8g2.setCursor(20,20);
u8g2.print(F("W5"));
//u8g2.sendBuffer();
//u8g2.setFont(u8g2_font_6x13_mr);
u8g2.setCursor(40,20);
u8g2.print(F("W5"));
//u8g2.sendBuffer();
//u8g2.setFont(u8g2_font_7x13_mr);
u8g2.setCursor(40,40);
u8g2.print(F("W5"));
//u8g2.sendBuffer();
//u8g2.setFont(u8g2_font_7x14_mr);
u8g2.setCursor(60,40);
u8g2.print(F("W5"));
//u8g2.sendBuffer();
//u8g2.setFont(u8g2_font_8x13_mr);
u8g2.setCursor(40,60);
u8g2.print(F("W5"));
unsigned long cms = millis();
u8g2.sendBuffer();
return(cms);
//"W5"x6 + 6 sendBuffers: 3080ms, "W5"x6 + 1 sendBuffers 529
//UNO: sendBuffer() takes about 510ms(combine multiple prints!), setFont ~0.5ms.
//ESP23 "W5"x6 + 1 sendBuffers takes about 500ms using SW i2c and 30ms HW i2c
}
void loop() {
u8g2.clearBuffer();
u8g2.setFontMode(0); //write solid glyphs
//draw0();
//draw1();
draw2();
/*unsigned long startMS = millis();
unsigned long end1 = drawt();
Serial.print(end1-startMS); Serial.print('\t');
Serial.print(millis()-startMS); Serial.println("ms");*/
delay(1000);
}