// Elecrow Smart Watering Kit sketch updated to display a different graphics on the OLED display
// original sketch from Elecrow is here: https://www.elecrow.com/download/product/PSMC18001M/Watering_kit_Arduino%20Code.zip

// original sketch from Elecrow modified by upir, 2023
// youtube channel: https://www.youtube.com/upir_upir

// YOUTUBE VIDEO: https://youtu.be/yhJNsQIChqI
// SOURCE files: https://github.com/upiir/elecrow_watering_kit_oled

// Links from the video:
// Smart watering kit: https://www.elecrow.com/arduino-automatic-smart-plant-watering-kit.html?idd=5
// 128x64 SSD1306 OLED Display 1.54": https://s.click.aliexpress.com/e/_DCYdWXb
// 128x64 SSD1306 OLED Display 0.96": https://s.click.aliexpress.com/e/_DCKdvnh
// 128x64 SSD1306 OLED Display 2.42": https://s.click.aliexpress.com/e/_DFdMoTh
// Photopea (online graphics editor like Photoshop): https://www.photopea.com/
// Image2cpp (convert image to c-style array): https://javl.github.io/image2cpp/
// U8g fonts: https://nodemcu-build.com/u8g-fonts.php
// U8g documentation: https://code.google.com/archive/p/u8glib/wikis/userreference.wiki
// Transparent OLED display: https://s.click.aliexpress.com/e/_ABpnu7

// Related videos with Arduino UNO and 128x64 OLED screen:
// Arduino OLED menu: https://youtu.be/HVHVkKt-ldc
// U8g vs U8g2: https://youtu.be/K5e0lFRvZ2E
// Arduino Parking Sensor - https://youtu.be/sEWw087KOj0
// Turbo pressure gauge with Arduino and OLED display - https://youtu.be/JXmw1xOlBdk
// Arduino Car Cluster with OLED Display - https://youtu.be/El5SJelwV_0
// Knob over OLED Display - https://youtu.be/SmbcNx7tbX8
// Arduino + OLED = 3D ? - https://youtu.be/kBAcaA7NAlA
// Arduino OLED Gauge - https://youtu.be/xI6dXTA02UQ
// Smaller & Faster Arduino - https://youtu.be/4GfPQoIRqW8
// Save Image from OLED Display to PC - https://youtu.be/Ft2pRMVm44E




#include <Wire.h>
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);    // I2C
#include "Wire.h"
#include "RTClib.h"
RTC_DS1307 RTC;

// set all moisture sensors PIN ID
int moisture1 = A0;
int moisture2 = A1;
int moisture3 = A2;
int moisture4 = A3;

// declare moisture values
int moisture1_value = 0 ;
int moisture2_value = 0;
int moisture3_value = 0;
int moisture4_value = 0;

// set water relays
int relay1 = 6;
int relay2 = 8;
int relay3 = 9;
int relay4 = 10;

// set water pump
int pump = 4;

// set button
int button = 12;

//pump state    1:open   0:close
int pump_state_flag = 0;

//relay1 state    1:open   0:close
int relay1_state_flag = 0;

//relay2 state   1:open   0:close
int relay2_state_flag = 0;

//relay3 state  1:open   0:close
int relay3_state_flag = 0;

//relay4 state   1:open   0:close
int relay4_state_flag = 0;

static unsigned long currentMillis_send = 0;
static unsigned long  Lasttime_send = 0;

char daysOfTheWeek[7][12] = {"Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat",};
unsigned long nowtime;
unsigned long endtime;
unsigned long nowtimeNext;
unsigned long nowtime1;
unsigned long endtime1;
unsigned long nowtimeNext1;
unsigned long nowtime2;
unsigned long endtime2;
unsigned long nowtimeNext2;
unsigned long nowtime3;
unsigned long endtime3;
unsigned long nowtimeNext3;


