Hi guys,
I am trying to modify a "menu" creation code.
Original is here.
From the tutorial, I can increase SetTemp in page2 by a value of 1 by pressing two separate buttons.
But I would like to use a 3rd button to position the cursor and individually increment or decrement at a particular position.
For example:
12345
I reach cursor position at 1 and should be able to set 0 to 1 and . (decimal). Same for rest other digits positions.
Kindly suggest a way.
Thanks.
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH1106.h>
#include <Adafruit_PCD8544.h>
#define OLED_RESET 4
Adafruit_SH1106 display(OLED_RESET);
boolean backlight = true;
int setTemp=0;
int menuitem = 1;
int page = 1;
int pos = 0;
int cpos1 = 5;
int cpos2 = 25;
String output = "0123456789.";
//int myArray[] = {' ','0', '1', '2', '3', '4','5','6','7','8','9','.',' '};
volatile boolean up = false;
volatile boolean down = false;
volatile boolean middle = false;
int downButtonState = 0;
int upButtonState = 0;
int selectButtonState = 0;
int lastDownButtonState = 0;
int lastSelectButtonState = 0;
int lastUpButtonState = 0;
int buttonCursor = 0;
void setup() {
Serial.begin(9600);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
digitalWrite(9, HIGH);
//display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.begin(SH1106_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.display();
delay(3000);
}
void loop() {
display.display();
delay(100);
display.clearDisplay();
drawMenu();
downButtonState = digitalRead(6);
selectButtonState = digitalRead(7);
upButtonState = digitalRead(8);
buttonCursor = digitalRead(9);
checkIfDownButtonIsPressed();
checkIfUpButtonIsPressed();
checkIfSelectButtonIsPressed();
if (up && page == 1 ) {
up = false;
menuitem--;
if (menuitem==0)
{
menuitem=3;
}
}
if (page == 2 ) {
if (digitalRead(buttonCursor) == HIGH){
pos ++;
cpos1 ++;
if (digitalRead(upButtonState) == LOW)
{
output [pos] = (output [pos] ++);
display.clearDisplay();
display.print(output);
delay (400);
}
display.setCursor (cpos1, cpos2);
}
}
/*else if (up && page == 2 ) {
up = false;
display.cursor();
setTemp--;
//setContrast();
}*/
if (down && page == 1) {
down = false;
menuitem++;
if (menuitem==4)
{
menuitem=1;
}
}
/* else if (down && page == 2 ) {
down = false;
setTemp++;
//setContrast();
//display.setCursor(5, 25);
}*/
if (middle) {
middle = false;
if (page == 1 && menuitem==2)
{
if (backlight)
{
backlight = false;
//turnBacklightOff();
}
else
{
backlight = true;
//turnBacklightOn();
}
}
if(page == 1 && menuitem ==3)
{
//resetDefaults();
}
else if (page == 1 && menuitem==1) {
page=2;
}
else if (page == 2) {
page=1;
}
}
}
void checkIfDownButtonIsPressed()
{
if (downButtonState != lastDownButtonState)
{
if (downButtonState == 0)
{
down=true;
}
delay(10);
}
lastDownButtonState = downButtonState;
}
void checkIfUpButtonIsPressed()
{
if (upButtonState != lastUpButtonState)
{
if (upButtonState == 0) {
up=true;
}
delay(10);
}
lastUpButtonState = upButtonState;
}
void checkIfSelectButtonIsPressed()
{
if (selectButtonState != lastSelectButtonState)
{
if (selectButtonState == 0) {
middle=true;
}
delay(10);
}
lastSelectButtonState = selectButtonState;
}
void drawMenu()
{
if (page==1)
{
//display.display();
display.setTextSize(1);
display.clearDisplay();
display.setTextColor(BLACK, WHITE);
display.setCursor(15, 0);
display.print("ITP Labs");
display.drawFastHLine(0,10,83,BLACK);
display.setCursor(0, 15);
if (menuitem==1)
{
display.setTextColor(WHITE, BLACK);
}
else
{
display.setTextColor(BLACK, WHITE);
}
//display.display();
display.print(">Set Temp");
display.setCursor(0, 25);
if (menuitem==2)
{
display.setTextColor(WHITE, BLACK);
}
else
{
display.setTextColor(BLACK, WHITE);
}
//display.display();
display.print(">Light: ");
if (backlight)
{
//display.display();
display.print("ON");
}
else
{
//display.display();
display.print("OFF");
}
//display.display();
if (menuitem==3)
{
display.setTextColor(WHITE, BLACK);
}
else
{
display.setTextColor(BLACK, WHITE);
}
//display.display();
display.setCursor(0, 35);
display.print(">Reset");
display.display();
}
else if (page==2)
{
//display.display();
display.setTextSize(1);
display.clearDisplay();
display.setTextColor(BLACK, WHITE);
display.setCursor(15, 0);
display.print("setTemp");
display.drawFastHLine(0,10,83,BLACK);
display.setCursor(5, 15);
display.print("Value");
display.setTextSize(2);
display.setCursor(5, 25);
//display.print(setTemp);
display.setTextSize(2);
display.display();
}
}
/*
void resetDefaults()
{
setTemp = 50;
setContrast();
backlight = true;
turnBacklightOn();
}
/*void setContrast()
{
display.setContrast(setTemp);
display.display();
}*/
/* void turnBacklightOn()
{
digitalWrite(7,LOW);
}
void turnBacklightOff()
{
digitalWrite(7,HIGH);*/
// }*/
This the part of the code which probably needs correction:
if (page == 2 ) {
if (digitalRead(buttonCursor) == HIGH){
pos ++;
cpos1 ++;
if (digitalRead(upButtonState) == LOW)
{
output [pos] = (output [pos] ++);
display.clearDisplay();
display.print(output);
delay (400);
}
display.setCursor (cpos1, cpos2);
}
}