/*
* December 11 3:25am - added the calibration status without the actual status
*/
/*
* Very simple menu on an OLED display (with 8 lines of text).
* Displays menu items from the array menu. Max. number of items is 7.
*
* This sketch uses the library "U8g2", "Bounce2" and uses 3 buttons (up/down/select).
*
*/
//Libraries//
//#include <Arduino.h>
#include <U8g2lib.h>
//#include <U8x8lib.h>
#include <Bounce2.h>
//The code runs just fine without these but removing it doesnt rlly save space so...
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
int cursor = 0;
int j = 0; // Cursor jr
unsigned long previousMillis = 0;
const long interval = 5000;
//OLED Constructor//
//U8X8_SSD1306_128X64_NONAME_HW_I2C display(U8X8_PIN_NONE); //Simulation
U8X8_SH1106_128X64_NONAME_HW_I2C display(U8X8_PIN_NONE); //Actual
//Buttons//
byte button_pins[] = {2,4,3}; // 2 = down; 4 = up; 3 = select
#define NUMBUTTONS sizeof(button_pins)
Bounce *buttons = new Bounce[NUMBUTTONS];
//Menu Items//
#define MENU_SIZE 4
const char *menu[MENU_SIZE] = {"DATA", "SETTINGS", "CALIBRATE", "SLEEP"};
#define DATA_SIZE 5
const char *data_menu[DATA_SIZE] = {"TEMP & HUM", "PM10,2.5,&1.0", "CO2 & TVOC", "ALL", "Back to Menu"};
#define SETTINGS_SIZE 5
const char *settings_menu[SETTINGS_SIZE] = {"PARAMETERS", "Wi-Fi", "BRIGHTNESS", "RESET", "Back to Menu"};
#define CALIBRATION_SIZE 12
const char *calibration_menu[CALIBRATION_SIZE] = {"Tin", "Tout", "Hin", "Hout", "PM10"," Next Page", "PM2.5", "PM1.0", "CO2", "TVOC", " Previous Page", " Back to Menu"};
#define OFFSET_VALUES_SIZE 12
int offset_values_menu[OFFSET_VALUES_SIZE] = {/* TempIn offset */ 10, /* TempOut offset */ 20, /* HumIn offset */ 30, /* HumOut offset */ 40, /* PM10 offset */ 50, 0, /* PM2.5 offset */ 60, /* PM1.0 offset */ 70, /* CO2 offset */ 80, /* TVOC offset */ 90, 0, 0};
//Sensor Values//
#define SENSOR_INPUT_SIZE 5
int latest_temp1[SENSOR_INPUT_SIZE] = {0,0,0,0,0};
int latest_hum1[SENSOR_INPUT_SIZE] = {0,0,0,0,0};
int latest_temp2[SENSOR_INPUT_SIZE] = {0,0,0,0,0};
int latest_hum2[SENSOR_INPUT_SIZE] = {0,0,0,0,0};
int latest_pm10[SENSOR_INPUT_SIZE] = {0,0,0,0,0};
int latest_pm25[SENSOR_INPUT_SIZE] = {0,0,0,0,0};
int latest_pm1_0[SENSOR_INPUT_SIZE] = {0,0,0,0,0};
int latest_co2[SENSOR_INPUT_SIZE] = {0,0,0,0,0};
int latest_tvoc[SENSOR_INPUT_SIZE] = {0,0,0,0,0};
uint8_t plainhorizontaltiles[8] = {0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30};
uint8_t perpendiculartiles[8] = {0x30,0x30,0x30,255,255,0x30,0x30,0x30};
uint8_t halfperpendiculartiles[8] = {0,0,0,255,255,0x30,0x30,0x30};
uint8_t verticaltiles[8] = {0,0,0,255,255,0,0,0};
uint8_t topline[8] = {0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80};
uint8_t bottomline[24] = {255,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,255};
uint8_t fullbox[8] = {255,255,255,255,255,255,255,255};
void setup() {
Serial.begin(9600);
// [From OP] Make input & enable pull-up resistors on switch pins
for(int i=0; i<NUMBUTTONS; i++) {
buttons[i].attach(button_pins[i], INPUT_PULLUP); // [From OP] setup the bounce instance for the current button
buttons[i].interval(25);
}
display.begin(); //Display = u8x8
display.setPowerSave(0); //Sleep mode off
display.setFont(u8x8_font_pxplusibmcgathin_f); //Font lol
display.setContrast(200); //Brightness
showMenu();
}
void loop() {
unsigned long currentMillis = millis();
PressMenuButtons();
Temp1();
//jk maybe i should put this under Temp1 nalang and then call Temp1 in the loop?? so that i can include the command to display the average under Temp1 na din instead of it being a separate thing pa?
unsigned long currentMillis = millis();
if(currentMillis - previousMillis == interval){
Serial.print("Reading #1 - ");
//Serial.print(" ");
Temp1();
previousMillis = currentMillis;
}
else if(currentMillis - previousMillis == interval){
Serial.print("Reading #2 - ");
//Serial.print(" ");
Temp1();
previousMillis = currentMillis;
}
else if(currentMillis - previousMillis == interval){
Serial.print("Reading #3 - ");
//Serial.print(" ");
Temp1();
previousMillis = currentMillis;
}
else if(currentMillis - previousMillis == interval){
Serial.print("Reading #4 - ");
//Serial.print(" ");
Temp1();
previousMillis = currentMillis;
}
else if(currentMillis - previousMillis == interval){
Serial.print("Reading #5 - ");
//Serial.print(" ");
Temp1();
previousMillis = currentMillis;
}
}
//Pushing Buttons//
//Menu Buttons//
void PressMenuButtons(){
for (int i=0; i<NUMBUTTONS; i++){
buttons[i].update(); // [From OP] Update the Bounce instance
if (buttons[i].fell()){ // [From OP] If it fell
if (i==2) { // When the SELECT button is pushed aka 3rd button enumerated on the button_pins list
display.clearDisplay();
executeChoice(cursor);
}
else {
// [From OP] Erase previous cursor
display.setCursor(0,cursor);
display.print(' ');
if(i==0){ // When the DOWN button is pushed aka 1st button enumerated on the button_pins list
cursor++;
if(cursor>(MENU_SIZE+1)) cursor=2; // The MENU SIZE is 4 but the cursor counts starting from 0 so when the cursor is at the 3rd value (aka the last value on the menu), it goes back to 0 aka the first item on the menu AMEN
}
else{ //When the UP button is pushed aka the only option left
cursor--;
if(cursor<2) cursor=(MENU_SIZE+1); // Same as the last if explanation but in the opposite direction
}
// [From OP] Show cursor at new line
display.setCursor(0,cursor);
display.print('>');
}
} // [From OP] End if button fell...
} // [From OP] End for-loop of button check
}
//Data Buttons//
void PressDataMenuButtons(){
for (int i=0;i<NUMBUTTONS;i++){
buttons[i].update();
if (buttons[i].fell()){
if (i==2){ // Select
display.clearDisplay();
executeDataChoice(cursor);
}
else {
display.setCursor(0,cursor);
display.print(' ');
if (i==0){ // Down
cursor++;
if (cursor>(DATA_SIZE+1)) cursor=2;
}
else { // Up
cursor--;
if (cursor<2) cursor=(DATA_SIZE+1);
}
display.setCursor(0,cursor);
display.print('>');
}
}
}
}
//All Data Buttons//
void PressAllDataButtons1(){
for (int i=0;i<NUMBUTTONS;i++){
buttons[i].update();
if (buttons[i].fell()){
if (i==2){ //Select
display.setCursor(1,0);
display.clearDisplay();
showAllDataMenu2();
cursor=6;
while(i==2){
PressAllDataButtons2();
}
}
}
}
}
void PressAllDataButtons2(){
for (int i=0;i<NUMBUTTONS;i++){
buttons[i].update();
if (buttons[i].fell()){
if (i==2){ //Select
display.setCursor(1,0);
display.clearDisplay();
if (cursor==6){
executeDataChoice(5);
}
else{
executeDataChoice(cursor-1);
}
}
else{
display.setCursor(0,cursor);
display.print(' ');
if (i==0){ //Down
cursor++;
if(cursor>7) cursor=6;
}
else{ //Up
cursor--;
if(cursor<6) cursor=7;
}
display.setCursor(0,cursor);
display.print('>');
}
}
}
}
//Settings Buttons//
void PressSettingsMenuButtons(){
for (int i=0;i<NUMBUTTONS;i++){
buttons[i].update();
if (buttons[i].fell()){
if (i==2){ // Select
display.clearDisplay();
executeSettingsChoice(cursor);
}
else{
display.setCursor(0,cursor);
display.print(' ');
if (i==0){ // Down
cursor++;
if (cursor>(SETTINGS_SIZE+1)) cursor=2;
}
else {
cursor--;
if (cursor<2) cursor=(SETTINGS_SIZE+1);
}
display.setCursor(0,cursor);
display.print('>');
}
}
}
}
//Brightness Menu Buttons//
void PressBrightnessMenuButtons(){
for (int i=0; i<NUMBUTTONS; i++){
buttons[i].update(); // [From OP] Update the Bounce instance
if (buttons[i].fell()){ // [From OP] If it fell
if (i==2) { // When the SELECT button is pushed aka 3rd button enumerated on the button_pins list
display.clearDisplay();
executeBrightnessMenuChoice(cursor);
}
else {
// [From OP] Erase previous cursor
display.setCursor(0,cursor);
display.print(' ');
if(i==0){ // When the DOWN button is pushed aka 1st button enumerated on the button_pins list
cursor++;
if(cursor>4) cursor=3;
}
else{ //When the UP button is pushed aka the only option left
cursor--;
if(cursor<3) cursor=4;
}
// [From OP] Show cursor at new line
display.setCursor(0,cursor);
display.print('>');
}
} // [From OP] End if button fell...
} // [From OP] End for-loop of button check
}
//Brightness Buttons//
void PressBrightnessButtons(){
for (int i=0;i<NUMBUTTONS;i++){
buttons[i].update();
if (buttons[i].fell()){
if (i==2){ // Select
display.setCursor(0,cursor);
if (cursor==3) {
display.setCursor(j*3,3);
j++;
if (j>4) j=0;
executeBrightnessChoice(j);
}
else executeBrightnessMenuChoice(cursor);
}
else {
// [From OP] Erase previous cursor
display.setCursor(0,cursor);
display.print(' ');
if(i==0){ // When the DOWN button is pushed aka 1st button enumerated on the button_pins list
cursor++;
if(cursor>4) cursor=3;
}
else{ //When the UP button is pushed aka the only option left
cursor--;
if(cursor<3) cursor=4;
}
// [From OP] Show cursor at new line
display.setCursor(0,cursor);
display.print('>');
}
}
}
}
//Calibration Main Buttons//
void PressCalibrationMainMenuButtons(){
for (int i=0;i<NUMBUTTONS;i++){
buttons[i].update();
if (buttons[i].fell()){
if (i==2) { //Select
display.clearDisplay();
executeCalibrationMainMenuChoice(cursor);
}
else{
display.setCursor(0,cursor);
//cursor=2;
display.print(' ');
if(i==0){ //Down
cursor++;
if(cursor>4) cursor=2;
}
else{ //Up
cursor--;
if(cursor<2) cursor=4;
}
display.setCursor(0,cursor);
display.print('>');
}
}
}
}
//Calibration Status Buttons//
void PressCalibrationStatusButtons1(){
for (int i=0;i<NUMBUTTONS;i++){
buttons[i].update();
if (buttons[i].fell()){
if (i==2){ //Select
display.setCursor(1,0);
display.clearDisplay();
showCalibrationStatus2();
cursor=6;
while(i==2){
PressCalibrationStatusButtons2();
}
}
}
}
}
void PressCalibrationStatusButtons2(){
for (int i=0;i<NUMBUTTONS;i++){
buttons[i].update();
if (buttons[i].fell()){
if (i==2){ //Select
display.setCursor(1,0);
display.clearDisplay();
if (cursor==6){
executeCalibrationMainMenuChoice(2);
}
else{
executeDataChoice(cursor-1);
}
}
else{
display.setCursor(0,cursor);
display.print(' ');
if (i==0){ //Down
cursor++;
if(cursor>7) cursor=6;
}
else{ //Up
cursor--;
if(cursor<6) cursor=7;
}
display.setCursor(0,cursor);
display.print('>');
}
}
}
}
//Calibration Buttons//
void PressCalibrationMenuButtons1(){
for (int i=0;i<NUMBUTTONS;i++){
buttons[i].update();
if (buttons[i].fell()){
if (i==2){ //Select
executeCalibrationChoice(cursor);
}
else{
display.setCursor(0,cursor);
display.print(' ');
if (i==0){ //Down
cursor++;
if(cursor>7) cursor=2;
}
else{
cursor--;
if(cursor<2) cursor=7;
}
display.setCursor(0,cursor);
display.print('>');
}
}
}
}
void PressCalibrationMenuButtons2(){
for (int i=0;i<NUMBUTTONS;i++){
buttons[i].update();
if (buttons[i].fell()){
if (i==2){ //Select
executeCalibrationChoice(cursor+6);
}
else{
display.setCursor(0,cursor);
display.print(' ');
if(i==0){ //Down
cursor++;
if(cursor>7) cursor=2;
}
else{ //Up
cursor--;
if(cursor<2) cursor=7;
}
display.setCursor(0,cursor);
display.print('>');
}
}
}
}
//Offset Buttons//
void PressOffsetButtons1(){
for (int i=0;i<NUMBUTTONS;i++){
buttons[i].update();
if (buttons[i].fell()){
if (i==2){ //Select
display.setCursor(0,cursor); //
while(i==2){
PressCalibrationMenuButtons1();
}
}
else{
display.setCursor(0,cursor);
display.print(' ');
display.drawString(11,cursor," ");
display.setCursor(11,cursor);
if(i==0){ //Down
offset_values_menu[cursor-2]--;
display.setCursor(11,cursor);
display.print(offset_values_menu[cursor-2]);
}
else{ //Up
offset_values_menu[cursor-2]++;
display.setCursor(11,cursor);
display.print(offset_values_menu[cursor-2]);
}
display.setCursor(0,cursor);
display.print('>');
}
}
}
}
void PressOffsetButtons2(){
for (int i=0;i<NUMBUTTONS;i++){
buttons[i].update();
if (buttons[i].fell()){
if (i==2){ //Select
display.setCursor(0,cursor); //
while(i==2){
PressCalibrationMenuButtons2();
}
}
else{
display.setCursor(0,cursor);
display.print(' ');
display.drawString(11,cursor," ");
display.setCursor(11,cursor);
if(i==0){ //Down
offset_values_menu[cursor+4]--;
display.setCursor(11,cursor);
display.print(offset_values_menu[cursor+4]);
}
else{ //Up
offset_values_menu[cursor+4]++;
display.setCursor(11,cursor);
display.print(offset_values_menu[cursor+4]);
}
display.setCursor(0,cursor);
display.print('>');
}
}
}
}
//Sleep Buttons//
void PressSleepButtons(){
for (int i=0;i<NUMBUTTONS;i++){
buttons[i].update();
if (buttons[i].fell()){
display.setPowerSave(0);
display.clearDisplay();
display.setCursor(1,0);
showMenu();
while(i<NUMBUTTONS){
PressMenuButtons();
}
}
}
}
//Back to Data Menu Buttons//
void BackToDataMenuButtons(){
for (int i=0;i<NUMBUTTONS;i++){
buttons[i].update();
if (buttons[i].fell()){
if (i==2){ // Select
display.clearDisplay();
display.setCursor(1,0);
showDataMenu();
while(i==2){
PressDataMenuButtons();
}
}
}
}
}
//Display menu//
//Main menu//
void showMenu(){
cursor=(0);
display.clearDisplay();
display.setFont(u8x8_font_amstrad_cpc_extended_f); //Font for titles
display.println("* IAQ Seestem *");
for(int i=0;i<15;i++){
display.drawTile(i,1,1,plainhorizontaltiles);
}
display.setFont(u8x8_font_chroma48medium8_r); // Works but idk if i like it lol.. nvm its cute
cursor=(0,2);
// [From OP] Show menu items
for(int i=0;i<MENU_SIZE;i++){
display.drawString(2,i+2,menu[i]);
}
display.setCursor(0,2);
display.print('>');
}
//Data menu//
void showDataMenu(){
cursor=(0);
display.clearDisplay();
display.setFont(u8x8_font_amstrad_cpc_extended_f);
display.println(" Data Menu");
for(int i=0;i<15;i++){
display.drawTile(i,1,1,plainhorizontaltiles);
}
display.setFont(u8x8_font_chroma48medium8_r); // Works but idk if i like it lol.. nvm its cute
cursor=(0,2);
//Show menu items
for(int i=0;i<DATA_SIZE;i++){
display.drawString(2,i+2,data_menu[i]);
}
display.setCursor(0,2);
display.print('>');
}
//All data menu//
void showAllDataMenu1(){
cursor=(0);
display.clearDisplay();
display.setFont(u8x8_font_amstrad_cpc_extended_f);
display.println(" Data");
for(int i=0;i<15;i++){
display.drawTile(i,1,1,plainhorizontaltiles);
}
display.setFont(u8x8_font_chroma48medium8_r); // Works but idk if i like it lol.. nvm its cute
cursor=(0,2);
for(int i=0;i<6;i++){
display.drawString(1,i+2,calibration_menu[i]);
}
display.setCursor(0,7);
display.print('>');
}
void showAllDataMenu2(){
cursor=(0);
display.clearDisplay();
display.setFont(u8x8_font_amstrad_cpc_extended_f);
display.println(" Data");
for(int i=0;i<15;i++){
display.drawTile(i,1,1,plainhorizontaltiles);
}
display.setFont(u8x8_font_chroma48medium8_r); // Works but idk if i like it lol.. nvm its cute
cursor=(0,2);
for(int i=6;i<CALIBRATION_SIZE;i++){
display.drawString(1,i-4,calibration_menu[i]);
}
display.setCursor(0,6);
display.print('>');
}
//Settings menu//
void showSettingsMenu(){
cursor=(0);
display.clearDisplay();
display.setFont(u8x8_font_amstrad_cpc_extended_f);
display.println(" Settings");
for(int i=0;i<15;i++){
display.drawTile(i,1,1,plainhorizontaltiles);
}
display.setFont(u8x8_font_chroma48medium8_r); // Works but idk if i like it lol.. nvm its cute
cursor=(0,2);
for (int i=0;i<SETTINGS_SIZE;i++){
display.drawString(2,i+2,settings_menu[i]);
}
display.setCursor(0,2);
display.print('>');
}
//Calibration main menu//
void showCalibrationMainMenu(){
cursor=(0);
display.clearDisplay();
display.setFont(u8x8_font_amstrad_cpc_extended_f);
display.println(" Calibration");
for(int i=0;i<15;i++){
display.drawTile(i,1,1,plainhorizontaltiles);
}
display.setFont(u8x8_font_chroma48medium8_r); // Works but idk if i like it lol.. nvm its cute
cursor=(0,2);
display.drawString(2,2,"VIEW STATUS");
cursor=(0,3);
display.drawString(2,3,"INPUT OFFSET");
cursor=(0,4);
display.drawString(2,4,data_menu[4]);
cursor=2;
display.setCursor(0,cursor);
display.print('>');
}
//Calibration status//
void showCalibrationStatus1(){
cursor=(0);
display.clearDisplay();
display.setFont(u8x8_font_amstrad_cpc_extended_f);
display.println(" Status");
for(int i=0;i<15;i++){
display.drawTile(i,1,1,plainhorizontaltiles);
}
display.setFont(u8x8_font_chroma48medium8_r); // Works but idk if i like it lol.. nvm its cute
cursor=(0,2);
for(int i=0;i<6;i++){
display.drawString(1,i+2,calibration_menu[i]);
}
display.setCursor(0,7);
display.print('>');
}
void showCalibrationStatus2(){
cursor=(0);
display.clearDisplay();
display.setFont(u8x8_font_amstrad_cpc_extended_f);
display.println(" Status");
for(int i=0;i<15;i++){
display.drawTile(i,1,1,plainhorizontaltiles);
}
display.setFont(u8x8_font_chroma48medium8_r); // Works but idk if i like it lol.. nvm its cute
cursor=(0,2);
for(int i=6;i<CALIBRATION_SIZE;i++){
display.drawString(1,i-4,calibration_menu[i]);
}
display.setCursor(0,6);
display.print('>');
}
//Calibration menu//
void showCalibrationMenu1(){
cursor=(0);
display.clearDisplay();
display.setFont(u8x8_font_amstrad_cpc_extended_f);
display.println(" Calibration");
for(int i=0;i<15;i++){
display.drawTile(i,1,1,plainhorizontaltiles);
}
display.setFont(u8x8_font_chroma48medium8_r); // Works but idk if i like it lol.. nvm its cute
cursor=(0,2);
for(int i=0;i<6;i++){
display.drawString(1,i+2,calibration_menu[i]);
}
for(int j=0;j<5;j++){
display.setCursor(11,j+2);
display.print(offset_values_menu[j]);
}
display.setCursor(0,cursor);
display.print('>');
}
void showCalibrationMenu2(){
cursor=(0);
display.clearDisplay();
display.setFont(u8x8_font_amstrad_cpc_extended_f);
display.println(" Calibration");
for(int i=0;i<15;i++){
display.drawTile(i,1,1,plainhorizontaltiles);
}
display.setFont(u8x8_font_chroma48medium8_r); // Works but idk if i like it lol.. nvm its cute
cursor=(0,2);
for(int i=6;i<CALIBRATION_SIZE;i++){
display.drawString(1,i-4,calibration_menu[i]);
}
for(int j=6;j<10;j++){
display.setCursor(11,j-4);
display.print(offset_values_menu[j]);
}
display.setCursor(0,cursor);
display.print('>');
}
//Brightness menu//
void showBrightnessMenu(){
cursor=(0);
display.clearDisplay();
display.setFont(u8x8_font_amstrad_cpc_extended_f);
display.println(" Brightness");
for(int i=0;i<15;i++){
display.drawTile(i,1,1,plainhorizontaltiles);
}
display.setFont(u8x8_font_chroma48medium8_r); // Works but idk if i like it lol.. nvm its cute
cursor=(2,3);
BrightnessBar();
display.drawString(2,4,data_menu[4]);
display.setCursor(0,3);
display.print('>');
}
//Brightness Bar//
void BrightnessBar(){
display.setCursor(1,0);
for(int i=2;i<14;i++){
display.drawTile(i,2,1,topline);
}
for(int i=0;i<4;i++){
display.drawTile(2+i*3,3,3,bottomline);
}
}
//Reset//
void(* resetEverything) (void) = 0; // [From OP from https://arduinogetstarted.com/faq/how-to-reset-arduino-by-programming] Declare reset fuction at address 0
//Data//
//Temperature 1//
char Temp1(){
//int Temperature1 = 25; //Input actual sensor reading here ,,, not FR
int Temperature1 = random(10,36);
display.setFont(u8x8_font_lucasarts_scumm_subtitle_o_2x2_n);
display.drawString(2,2," ");
display.setCursor(2,2);
display.print(Temperature1);
display.setFont(u8x8_font_chroma48medium8_r);
display.drawString(6,3,"C");
return char(Temperature1);
if(currentMillis - previousMillis == interval){
Serial.print("Reading #1 - ");
previousMillis = currentMillis;
}
else if(currentMillis - previousMillis == interval){
Serial.print("Reading #2 - ");
//Serial.print(" ");
Temp1();
previousMillis = currentMillis;
}
else if(currentMillis - previousMillis == interval){
Serial.print("Reading #3 - ");
//Serial.print(" ");
Temp1();
previousMillis = currentMillis;
}
else if(currentMillis - previousMillis == interval){
Serial.print("Reading #4 - ");
//Serial.print(" ");
Temp1();
previousMillis = currentMillis;
}
else if(currentMillis - previousMillis == interval){
Serial.print("Reading #5 - ");
//Serial.print(" ");
Temp1();
previousMillis = currentMillis;
}
}
//Humidity 1//
char Hum1(){
int Humidity1 = 65; //Input actual sensor reading here ,,, not FR
display.setFont(u8x8_font_lucasarts_scumm_subtitle_o_2x2_n);
display.drawString(2,5," ");
display.setCursor(2,5);
display.print(Humidity1);
display.setFont(u8x8_font_chroma48medium8_r);
display.drawString(6,6,"%");
return char(Humidity1);
}
//Temperature 2//
char Temp2(){
int Temperature2 = 25; //Input actual sensor reading here ,,, not FR
display.setFont(u8x8_font_lucasarts_scumm_subtitle_o_2x2_n);
display.drawString(9,2," ");
display.setCursor(9,2);
display.print(Temperature2);
display.setFont(u8x8_font_chroma48medium8_r);
display.drawString(13,3,"C");
return char(Temperature2);
}
//Humidity 2//
char Hum2(){
int Humidity2 = 65; //Input actual sensor reading here ,,, not FR
display.setFont(u8x8_font_lucasarts_scumm_subtitle_o_2x2_n);
display.drawString(9,5," ");
display.setCursor(9,5);
display.print(Humidity2);
display.setFont(u8x8_font_chroma48medium8_r);
display.drawString(13,6,"%");
return char(Humidity2);
}
//Particulate Matter//
//PM10//
char PM10(){
int PM_10 = 100; //Input actual sensor reading here ,,, not FR
display.setFont(u8x8_font_lucasarts_scumm_subtitle_o_2x2_n);
display.drawString(9,1," ");
display.setCursor(9,1);
display.print(PM_10);
return char(PM_10);
}
//PM2.5//
char PM2_5(){
int PM_2_5 = 102; //Input actual sensor reading here ,,, not FR
display.setFont(u8x8_font_lucasarts_scumm_subtitle_o_2x2_n);
display.drawString(1,2," ");
display.setCursor(1,2);
display.print(PM_2_5);
display.setFont(u8x8_font_chroma48medium8_r);
display.drawString(4,4,"ppm");
return char(PM_2_5);
}
//PM1.0//
char PM1_0(){
int PM_1_0 = 105; //Input actual sensor reading here ,,, not FR
display.setFont(u8x8_font_lucasarts_scumm_subtitle_o_2x2_n);
display.drawString(9,4," ");
display.setCursor(9,4);
display.print(PM_1_0);
return char(PM_1_0);
}
//CO2//
char CO2(){
int CO_2 = 250; //Input actual sensor reading here ,,, not FR
display.setFont(u8x8_font_lucasarts_scumm_subtitle_o_2x2_n);
display.drawString(6,1," ");
display.setCursor(6,1);
display.print(CO_2);
display.setFont(u8x8_font_chroma48medium8_r);
display.drawString(12,2,"ppm");
return char(CO_2);
}
//TVOC//
char TVOC(){
float totalVOC = 0.2; //Input actual sensor reading here ,,, not FR
display.setFont(u8x8_font_lucasarts_scumm_subtitle_o_2x2_n);
display.drawString(4,5," ");
display.setCursor(4,5);
display.print(totalVOC);
display.setFont(u8x8_font_chroma48medium8_r);
display.drawString(12,6,"ppb");
return char(totalVOC);
}
//Execute tasks on OLED//
void executeChoice(int choice){
switch(choice){
case 2 : //Data
display.clearDisplay();
display.setCursor(1,0);
showDataMenu();
while(choice==2){
PressDataMenuButtons();
}
break;
case 3 : //Settings
display.clearDisplay();
display.setCursor(1,0);
showSettingsMenu();
while(choice==3){
PressSettingsMenuButtons();
}
break;
case 4 : //Calibrate
display.clearDisplay();
display.setCursor(1,0);
showCalibrationMainMenu();
while(choice==4){
PressCalibrationMainMenuButtons();
}
break;
case 5 : //Sleep
display.setPowerSave(1);
while(choice==5){
PressSleepButtons();
}
break;
}
}
void executeDataChoice(int datachoice) {
switch(datachoice){
case 2 : //Temp&Hum
display.clearDisplay();
display.setCursor(0,0);
display.drawString(1,0,"INSIDE OUTSIDE");
for(int i=0;i<7;i++){
display.drawTile(7,i,1,verticaltiles);
}
//Topline
for(int i=0;i<7;i++){
display.drawTile(i,1,1,plainhorizontaltiles);
}
display.drawTile(7,1,1,perpendiculartiles);
for(int i=8;i<15;i++){
display.drawTile(i,1,1,plainhorizontaltiles);
}
//Divider
for(int i=0;i<7;i++){
display.drawTile(i,4,1,plainhorizontaltiles);
}
display.drawTile(7,4,1,perpendiculartiles);
for(int i=8;i<15;i++){
display.drawTile(i,4,1,plainhorizontaltiles);
}
// Put actual text here
//Inside
Temp1();
Hum1();
//Outside
Temp2();
Hum2();
cursor=(1,7);
display.drawString(3,7,data_menu[4]);
display.setCursor(1,7);
display.print('>');
while(datachoice==2){
BackToDataMenuButtons();
}
break;
case 3 : //PM10,2.5,&1.0
display.clearDisplay();
display.setCursor(1,0);
display.drawTile(0,0,1,plainhorizontaltiles);
display.drawString(1,0,"PM2.5");
display.drawTile(6,0,1,plainhorizontaltiles);
for(int i=0;i<6;i++){
display.drawTile(7,i,1,verticaltiles);
}
display.drawTile(7,0,1,perpendiculartiles);
display.drawTile(8,0,1,plainhorizontaltiles);
display.drawString(9,0,"PM10");
display.drawTile(13,0,1,plainhorizontaltiles);
display.drawTile(14,0,1,plainhorizontaltiles);
display.drawTile(7,3,1,halfperpendiculartiles);
display.drawTile(8,3,1,plainhorizontaltiles);
display.drawString(9,3,"PM1.0");
display.drawTile(14,3,1,plainhorizontaltiles);
for(int i=0;i<7;i++){
display.drawTile(i,6,1,plainhorizontaltiles);
}
display.drawTile(7,6,1,perpendiculartiles);
for(int i=8;i<15;i++){
display.drawTile(i,6,1,plainhorizontaltiles);
}
PM10();
PM1_0();
PM2_5();
// Put actual text here
cursor=(1,7);
display.drawString(3,7,data_menu[4]);
display.setCursor(1,7);
display.print('>');
while(datachoice==3){
BackToDataMenuButtons();
}
break;
case 4 : //CO2 & TVOC
display.clearDisplay();
display.setCursor(1,0);
/*
for(int i=0;i<7;i++){
display.drawTile(7,i,1,verticaltiles);
}
*/
for(int i=0;i<15;i++){
display.drawTile(i,3,1,plainhorizontaltiles);
}
display.drawString(1,0,"CO2");
display.drawString(1,4,"TVOC");
CO2();
TVOC();
// Put actual text here
cursor=(1,7);
display.drawString(3,7,data_menu[4]);
display.setCursor(1,7);
display.print('>');
while(datachoice==4){
BackToDataMenuButtons();
}
break;
case 5 : //ALL //Not FR (fucked up by the calibration)
display.clearDisplay();
display.setCursor(0,0);
showAllDataMenu1();
while(datachoice==5){
PressAllDataButtons1();
}
break;
case 6 : //Back to Menu
display.clearDisplay();
display.setCursor(1,0);
showMenu();
while(datachoice==6){
PressMenuButtons();
}
break;
}
}
void executeSettingsChoice(int settingschoice) {
switch(settingschoice){
case 2 : //Parameters
display.clearDisplay();
display.setCursor(0,3);
display.print("_____|_____");
display.setCursor(5,0);
display.print("|");
while(settingschoice==2){
PressMenuButtons();
}
break;
case 3 : //Wi-Fi
display.clearDisplay();
display.setCursor(1,0);
showSettingsMenu();
while(settingschoice==3){
PressSettingsMenuButtons();
}
break;
case 4 : //Brightness
display.clearDisplay();
display.setCursor(1,0);
showBrightnessMenu();
while(settingschoice==4){
PressBrightnessMenuButtons();
}
break;
case 5 : //Reset
resetEverything();
break;
case 6 : //Back to Menu
display.clearDisplay();
display.setCursor(1,0);
showMenu();
while(settingschoice==6){
PressMenuButtons();
}
break;
}
}
void executeCalibrationMainMenuChoice(int cmainmenuchoice) {
switch(cmainmenuchoice){
case 2 : //Calibration Status
display.clearDisplay();
display.setCursor(1,0);
showCalibrationStatus1();
while(cmainmenuchoice==2){
PressCalibrationStatusButtons1();
}
case 3 : //Manual Entry Calibration
display.clearDisplay();
display.setCursor(1,0);
showCalibrationMenu1();
while(cmainmenuchoice==3){
PressCalibrationMenuButtons1();
}
case 4 : //Back to Main Menu
display.clearDisplay();
display.setCursor(1,0);
showMenu();
while(cmainmenuchoice==4){
PressMenuButtons();
}
}
}
void executeCalibrationChoice(int calibrationchoice) {
switch(calibrationchoice){
case 2 : //TempIn
display.setCursor(1,0);
display.setCursor(0,calibrationchoice);
display.print('>');
display.setCursor(0,calibrationchoice); //
while(calibrationchoice==2){
PressOffsetButtons1();
}
break;
case 3 : //TempOut
display.setCursor(1,0);
display.setCursor(0,calibrationchoice);
display.print('>');
display.setCursor(0,calibrationchoice);
while(calibrationchoice==3){
PressOffsetButtons1();
}
break;
case 4 : //HumIn
display.setCursor(1,0);
display.setCursor(0,calibrationchoice);
display.print('>');
display.setCursor(0,calibrationchoice);
while(calibrationchoice==4){
PressOffsetButtons1();
}
break;
case 5 : //HumOut
display.setCursor(1,0);
display.setCursor(0,calibrationchoice);
display.print('>');
display.setCursor(0,calibrationchoice);
while(calibrationchoice==5){
PressOffsetButtons1();
}
break;
case 6 : //PM10
display.setCursor(1,0);
display.setCursor(0,calibrationchoice);
display.print('>');
display.setCursor(0,calibrationchoice);
while(calibrationchoice==6){
PressOffsetButtons1();
}
break;
case 7 : //Next Page
display.clearDisplay();
display.setCursor(1,0);
showCalibrationMenu2();
while(calibrationchoice==7){
PressCalibrationMenuButtons2();
}
break;
case 8 : //PM2.5
display.setCursor(1,0);
display.setCursor(0,calibrationchoice);
display.print('>');
display.setCursor(0,calibrationchoice);
while(calibrationchoice==8){
PressOffsetButtons2();
}
break;
case 9 : //PM1.0
display.setCursor(1,0);
display.setCursor(0,calibrationchoice);
display.print('>');
display.setCursor(0,calibrationchoice);
while(calibrationchoice==9){
PressOffsetButtons2();
}
break;
case 10 : //CO2
display.setCursor(1,0);
display.setCursor(0,calibrationchoice);
display.print('>');
display.setCursor(0,calibrationchoice);
while(calibrationchoice==10){
PressOffsetButtons2();
}
break;
case 11 : //TVOC
display.setCursor(1,0);
display.setCursor(0,calibrationchoice);
display.print('>');
display.setCursor(0,calibrationchoice);
while(calibrationchoice==11){
PressOffsetButtons2();
}
break;
case 12 : //Previous Page
display.clearDisplay();
display.setCursor(1,0);
showCalibrationMenu1();
while(calibrationchoice==12){
PressCalibrationMenuButtons1();
}
break;
case 13 : //Back to Menu
display.clearDisplay();
display.setCursor(1,0);
showMenu();
while(calibrationchoice==13){
PressMenuButtons();
}
break;
}
}
void executeBrightnessMenuChoice(int brightnessmenuchoice) {
switch(brightnessmenuchoice){
case 3 : //Brightness Box
display.setCursor(1,0);
showBrightnessMenu();
while(brightnessmenuchoice==3){
PressBrightnessButtons();
}
break;
case 4 : //Back to Menu
display.clearDisplay();
display.setCursor(1,0);
showMenu();
while(brightnessmenuchoice==4){
PressMenuButtons();
}
break;
}
}
void executeBrightnessChoice(int brightnesschoice) {
switch(brightnesschoice){
case 0 : // Brightness level 5 aka lowest
display.clearLine(3);
display.setCursor(0,3);
BrightnessBar();
display.setContrast(5);
while(brightnesschoice==0){
PressBrightnessButtons();
}
break;
case 1 : // Brightness level 54
display.clearLine(3);
BrightnessBar();
display.setCursor(3,3);
for (int i=2;i<5;i++){
display.drawTile(i,3,1,fullbox);
}
display.setContrast(54);
while(brightnesschoice==1){
PressBrightnessButtons();
}
break;
case 2 : // Brightness level 102
display.clearLine(3);
BrightnessBar();
display.setCursor(6,3);
for (int i=2;i<8;i++){
display.drawTile(i,3,1,fullbox);
}
display.setContrast(102);
while(brightnesschoice==2){
PressBrightnessButtons();
}
break;
case 3 : // Brightness level 151
display.clearLine(3);
BrightnessBar();
display.setCursor(9,3);
for (int i=2;i<11;i++){
display.drawTile(i,3,1,fullbox);
}
display.setContrast(151);
while(brightnesschoice==3){
PressBrightnessButtons();
}
break;
case 4 : // Brightness level 200 aka highest
display.clearLine(3);
BrightnessBar();
display.setCursor(12,3);
for (int i=2;i<14;i++){
display.drawTile(i,3,1,fullbox);
}
display.setContrast(200);
while(brightnesschoice==4){
PressBrightnessButtons();
}
break;
}
}
Loading
esp-01
esp-01