// 'flower_health_000', 32x64px
const unsigned char epd_bitmap_flower_health_000 [] PROGMEM = {
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 
	0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0xa5, 0x00, 
	0x00, 0x00, 0x15, 0x01, 0x00, 0x80, 0xf2, 0x01, 0x00, 0x80, 0x02, 0x00, 0xe0, 0xff, 0xff, 0x0f, 
	0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0xe0, 0xfa, 0xff, 0x0f, 0x40, 0x00, 0x00, 0x04, 
	0x40, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x02, 
	0x80, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 
	0x00, 0x02, 0x80, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0xf8, 0x3f, 0x00
};
// 'flower_health_010', 32x64px
const unsigned char epd_bitmap_flower_health_010 [] PROGMEM = {
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, 0x50, 0x15, 0x00, 
	0x00, 0x10, 0x10, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x80, 0x02, 0x00, 
	0x00, 0x80, 0x02, 0x00, 0x00, 0x87, 0xc2, 0x01, 0x00, 0x99, 0x32, 0x01, 0xe0, 0xff, 0xff, 0x0f, 
	0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0xe0, 0xfa, 0xff, 0x0f, 0x40, 0x00, 0x00, 0x04, 
	0x40, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x02, 
	0x80, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 
	0x00, 0x02, 0x80, 0x00, 0x00, 0xfa, 0xbf, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0xf8, 0x3f, 0x00
};
// 'flower_health_020', 32x64px
const unsigned char epd_bitmap_flower_health_020 [] PROGMEM = {
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, 0x50, 0x15, 0x00, 
	0x00, 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0xc0, 0x07, 0x00, 
	0x00, 0x80, 0x02, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x80, 0x02, 0x00, 
	0x80, 0x83, 0x82, 0x03, 0x80, 0x8c, 0x62, 0x02, 0x80, 0x90, 0x12, 0x02, 0xe0, 0xff, 0xff, 0x0f, 
	0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0xe0, 0xfa, 0xff, 0x0f, 0x40, 0x00, 0x00, 0x04, 
	0x40, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x02, 
	0x80, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 
	0x00, 0xfa, 0xbf, 0x00, 0x00, 0xfa, 0xbf, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0xf8, 0x3f, 0x00
};
// 'flower_health_030', 32x64px
const unsigned char epd_bitmap_flower_health_030 [] PROGMEM = {
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x90, 0x10, 0x00, 
	0x00, 0x50, 0x11, 0x00, 0x00, 0x90, 0x10, 0x00, 0x00, 0x10, 0x14, 0x00, 0x00, 0x10, 0x12, 0x00, 
	0x00, 0x20, 0x08, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x80, 0x02, 0x00, 
	0x00, 0x80, 0x02, 0x00, 0x00, 0x80, 0x02, 0x00, 0xc0, 0x81, 0x02, 0x07, 0x40, 0x86, 0xc2, 0x04, 
	0x40, 0x88, 0x22, 0x04, 0x40, 0x92, 0x92, 0x04, 0x80, 0xa4, 0x4a, 0x02, 0xe0, 0xff, 0xff, 0x0f, 
	0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0xe0, 0xfa, 0xff, 0x0f, 0x40, 0x00, 0x00, 0x04, 
	0x40, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x02, 
	0x80, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0xfd, 0x7f, 0x01, 
	0x00, 0xfa, 0xbf, 0x00, 0x00, 0xfa, 0xbf, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0xf8, 0x3f, 0x00
};
// 'flower_health_040', 32x64px
const unsigned char epd_bitmap_flower_health_040 [] PROGMEM = {
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0xe0, 0x0f, 0x00, 
	0x00, 0x30, 0x18, 0x00, 0x00, 0x98, 0x30, 0x00, 0x00, 0x54, 0x51, 0x00, 0x00, 0x94, 0x50, 0x00, 
	0x00, 0x14, 0x54, 0x00, 0x00, 0x18, 0x32, 0x00, 0x00, 0x30, 0x18, 0x00, 0x00, 0xe0, 0x0f, 0x00, 
	0x00, 0x40, 0x04, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x80, 0x02, 0x00, 0x00, 0x80, 0x02, 0x00, 
	0x00, 0x80, 0x02, 0x00, 0xc0, 0x81, 0x02, 0x07, 0x40, 0x86, 0xc2, 0x04, 0x40, 0x88, 0x22, 0x04, 
	0x40, 0x92, 0x92, 0x04, 0x80, 0xa4, 0x4a, 0x02, 0x80, 0xa8, 0x2a, 0x02, 0xe0, 0xff, 0xff, 0x0f, 
	0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0xe0, 0xfa, 0xff, 0x0f, 0x40, 0x00, 0x00, 0x04, 
	0x40, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x02, 
	0x80, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0xfd, 0x7f, 0x01, 0x00, 0xfd, 0x7f, 0x01, 
	0x00, 0xfa, 0xbf, 0x00, 0x00, 0xfa, 0xbf, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0xf8, 0x3f, 0x00
};
// 'flower_health_050', 32x64px
const unsigned char epd_bitmap_flower_health_050 [] PROGMEM = {
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x40, 0x04, 0x00, 
	0x00, 0x20, 0x08, 0x00, 0x00, 0x20, 0x09, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x3c, 0x78, 0x00, 
	0x00, 0x92, 0x90, 0x00, 0x00, 0x51, 0x11, 0x01, 0x00, 0x99, 0x30, 0x01, 0x00, 0x11, 0x14, 0x01, 
	0x00, 0x12, 0x92, 0x00, 0x00, 0x3c, 0x78, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x20, 0x09, 0x00, 
	0x00, 0x20, 0x08, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x80, 0x03, 0x00, 0xe0, 0x80, 0x02, 0x0e, 
	0x20, 0x83, 0x82, 0x09, 0x20, 0x84, 0x42, 0x08, 0x20, 0x89, 0x22, 0x09, 0x40, 0x92, 0x92, 0x04, 
	0x40, 0x94, 0x52, 0x04, 0x80, 0xa0, 0x0a, 0x02, 0x00, 0xa1, 0x0a, 0x01, 0xe0, 0xff, 0xff, 0x0f, 
	0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0xe0, 0xfa, 0xff, 0x0f, 0x40, 0x00, 0x00, 0x04, 
	0x40, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x02, 
	0x80, 0x00, 0x00, 0x02, 0x00, 0xfd, 0x7f, 0x01, 0x00, 0xfd, 0x7f, 0x01, 0x00, 0xfd, 0x7f, 0x01, 
	0x00, 0xfa, 0xbf, 0x00, 0x00, 0xfa, 0xbf, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0xf8, 0x3f, 0x00
};
// 'flower_health_060', 32x64px
const unsigned char epd_bitmap_flower_health_060 [] PROGMEM = {
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x80, 0x03, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x20, 0x09, 0x00, 
	0x00, 0x20, 0x09, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x3e, 0xf8, 0x00, 0x00, 0x91, 0x10, 0x01, 
	0x80, 0x50, 0x11, 0x02, 0x80, 0x9c, 0x70, 0x02, 0x80, 0x10, 0x14, 0x02, 0x00, 0x11, 0x12, 0x01, 
	0x00, 0x3e, 0xf8, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0x20, 0x09, 0x00, 0x00, 0x20, 0x09, 0x00, 
	0x00, 0x20, 0x08, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x80, 0x03, 0x00, 0xe0, 0x80, 0x02, 0x0e, 
	0x20, 0x83, 0x82, 0x09, 0x20, 0x84, 0x42, 0x08, 0x20, 0x89, 0x22, 0x09, 0x40, 0x92, 0x92, 0x04, 
	0x40, 0x94, 0x52, 0x04, 0x80, 0xa0, 0x0a, 0x02, 0x00, 0xa1, 0x0a, 0x01, 0xe0, 0xff, 0xff, 0x0f, 
	0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0xe0, 0xfa, 0xff, 0x0f, 0x40, 0x00, 0x00, 0x04, 
	0x40, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x02, 
	0x80, 0xfe, 0xff, 0x02, 0x00, 0xfd, 0x7f, 0x01, 0x00, 0xfd, 0x7f, 0x01, 0x00, 0xfd, 0x7f, 0x01, 
	0x00, 0xfa, 0xbf, 0x00, 0x00, 0xfa, 0xbf, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0xf8, 0x3f, 0x00
};
// 'flower_health_070', 32x64px
const unsigned char epd_bitmap_flower_health_070 [] PROGMEM = {
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x40, 0x04, 0x00, 
	0x00, 0x20, 0x08, 0x00, 0x00, 0x20, 0x09, 0x00, 0x00, 0x20, 0x09, 0x00, 0x00, 0x20, 0x08, 0x00, 
	0x00, 0xc0, 0x07, 0x00, 0x00, 0x2f, 0xe8, 0x01, 0x80, 0x90, 0x10, 0x02, 0x40, 0x50, 0x11, 0x04, 
	0x40, 0x96, 0xd0, 0x04, 0x40, 0x10, 0x14, 0x04, 0x80, 0x10, 0x12, 0x02, 0x00, 0x2f, 0xe8, 0x01, 
	0x00, 0xc0, 0x07, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x20, 0x09, 0x00, 0x00, 0x20, 0x09, 0x00, 
	0x00, 0x20, 0x08, 0x00, 0x00, 0x40, 0x04, 0x00, 0xe0, 0x80, 0x03, 0x0e, 0x20, 0x83, 0x82, 0x09, 
	0x20, 0x84, 0x42, 0x08, 0x20, 0x89, 0x22, 0x09, 0x40, 0x92, 0x92, 0x04, 0x40, 0x94, 0x52, 0x04, 
	0x80, 0xa0, 0x0a, 0x02, 0x00, 0xa1, 0x0a, 0x01, 0x00, 0xa6, 0xca, 0x00, 0xe0, 0xff, 0xff, 0x0f, 
	0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0xe0, 0xfa, 0xff, 0x0f, 0x40, 0x00, 0x00, 0x04, 
	0x40, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x02, 0x80, 0xfe, 0xff, 0x02, 
	0x80, 0xfe, 0xff, 0x02, 0x00, 0xfd, 0x7f, 0x01, 0x00, 0xfd, 0x7f, 0x01, 0x00, 0xfd, 0x7f, 0x01, 
	0x00, 0xfa, 0xbf, 0x00, 0x00, 0xfa, 0xbf, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0xf8, 0x3f, 0x00
};
// 'flower_health_090', 32x64px
const unsigned char epd_bitmap_flower_health_090 [] PROGMEM = {
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x80, 0x03, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x3c, 0x78, 0x00, 0x00, 0x22, 0x89, 0x00, 
	0x00, 0x21, 0x09, 0x01, 0x00, 0x29, 0x28, 0x01, 0x00, 0xd1, 0x17, 0x01, 0x00, 0x2f, 0xe8, 0x01, 
	0x80, 0x90, 0x10, 0x02, 0x40, 0x50, 0x11, 0x04, 0x40, 0x96, 0xd0, 0x04, 0x40, 0x10, 0x14, 0x04, 
	0x80, 0x10, 0x12, 0x02, 0x00, 0x2f, 0xe8, 0x01, 0x00, 0xd1, 0x17, 0x01, 0x00, 0x29, 0x28, 0x01, 
	0x00, 0x21, 0x09, 0x01, 0x00, 0x22, 0x89, 0x00, 0x00, 0x3c, 0x78, 0x00, 0x00, 0x40, 0x04, 0x00, 
	0x00, 0x80, 0x03, 0x00, 0x00, 0x80, 0x02, 0x00, 0xe0, 0x80, 0x02, 0x0e, 0x20, 0x83, 0x82, 0x09, 
	0x20, 0x84, 0x42, 0x08, 0x20, 0x89, 0x22, 0x09, 0x40, 0x92, 0x92, 0x04, 0x40, 0x94, 0x52, 0x04, 
	0x80, 0xa0, 0x0a, 0x02, 0x00, 0xa1, 0x0a, 0x01, 0x00, 0xa6, 0xca, 0x00, 0xe0, 0xff, 0xff, 0x0f, 
	0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0xe0, 0xfa, 0xff, 0x0f, 0x40, 0x00, 0x00, 0x04, 
	0x40, 0x00, 0x00, 0x04, 0x40, 0xff, 0xff, 0x05, 0x80, 0xfe, 0xff, 0x02, 0x80, 0xfe, 0xff, 0x02, 
	0x80, 0xfe, 0xff, 0x02, 0x00, 0xfd, 0x7f, 0x01, 0x00, 0xfd, 0x7f, 0x01, 0x00, 0xfd, 0x7f, 0x01, 
	0x00, 0xfa, 0xbf, 0x00, 0x00, 0xfa, 0xbf, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0xf8, 0x3f, 0x00
};
// 'flower_health_080', 32x64px
const unsigned char epd_bitmap_flower_health_080 [] PROGMEM = {
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x20, 0x08, 0x00, 
	0x00, 0x38, 0x39, 0x00, 0x00, 0x24, 0x49, 0x00, 0x00, 0x22, 0x88, 0x00, 0x00, 0xd2, 0x97, 0x00, 
	0x00, 0x2f, 0xe8, 0x01, 0x80, 0x90, 0x10, 0x02, 0x40, 0x50, 0x11, 0x04, 0x40, 0x96, 0xd0, 0x04, 
	0x40, 0x10, 0x14, 0x04, 0x80, 0x10, 0x12, 0x02, 0x00, 0x2f, 0xe8, 0x01, 0x00, 0xd2, 0x97, 0x00, 
	0x00, 0x22, 0x88, 0x00, 0x00, 0x24, 0x49, 0x00, 0x00, 0x38, 0x39, 0x00, 0x00, 0x20, 0x08, 0x00, 
	0x00, 0x40, 0x04, 0x00, 0x00, 0x80, 0x03, 0x00, 0xe0, 0x80, 0x02, 0x0e, 0x20, 0x83, 0x82, 0x09, 
	0x20, 0x84, 0x42, 0x08, 0x20, 0x89, 0x22, 0x09, 0x40, 0x92, 0x92, 0x04, 0x40, 0x94, 0x52, 0x04, 
	0x80, 0xa0, 0x0a, 0x02, 0x00, 0xa1, 0x0a, 0x01, 0x00, 0xa6, 0xca, 0x00, 0xe0, 0xff, 0xff, 0x0f, 
	0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0xe0, 0xfa, 0xff, 0x0f, 0x40, 0x00, 0x00, 0x04, 
	0x40, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x04, 0x80, 0xfe, 0xff, 0x02, 0x80, 0xfe, 0xff, 0x02, 
	0x80, 0xfe, 0xff, 0x02, 0x00, 0xfd, 0x7f, 0x01, 0x00, 0xfd, 0x7f, 0x01, 0x00, 0xfd, 0x7f, 0x01, 
	0x00, 0xfa, 0xbf, 0x00, 0x00, 0xfa, 0xbf, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0xf8, 0x3f, 0x00
};
// 'flower_health_100', 32x64px
const unsigned char epd_bitmap_flower_health_100 [] PROGMEM = {
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 
	0x00, 0x4e, 0xe4, 0x00, 0x00, 0x31, 0x18, 0x01, 0x80, 0x20, 0x09, 0x02, 0x80, 0x24, 0x49, 0x02, 
	0x80, 0x28, 0x28, 0x02, 0x00, 0xc1, 0x07, 0x01, 0x00, 0x2f, 0xe8, 0x01, 0x80, 0x90, 0x10, 0x02, 
	0x40, 0x50, 0x11, 0x04, 0x40, 0x96, 0xd0, 0x04, 0x40, 0x10, 0x14, 0x04, 0x80, 0x10, 0x12, 0x02, 
	0x00, 0x2f, 0xe8, 0x01, 0x00, 0xc1, 0x07, 0x01, 0x80, 0x28, 0x28, 0x02, 0x80, 0x24, 0x49, 0x02, 
	0x80, 0x20, 0x09, 0x02, 0x00, 0x31, 0x18, 0x01, 0x00, 0x4e, 0xe4, 0x00, 0x00, 0x80, 0x03, 0x00, 
	0x00, 0x80, 0x02, 0x00, 0x00, 0x80, 0x02, 0x00, 0xe0, 0x80, 0x02, 0x0e, 0x20, 0x83, 0x82, 0x09, 
	0x20, 0x84, 0x42, 0x08, 0x20, 0x89, 0x22, 0x09, 0x40, 0x92, 0x92, 0x04, 0x40, 0x94, 0x52, 0x04, 
	0x80, 0xa0, 0x0a, 0x02, 0x00, 0xa1, 0x0a, 0x01, 0x00, 0xa6, 0xca, 0x00, 0xe0, 0xff, 0xff, 0x0f, 
	0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0xe0, 0xfa, 0xff, 0x0f, 0x40, 0x00, 0x00, 0x04, 
	0x40, 0xff, 0xff, 0x05, 0x40, 0xff, 0xff, 0x05, 0x80, 0xfe, 0xff, 0x02, 0x80, 0xfe, 0xff, 0x02, 
	0x80, 0xfe, 0xff, 0x02, 0x00, 0xfd, 0x7f, 0x01, 0x00, 0xfd, 0x7f, 0x01, 0x00, 0xfd, 0x7f, 0x01, 
	0x00, 0xfa, 0xbf, 0x00, 0x00, 0xfa, 0xbf, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0xf8, 0x3f, 0x00
};

