#include <Arduino.h>
#include <Wire.h>
#include <U8g2lib.h>
// #define DEBUG
#include "bitmaps.h"
// initialization for the 128x64px OLED display
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
const bool initializeSensors = true;
void setup() {
pinMode(2, INPUT);
// Start serial for debugging only
#ifdef DEBUG
Serial.begin(115200);
#endif
// Initialize I2C devices
Wire.begin();
u8g2.begin();
drawStartup();
if (!initializeSensors) {
errorHandler();
}
}
void loop() {
// Serial.println(F("System initialization OK!"));
// drawError();
if (digitalRead((2))) draw01();
else draw02();
}
void errorHandler() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.println(F("System initialization failed!"));
while (1) {
digitalWrite(LED_BUILTIN, HIGH);
drawError();
delay(500);
digitalWrite(LED_BUILTIN, LOW);
u8g2.clear();
delay(500);
}
}
void drawError() {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_NokiaSmallBold_tf);
u8g2.drawStr(15, 26, "System initialization");
u8g2.drawStr(50, 36, "failed!");
u8g2.setFont(u8g2_font_5x7_tf);
u8g2.drawStr(19, 60, "Check the sensors.");
u8g2.sendBuffer();
}
void drawStartup() {
for (int8_t i = 0; i <= 10; i++) {
u8g2.clearBuffer();
u8g2.drawXBMP(48, -5, 32, 64, bitmaps_flowers[i]);
u8g2.sendBuffer();
delay(50);
}
u8g2.clear();
}
void draw01() {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_NokiaSmallBold_tr);
u8g2.drawStr(22, 29, "Irrigation Method");
u8g2.drawStr(51, 42, "Pump");
u8g2.drawRFrame(48, 32, 32, 14, 3);
progressBar();
// delay(50);
u8g2.clear();
}
void draw02() {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_NokiaSmallBold_tr);
u8g2.drawStr(22, 29, "Irrigation Method");
u8g2.drawStr(51, 42, "Servo");
u8g2.drawRFrame(48, 32, 32, 14, 3);
progressBar();
// delay(50);
u8g2.clear();
}
void progressBar() {
int8_t progress = 0;
while (progress <= 128) {
u8g2.drawBox(0, 62, progress, 2);
u8g2.sendBuffer();
progress++;
if (progress >= 128) break;
}
return;
}