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.?