// Array of all bitmaps for convenience. (Total bytes used to store images in PROGMEM = 2992)
const unsigned char* bitmaps_flowers[11] = {
	epd_bitmap_flower_health_000,
	epd_bitmap_flower_health_010,
	epd_bitmap_flower_health_020,
	epd_bitmap_flower_health_030,
	epd_bitmap_flower_health_040,
	epd_bitmap_flower_health_050,
	epd_bitmap_flower_health_060,
	epd_bitmap_flower_health_070,
	epd_bitmap_flower_health_080,
	epd_bitmap_flower_health_090,
	epd_bitmap_flower_health_100
};



// good flower
unsigned char bitmap_good[] U8G_PROGMEM = {

  0x00, 0x42, 0x4C, 0x00, 0x00, 0xE6, 0x6E, 0x00, 0x00, 0xAE, 0x7B, 0x00, 0x00, 0x3A, 0x51, 0x00,
  0x00, 0x12, 0x40, 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x06, 0x40, 0x00, 0x00, 0x06, 0x40, 0x00,
  0x00, 0x04, 0x60, 0x00, 0x00, 0x0C, 0x20, 0x00, 0x00, 0x08, 0x30, 0x00, 0x00, 0x18, 0x18, 0x00,
  0x00, 0xE0, 0x0F, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
  0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0xC1, 0x00, 0x00, 0x0E, 0x61, 0x00,
  0x00, 0x1C, 0x79, 0x00, 0x00, 0x34, 0x29, 0x00, 0x00, 0x28, 0x35, 0x00, 0x00, 0x48, 0x17, 0x00,
  0x00, 0xD8, 0x1B, 0x00, 0x00, 0x90, 0x1B, 0x00, 0x00, 0xB0, 0x09, 0x00, 0x00, 0xA0, 0x05, 0x00,
  0x00, 0xE0, 0x07, 0x00, 0x00, 0xC0, 0x03, 0x00
};

