Multiple loop function with OLED display

I designed this code for Running multiple codes OLED display and three buttons.

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
int page = 5;
boolean up = false;
boolean down = false;
boolean middle = false;
int downButtonState = 0;
int upButtonState = 0;
int selectButtonState = 0;
int lastDownButtonState = 0;
int lastSelectButtonState = 0;
int lastUpButtonState = 0;

void setup() {
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);
  }
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(13, OUTPUT);
  pinMode(4, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(2, INPUT_PULLUP);
  display.clearDisplay();
}

void loop() {
  downButtonState = digitalRead(2);
  selectButtonState = digitalRead(3);
  upButtonState =   digitalRead(4);

  checkIfDownButtonIsPressed();
  checkIfUpButtonIsPressed();
  checkIfSelectButtonIsPressed();
  Home();
  if (middle) {
    if (page == 5 && middle) {
      middle = false;
      page = 1;
      onesecond();
    }
  }
  if (up) {
    if (page == 1 && up) {
      up = false;
      page = 2;
      twosecond();
    }
    if (page == 2 && up) {
      up = false;
      page = 3;
      fivesecond();
    }
    if (page == 3 && up) {
      up = false;
      page = 4;
      tensecond();
    }
    if (page == 4 && up) {
      up = false;
      page = 1;
      onesecond();
    }
  }
  if (down) {
    
    if (page == 4 && down){
      down = false;
      page = 3;
      fivesecond();
      }
      if (page == 3 && down){
      down = false;
      page = 2;
      twosecond();
      }
      if (page = 2 && down){
      down = false;
      page = 1;
      onesecond();
      }
      if (page == 1 && down){
      down = false;
      page = 4;
      tensecond();
      }
  }

}

void onesecond() {
  if (page == 1) {
    display.clearDisplay();
    display.setTextSize(2);
    display.setTextColor(WHITE);
    display.setCursor(3, 7);
    display.print("One Second delay");
    pinMode(8, HIGH);
    delay(1000);
    pinMode(8, LOW);
  }
}


void twosecond() {
  if (page == 2) {
    display.clearDisplay();
    display.setTextSize(2);
    display.setTextColor(WHITE);
    display.setCursor(3, 7);
    display.print("Two Second delay");
    display.display();
    pinMode(9, HIGH);
    delay(2000);
    pinMode(9, LOW);
    pinMode(9, HIGH);
    delay(2000);
    pinMode(9, LOW);
  }
}
void fivesecond() {
  if (page == 3) {
    display.clearDisplay();
    display.setTextSize(2);
    display.setTextColor(WHITE);
    display.setCursor(3, 7);
    display.print("Five Second delay");
    display.display();
    pinMode(10, HIGH);
    delay(5000);
    pinMode(10, LOW);
    pinMode(10, HIGH);
    delay(5000);
    pinMode(10, LOW);
  }
}
void tensecond() {
  if (page == 4) {
    display.clearDisplay();
    display.setTextSize(2);
    display.setTextColor(WHITE);
    display.setCursor(3, 7);
    display.print("ten Second delay");
    display.display();
    pinMode(13, HIGH);
    delay(5000);
    pinMode(13, LOW);
    pinMode(13, HIGH);
    delay(5000);
    pinMode(13, LOW);
  }
}
void Home() {
  if (page == 5) {
    display.clearDisplay();
    display.setTextSize(2);
    display.setTextColor(WHITE);
    display.setCursor(3, 7);
    display.print("WELCOME");
    display.display();
  }
}
void checkIfDownButtonIsPressed()
{
  if (downButtonState != lastDownButtonState)
  {
    if (downButtonState == 0)
    {
      down = true;
    }
    delay(50);
  }
  lastDownButtonState = downButtonState;
}
void checkIfUpButtonIsPressed()
{
  if (upButtonState != lastUpButtonState)
  {
    if (upButtonState == 0) {
      up = true;
    }
    delay(50);
  }
  lastUpButtonState = upButtonState;
}

void checkIfSelectButtonIsPressed()
{
  if (selectButtonState != lastSelectButtonState)
  {
    if (selectButtonState == 0) {
      middle = true;
    }
    delay(50);
  }
  lastSelectButtonState = selectButtonState;
}

