#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <U8g2_for_Adafruit_GFX.h>
#include <Fonts/TomThumb.h>
#include <Fonts/FreeSansBold9pt7b.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
U8G2_FOR_ADAFRUIT_GFX u8g2_for_adafruit_gfx;
void setup() {
// Set software serial baud to 115200;
Serial.begin(115200);
// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally
if(!display.begin(SSD1306_SWITCHCAPVCC)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
u8g2_for_adafruit_gfx.begin(display);
updateDisplay();
}
void updateDisplay() {
display.clearDisplay();
display.setTextColor(WHITE);
u8g2_for_adafruit_gfx.setForegroundColor(WHITE);
u8g2_for_adafruit_gfx.setFont(u8g2_font_tom_thumb_4x6_tf);
u8g2_for_adafruit_gfx.setCursor(4,6);
u8g2_for_adafruit_gfx.print(F("Inneklima"));
display.setFont(&FreeSansBold9pt7b);
display.setCursor(7,22);
display.print("22.4");
display.drawCircle(display.getCursorX()+4,display.getCursorY()-5, 1, WHITE);
u8g2_for_adafruit_gfx.setCursor(display.getCursorX()+7,display.getCursorY()+1);
u8g2_for_adafruit_gfx.setFont(u8g2_font_nokiafc22_tf);
u8g2_for_adafruit_gfx.print(F("C"));
//x,y,value,max,average,measure,unit
drawBar(4,34,1001,1000,475,"CO2","ppm");
delay(10);
drawBar(4,47,15,20,8,"CO","ppm");
delay(10);
drawBar(4,60,0.2,0.5,0.3,"NO2","ppm");
delay(10);
drawBar(67,8,23.2,100,34.6,"LF","%");
delay(10);
drawBar(67,21,251,500,242,"VOC","ppm");
delay(10);
drawBar(67,34,11,10,2.7,"PM2.5","µg/m3");
delay(10);
drawBar(67,47,6.2,20,8.1,"PM10","µg/m3");
delay(10);
drawBar(67,60,323,500,323,"Alk","ppm");
display.display();
}
void drawBar(int x, int y, float value, float max, float average, char* measure, char* unit) {
const int length = 57;
float scale = 0;
float avrScale = (average/max)*(length-2);
u8g2_for_adafruit_gfx.setFont(u8g2_font_tom_thumb_4x6_tf);
u8g2_for_adafruit_gfx.setCursor(x,y-2);
u8g2_for_adafruit_gfx.print(measure);
u8g2_for_adafruit_gfx.setCursor(u8g2_for_adafruit_gfx.getCursorX()-1,u8g2_for_adafruit_gfx.getCursorY());
u8g2_for_adafruit_gfx.print(F(":"));
if (value > max) {
scale = length-2;
u8g2_for_adafruit_gfx.setCursor(x+23,y-2);
u8g2_for_adafruit_gfx.print(F(">"));
u8g2_for_adafruit_gfx.setCursor(x+27,y-2);
if (value < 1 && value > 0) {
u8g2_for_adafruit_gfx.print(max,1);
} else {
u8g2_for_adafruit_gfx.print(max,0);
}
u8g2_for_adafruit_gfx.setCursor(u8g2_for_adafruit_gfx.getCursorX()+2,u8g2_for_adafruit_gfx.getCursorY());
u8g2_for_adafruit_gfx.print(unit);
u8g2_for_adafruit_gfx.setCursor(x-4,y-2);
u8g2_for_adafruit_gfx.print(F("!"));
} else {
scale = (value/max)*(length-2);
u8g2_for_adafruit_gfx.setCursor(x+27,y-2);
if (value < 1 && value > 0) {
u8g2_for_adafruit_gfx.print(value,1);
} else {
u8g2_for_adafruit_gfx.print(value,0);
}
u8g2_for_adafruit_gfx.setCursor(u8g2_for_adafruit_gfx.getCursorX()+2,u8g2_for_adafruit_gfx.getCursorY());
u8g2_for_adafruit_gfx.print(unit);
}
display.fillRect(x, y, length, 3, WHITE);
display.fillRect(x+1, y+1, scale, 1, BLACK);
display.drawLine(x+avrScale, y, x+avrScale, y+2, BLACK);
}
void loop() {
//if (updateLevel == 0) {
// printWaitingDots(94,38);
//}
}