// bad flower
unsigned char bitmap_bad[] U8G_PROGMEM = {
  0x00, 0x80, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0xE0, 0x0D, 0x00, 0x00, 0xA0, 0x0F, 0x00,
  0x00, 0x20, 0x69, 0x00, 0x00, 0x10, 0x78, 0x02, 0x00, 0x10, 0xC0, 0x03, 0x00, 0x10, 0xC0, 0x03,
  0x00, 0x10, 0x00, 0x01, 0x00, 0x10, 0x80, 0x00, 0x00, 0x10, 0xC0, 0x00, 0x00, 0x30, 0x60, 0x00,
  0x00, 0x60, 0x30, 0x00, 0x00, 0xC0, 0x1F, 0x00, 0x00, 0x60, 0x07, 0x00, 0x00, 0x60, 0x00, 0x00,
  0x00, 0x60, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
  0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xC7, 0x1C, 0x00,
  0x80, 0x68, 0x66, 0x00, 0xC0, 0x33, 0x7B, 0x00, 0x40, 0xB6, 0x4D, 0x00, 0x00, 0xE8, 0x06, 0x00,
  0x00, 0xF0, 0x03, 0x00, 0x00, 0xE0, 0x00, 0x00
};

// Elecrow Logo
  static unsigned char bitmap_logo[] U8G_PROGMEM ={
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0xE0,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x04,0xF8,0xFF,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x08,0xFE,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x10,0x1F,0xE0,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0xB0,0x07,0x80,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0xE0,0x03,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0xC0,0x00,0x00,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x80,0x01,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x60,0x23,0x00,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x70,0xC7,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x70,0x9E,0x0F,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x70,0x3C,0xFE,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x70,0x78,0xF8,0x7F,0xF0,0x9F,0x07,0xFE,0x83,0x0F,0xFF,0x00,0x77,0x3C,0x18,0x1C,
  0x70,0xF0,0xE1,0x3F,0xF1,0x9F,0x07,0xFE,0xE1,0x1F,0xFF,0xC3,0xF7,0x3C,0x38,0x0C,
  0x70,0xE0,0x87,0x8F,0xF1,0xC0,0x07,0x1E,0x70,0x3C,0xCF,0xE3,0xE1,0x7D,0x3C,0x0E,
  0x70,0xD0,0x1F,0xC0,0xF1,0xC0,0x03,0x1F,0x78,0x3C,0xCF,0xE3,0xE1,0x7D,0x3C,0x06,
  0xF0,0xB0,0xFF,0xF1,0xF0,0xC0,0x03,0x0F,0x78,0x3C,0xCF,0xF3,0xE0,0x7B,0x3E,0x06,
  0xF0,0x60,0xFF,0xFF,0xF0,0xC6,0x03,0xEF,0x3C,0x80,0xEF,0xF1,0xE0,0x7B,0x3E,0x03,
  0xF0,0xE1,0xFC,0xFF,0xF8,0xCF,0x03,0xFF,0x3C,0x80,0xFF,0xF0,0xE0,0x7B,0x7B,0x01,
  0xE0,0xC3,0xF9,0x7F,0x78,0xC0,0x03,0x0F,0x3C,0x80,0xF7,0xF1,0xE0,0xF9,0xF9,0x01,
  0xE0,0x83,0xE3,0x7F,0x78,0xE0,0x03,0x0F,0x3C,0xBC,0xE7,0xF1,0xE0,0xF9,0xF9,0x00,
  0xC0,0x0F,0x8F,0x3F,0x78,0xE0,0x81,0x0F,0x3C,0x9E,0xE7,0xF1,0xE0,0xF1,0xF8,0x00,
  0x80,0x3F,0x1E,0x00,0x78,0xE0,0x81,0x07,0x38,0x9E,0xE7,0xF1,0xF0,0xF0,0x78,0x00,
  0x80,0xFF,0xFF,0x00,0xF8,0xEF,0xBF,0xFF,0xF8,0xCF,0xE7,0xE1,0x7F,0x70,0x70,0x00,
  0x00,0xFF,0xFF,0x0F,0xF8,0xEF,0xBF,0xFF,0xE0,0xC3,0xE3,0x81,0x1F,0x70,0x30,0x00,
  0x00,0xFC,0xFF,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0xF8,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0xE0,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
  };