I can jump between pages but I cant ran function again and again. I want run these functions again and again when I on the current page. How can I fix it?
In other words, I expect to connect several sensors to the Arduino at the same time and read the sensor data separately on each page as I switch between pages, coding as above.
Then only the first case was read (first page. because it should be call in void loop section. other functions call when moving between OLED pages) and then the data was not displayed continuously. It seems like void Setup section.
I want to read new data again and again (like void Loop) as long as I've on that page on the screen. How can I do this.?

I can't really tell from the comments what the code is supposed to do, but I'm guessing the delays aren't helping.

I used this sketch for get temperature and humidity to my OLED.

#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <dht.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

int page = 1;

boolean up = false;
boolean down = false;
boolean middle = false;

int downButtonState = 0;
int upButtonState = 0;
int selectButtonState = 0;

int lastDownButtonState = 0;
int lastSelectButtonState = 0;
int lastUpButtonState = 0;

dht rum;
int val;

void setup() {
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);
  }
  pinMode(4, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(2, INPUT_PULLUP);

  display.clearDisplay();
  Serial.begin(9600);
}

void loop() {
  val = rum.read11(10);
  Home();

  downButtonState = digitalRead(2);
  selectButtonState = digitalRead(3);
  upButtonState =   digitalRead(4);

  checkIfDownButtonIsPressed();
  checkIfUpButtonIsPressed();
  checkIfSelectButtonIsPressed();

  if (middle == true) {
    if (page == 1 && middle) {
      middle = false;
      page = 2;
      Temp();
    }
  }

  if (up == true) {
    if (page == 2 && up) {
      up = false;
      page = 3;
      Humi();
    }
    if (page == 3 && up) {
      up = false;
      page = 2;
      Temp();
    }


  }
  if (down == true) {
    if (page == 3 && down) {
      down = false;
      page = 2;
      Temp();
    }
    if (page = 2 && down) {
      down = false;
      page = 3;
      Humi();
    }
  }
}

void checkIfDownButtonIsPressed()
{
  if (downButtonState != lastDownButtonState)
  {
    if (downButtonState == 0)
    {
      down = true;
    }
    delay(50);
  }
  lastDownButtonState = downButtonState;
}


void checkIfUpButtonIsPressed()
{
  if (upButtonState != lastUpButtonState)
  {
    if (upButtonState == 0) {
      up = true;
    }
    delay(50);
  }
  lastUpButtonState = upButtonState;
}


void checkIfSelectButtonIsPressed()
{
  if (selectButtonState != lastSelectButtonState)
  {
    if (selectButtonState == 0) {
      middle = true;
    }
    delay(50);
  }
  lastSelectButtonState = selectButtonState;
}


void Home() {
  if (page == 1) {
    display.clearDisplay();
    display.setTextSize(2);
    display.setTextColor(WHITE);
    display.setCursor(3, 7);
    display.print("Welcome");
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.display();

  }
}


void Temp() {
  if (page == 2) {
    display.clearDisplay();
    delay(1500);
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.setCursor(3, 7);
    display.print("Temperature :");
    Serial.println(rum.temperature);
    display.setTextSize(2);
    display.setTextColor(WHITE);
    display.setCursor(5, 26);
    display.println(rum.temperature);
    display.display();
  }
}
void Humi() {
  if (page == 3) {
    display.clearDisplay();
    delay(1500);
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.setCursor(3, 7);
    display.print("Humidity");
    Serial.println(rum.humidity);
    display.setTextSize(2);
    display.setTextColor(WHITE);
    display.setCursor(5, 26);
    display.println(rum.humidity);
    display.display();
  }
}

I developed it using push buttons and OLED pages. It can jump between temperature and humidity pages. The case is it was executed only first time. I want to make it run continually. that means when I was in temperature page it should be show temperature readings continually whole time and humidity page also same.

I tried several times but couldn't make it. So guys, have you any comments for make me it possible???

Topics merged

They look like the same problem expressed 2 ways

Yes same problem. If there is a way to fix it, please put it.
Thank you.

The way to fix it, I would suggest, is to fundamentally restructure your code.
That way, the delays all go.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.