static unsigned char bitmap_T[] U8G_PROGMEM = {
  0xF7, 0x01, 0x1D, 0x03, 0x0B, 0x02, 0x0C, 0x02, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x08, 0x02,
  0x18, 0x03, 0xF0, 0x01
};

static unsigned char bitmap_H[] U8G_PROGMEM = {
  0x00, 0x00, 0x80, 0x01, 0xC0, 0x03, 0xE0, 0x07, 0xF0, 0x0F, 0xF8, 0x1F, 0xF8, 0x1F, 0xFC, 0x3F,
  0xFC, 0x3F, 0xFE, 0x7F, 0xEE, 0x7F, 0xB3, 0xF7, 0xBB, 0xFB, 0xBB, 0xFD, 0xBB, 0xFD, 0xC7, 0xFE,
  0x7F, 0xC3, 0x3F, 0xDD, 0xBF, 0xFD, 0xDF, 0xDD, 0xEE, 0x5B, 0xFE, 0x7F, 0xFC, 0x3F, 0xF8, 0x1F,
  0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};


void setup()
{
  draw_elecrow();
 delay(2000);
  Wire.begin();
  RTC.begin();
  Serial.begin(9600);
  // declare relay as output
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
  pinMode(relay4, OUTPUT);
  // declare pump as output
  pinMode(pump, OUTPUT);
  // declare switch as input
  pinMode(button, INPUT);
  //pinMode(ROTARY_ANGLE_SENSOR, INPUT);
  // water_flower();
}

void loop()
{
  // read the value from the moisture sensors:
  read_value();
  water_flower();
  int button_state = digitalRead(button);
  if (button_state == 1)
  {
    read_value();
    u8g.firstPage();
    do
    {
      drawTH();
      drawflower();
     
    } while ( u8g.nextPage() );
  }
  else
  {
    u8g.firstPage();
    do
    {
      drawtime();
      u8g.drawStr(8, 55 , "www.elecrow.com");
    } while (u8g.nextPage());
  }
}

//Set moisture value
void read_value()
{
/**************These is for resistor moisture sensor***********
 float value1 = analogRead(A0);
  moisture1_value = (value1 * 120) / 1023; delay(20);
  float value2 = analogRead(A1);
  moisture2_value = (value2 * 120) / 1023; delay(20);
  float value3 = analogRead(A2);
  moisture3_value = (value3 * 120) / 1023; delay(20);
  float value4 = analogRead(A3);
  moisture4_value = (value4 * 120) / 1023; delay(20);
 **********************************************************/
/************These is for capacity moisture sensor*********/
 float value1 = analogRead(A0);
  moisture1_value =map(value1,590,360,0,100); delay(20);
  if(moisture1_value<0){
    moisture1_value=0;
  }
  float value2 = analogRead(A1);
  moisture2_value =map(value2,600,360,0,100); delay(20);
  if(moisture2_value<0) {
    moisture2_value=0;
  }
  float value3 = analogRead(A2);
  moisture3_value =map(value3,600,360,0,100); delay(20);
  if(moisture3_value<0){
    moisture3_value=0;
  }
  float value4 = analogRead(A3);
  moisture4_value =map(value4,600,360,0,100); delay(20);
  if(moisture4_value<0) {
    moisture4_value=0;
  }
}

void water_flower()
{
  if (moisture1_value < 30)
  {
    digitalWrite(relay1, HIGH);
    relay1_state_flag = 1;
    delay(50);
    if (pump_state_flag == 0)
    {
      digitalWrite(pump, HIGH);
      pump_state_flag = 1;
      delay(50);
    }
  }
  else if (moisture1_value > 55)
  {
    digitalWrite(relay1, LOW);
    relay1_state_flag = 0;
    delay(50);
    if ((relay1_state_flag == 0) && (relay2_state_flag == 0) && (relay3_state_flag == 0) && (relay4_state_flag == 0))
    {
      digitalWrite(pump, LOW);
      pump_state_flag = 0;
      delay(50);
    }
  }

  if (moisture2_value < 30)
  {
    digitalWrite(relay2, HIGH);
    relay2_state_flag = 1;
    delay(50);
    if (pump_state_flag == 0)
    {
      digitalWrite(pump, HIGH);
      pump_state_flag = 1;
      delay(50);
    }
  }
  else if (moisture2_value > 55)
  {
    digitalWrite(relay2, LOW);
    relay2_state_flag = 0;
    delay(50);
    if ((relay1_state_flag == 0) && (relay2_state_flag == 0) && (relay3_state_flag == 0) && (relay4_state_flag == 0))
    {
      digitalWrite(pump, LOW);
      pump_state_flag = 0;
      delay(50);
    }
  }

  if (moisture3_value < 30)
  {
    digitalWrite(relay3, HIGH);
    relay3_state_flag = 1;
    delay(50);
    if (pump_state_flag == 0)
    {
      digitalWrite(pump, HIGH);
      pump_state_flag = 1;
      delay(50);
    }
  }
  else if (moisture3_value > 55)
  {
    digitalWrite(relay3, LOW);
    relay3_state_flag = 0;
    delay(50);
    if ((relay1_state_flag == 0) && (relay2_state_flag == 0) && (relay3_state_flag == 0) && (relay4_state_flag == 0))
    {
      digitalWrite(pump, LOW);
      pump_state_flag = 0;
      delay(50);
    }
  }

  if (moisture4_value < 30)
  {
    digitalWrite(relay4, HIGH);
    relay4_state_flag = 1;
    delay(50);
    if (pump_state_flag == 0)
    {
      digitalWrite(pump, HIGH);
      pump_state_flag = 1;
      delay(50);
    }
  }
  else if (moisture4_value > 55)
  {
    digitalWrite(relay4, LOW);
    relay4_state_flag = 0;
    delay(50);
    if ((relay1_state_flag == 0) && (relay2_state_flag == 0) && (relay3_state_flag == 0) && (relay4_state_flag == 0))
    {
      digitalWrite(pump, LOW);
      pump_state_flag = 0;
      delay(50);
    }
  }

}



  void draw_elecrow(void){

  u8g.setFont(u8g_font_gdr9r);
  u8g.drawStr(8,55 , "www.elecrow.com");
  u8g.drawXBMP(0, 5,128,32, bitmap_logo);
  }


void drawtime(void)
{
  int x = 5;
  float i = 25.00;
  float j = 54;
  DateTime now = RTC.now();
  //Serial.print(now.year(), DEC);
  if (! RTC.isrunning())
  {
    u8g.setFont(u8g_font_6x10);
    u8g.setPrintPos(5, 20);
    u8g.print("RTC is NOT running!");
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
  else
  {
    u8g.setFont(u8g_font_7x13);
    u8g.setPrintPos(x, 11);
    u8g.print(now.year(), DEC);
    u8g.setPrintPos(x + 80, 11);
    u8g.print(daysOfTheWeek[now.dayOfTheWeek()]);
    u8g.setPrintPos(x + 28, 11);
    u8g.print("/");
    u8g.setPrintPos(x + 33, 11);
    u8g.print(now.month(), DEC);
    if (now.month() < 10)
      x -= 7;
    u8g.setPrintPos(x + 47, 11);
    u8g.print("/");
    u8g.setPrintPos(x + 53, 11);
    u8g.print(now.day(), DEC);
    u8g.setFont(u8g_font_8x13);
    int x = 35;
    u8g.setPrintPos(x, 33);
    u8g.print(now.hour(), DEC);
    if (now.hour() < 10)
      x -= 7;
    u8g.setPrintPos(x + 15, 33);
    u8g.print(":");
    u8g.setPrintPos(x + 21, 33);
    u8g.print(now.minute(), DEC);
    if (now.minute() < 10)
      x -= 7;
    u8g.setPrintPos(x + 36, 33);
    u8g.print(":");
    u8g.setPrintPos(x + 42, 33);
    u8g.print(now.second(), DEC);
  }
}

void drawLogo(uint8_t d)
{
  u8g.setFont(u8g_font_gdr25r);
  u8g.drawStr(8 + d, 30 + d, "E");
  u8g.setFont(u8g_font_gdr25r);
  u8g.drawStr(30 + d, 30 + d, "l");
  u8g.setFont(u8g_font_gdr25r);
  u8g.drawStr(40 + d, 30 + d, "e");
  u8g.setFont(u8g_font_gdr25r);
  u8g.drawStr(55 + d, 30 + d, "c");
  u8g.setFont(u8g_font_gdr25r);
  u8g.drawStr(70 + d, 30 + d, "r");
  u8g.setFont(u8g_font_gdr25r);
  u8g.drawStr(85 + d, 30 + d, "o");
  u8g.setFont(u8g_font_gdr25r);
  u8g.drawStr(100 + d, 30 + d, "w");
}


//Style the flowers     bitmap_bad: bad flowers     bitmap_good:good  flowers
void drawflower(void)
{


//bitmaps_flowers[11]


u8g.drawXBMP( 0, 0, 32, 64, bitmaps_flowers[constrain(map(moisture1_value, 0, 100, 0, 10), 0, 10)]);
u8g.drawXBMP(32, 0, 32, 64, bitmaps_flowers[constrain(map(moisture2_value, 0, 100, 0, 10), 0, 10)]);
u8g.drawXBMP(64, 0, 32, 64, bitmaps_flowers[constrain(map(moisture3_value, 0, 100, 0, 10), 0, 10)]);
u8g.drawXBMP(96, 0, 32, 64, bitmaps_flowers[constrain(map(moisture4_value, 0, 100, 0, 10), 0, 10)]);


/*  if (moisture1_value < 30)
  {
    u8g.drawXBMP(0, 0, 32, 30, bitmap_bad);
  }
  else
  {
    u8g.drawXBMP(0, 0, 32, 30, bitmap_good);
  }
  if (moisture2_value < 30)
  {
    u8g.drawXBMP(32, 0, 32, 30, bitmap_bad);
  }
  else
  {
    u8g.drawXBMP(32, 0, 32, 30, bitmap_good);
  }
  if (moisture3_value < 30)
  {
    u8g.drawXBMP(64, 0, 32, 30, bitmap_bad);
  }
  else
  {
    u8g.drawXBMP(64, 0, 32, 30, bitmap_good);
  }
  if (moisture4_value < 30)
  {
    u8g.drawXBMP(96, 0, 32, 30, bitmap_bad);
  }
  else
  {
    u8g.drawXBMP(96, 0, 32, 30, bitmap_good);
  }*/

}


void drawTH(void)
{

char buffer[20];
int str_width;

u8g.setFont(u8g_font_7x14);

itoa(constrain(moisture1_value, 0, 100), buffer, 10);
str_width = u8g.getStrWidth(buffer);
u8g.drawStr(16 - str_width/2, 12, buffer);

itoa(constrain(moisture2_value, 0, 100), buffer, 10);
str_width = u8g.getStrWidth(buffer);
u8g.drawStr(48 - str_width/2, 12, buffer);

itoa(constrain(moisture3_value, 0, 100), buffer, 10);
str_width = u8g.getStrWidth(buffer);
u8g.drawStr(80 - str_width/2, 12, buffer);

itoa(constrain(moisture4_value, 0, 100), buffer, 10);
str_width = u8g.getStrWidth(buffer);
u8g.drawStr(112 - str_width/2, 12, buffer);


/*  int A = 0;
  int B = 0;
  int C = 64;
  int D = 96;
  char moisture1_value_temp[5] = {0};
  char moisture2_value_temp[5] = {0};
  char moisture3_value_temp[5] = {0};
  char moisture4_value_temp[5] = {0};
  read_value();
  itoa(moisture1_value, moisture1_value_temp, 10);
  itoa(moisture2_value, moisture2_value_temp, 10);
  itoa(moisture3_value, moisture3_value_temp, 10);
  itoa(moisture4_value, moisture4_value_temp, 10);
  u8g.setFont(u8g_font_7x14);
  u8g.setPrintPos(9, 60);
  u8g.print("A0");
  if (moisture1_value < 10)
  {
    //u8g.setPrintPos(A + 14, 45 );
    u8g.drawStr(A + 14, 45, moisture1_value_temp);
    delay(20);
    u8g.drawStr(A + 14, 45, moisture1_value_temp);
    
  }
  else if (moisture1_value < 100)
  {
    //u8g.setPrintPos(A + 7, 45);
    u8g.drawStr(A + 7, 45, moisture1_value_temp);
    delay(20);
    u8g.drawStr(A + 7, 45, moisture1_value_temp);
   
  }
  else
  {
    //u8g.setPrintPos(A + 2, 45 );
    moisture1_value = 100;
    itoa(moisture1_value, moisture1_value_temp, 10);
    u8g.drawStr(A + 2, 45, moisture1_value_temp);
  }
  //u8g.print(moisture1_value);
  u8g.setPrintPos(A + 23, 45 );
  u8g.print("%");
  u8g.setPrintPos(41, 60 );
  u8g.print("A1");
  if (moisture2_value < 10)
  {
    //u8g.setPrintPos(B + 46, 45 );
    u8g.drawStr(B + 46, 45, moisture2_value_temp); 
    delay(20);
    u8g.drawStr(B + 46, 45, moisture2_value_temp); 
  }
  else if (moisture2_value < 100)
  {
    //u8g.setPrintPos(B + 39, 45);
    u8g.drawStr(B + 39, 45, moisture2_value_temp);
    delay(20);
    u8g.drawStr(B + 39, 45, moisture2_value_temp);
  }
  else
  {
    //u8g.setPrintPos(B + 32, 45);
    moisture2_value = 100;
    itoa(moisture2_value, moisture2_value_temp, 10);
    u8g.drawStr(B + 32, 45, moisture2_value_temp);
  }
  // u8g.print(moisture2_value);
  u8g.setPrintPos(B + 54, 45);
  u8g.print("%");
  u8g.setPrintPos(73, 60);
  u8g.print("A2");
  if (moisture3_value < 10)
  {
    //u8g.setPrintPos(C + 14, 45 );
    u8g.drawStr(C + 14, 45, moisture3_value_temp);
    delay(20);
    u8g.drawStr(C + 14, 45, moisture3_value_temp);
    
  }
  else if (moisture3_value < 100)
  {
    // u8g.setPrintPos(C + 7, 45);
   u8g.drawStr(C + 7, 45, moisture3_value_temp);
    delay(20);
    u8g.drawStr(C + 7, 45, moisture3_value_temp);
    
  }
  else
  {
    // u8g.setPrintPos(C + 2, 45);
    moisture3_value = 100;
    itoa(moisture3_value, moisture3_value_temp, 10);
    u8g.drawStr(C + 2, 45, moisture3_value_temp);
  }
  //u8g.print(moisture3_value);
  u8g.setPrintPos(C + 23, 45);
  u8g.print("%");
  u8g.setPrintPos(105, 60);
  u8g.print("A3");
  if (moisture4_value < 10)
  {
    //u8g.setPrintPos(D + 14, 45 );
    u8g.drawStr(D + 14, 45, moisture4_value_temp);
    delay(20);
    u8g.drawStr(D + 14, 45, moisture4_value_temp);
   
  }
  else if (moisture4_value < 100)
  {
    // u8g.setPrintPos(D + 7, 45);
    u8g.drawStr(D + 7, 45, moisture4_value_temp);
    delay(20);
    u8g.drawStr(D + 7, 45, moisture4_value_temp);
  
  }
  else
  {
    //u8g.setPrintPos(D + 2, 45);
    moisture4_value = 100;
    itoa(moisture4_value, moisture4_value_temp, 10);
    u8g.drawStr(D + 2, 45, moisture4_value_temp);
  }
  //u8g.print(moisture4_value);
  u8g.setPrintPos(D + 23, 45);
  u8g.print("%");*/
}






GND5VSDASCLSQWRTCDS1307+