Hi every one
thanks for help ![]()
i have a problem with my arduino code
i am using ..
Esp32 wroom board
lcd 2004
rotary encoder
all i want to do is to make them works together correctly .
my code ![]()
#pragma once
#include <Arduino.h>
#include <LcdMenu.h>
#include <MenuItem.h>
#include <ItemList.h>
#include <ItemInput.h>
#include <ItemToggle.h>
#include <ItemSubMenu.h>
#include <ItemCommand.h>
#include <ItemProgress.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneButton.h>
#include <ESP32Encoder.h>
#define LCD_ROWS 4
#define LCD_COLS 20
// Rotary Encoder Inputs
#define CLK 34
#define DT 39
#define SW 36
void inputCallback(char* value);
// For ItemToggle
void toggleBacklight(uint8_t isOn);
// For ItemCommand
void myCallbackFunction();
extern MenuItem* settingsMenu[];
extern MenuItem* mmMenu[];
/*
#define CHARSET_SIZE 10
// Create your charset
char charset[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
// Active index of the charset
uint8_t charsetPosition;
*/
MAIN_MENU(
ITEM_BASIC("Start service"),
ITEM_BASIC("Connect to WiFi"),
ITEM_SUBMENU("Settings >", settingsMenu),
ITEM_INPUT("Connect", inputCallback)
//ITEM_COMMAND("front", myCallbackFunction)
//ITEM_TOGGLE("Backlight", myCallbackFunction)
);
SUB_MENU(settingsMenu, mainMenu,
ITEM_TOGGLE("Backlight", "ON", "OFF", toggleBacklight),
ITEM_BASIC("Contrast"),
ITEM_BASIC("Contrast2"),
ITEM_SUBMENU("Contrast3", mmMenu),
ITEM_BASIC("Contrast4"),
ITEM_BASIC("Contrast5"),
ITEM_BASIC("Contrast6")
);
SUB_MENU(mmMenu, settingsMenu,
ITEM_BASIC("lilo"),
ITEM_BASIC("toff"),
ITEM_BASIC("all")
);
LcdMenu menu(LCD_ROWS, LCD_COLS);
LiquidCrystal_I2C lcd(0x3F, 20, 4);
ESP32Encoder encoder;
OneButton button(SW, true);
unsigned long pressStartTime;
int lastcount;
static unsigned long lastButtonPress = 0;
static unsigned long lastMenuTime = 0;
const long interval = 10000;
int Tab = 0;
//*************************************
void checkTicks() {
button.tick();
}
void singleClick() {
Serial.println("singleClick() detected.");
menu.enter();
if (menu.isInEditMode()){
Serial.println("It is Edit Mode");
}
//menu.backspace();
//menu.type(charset[charsetPosition]);
lastMenuTime = millis();
}
void doubleClick() {
Serial.println("doubleClick() detected.");
menu.back();
lastMenuTime = millis();
}
void multiClick() {
int n = button.getNumberClicks();
if (n == 3) {
menu.right();
Serial.println("tripleClick detected.");
lastMenuTime = millis();
} else if (n == 4) {
menu.left();
Serial.println("quadrupleClick detected.");
lastMenuTime = millis();
} else {
Serial.print("multiClick(");
Serial.print(n);
Serial.println(") detected.");
lastMenuTime = millis();
}
}
void pressStart() {
Serial.println("pressStart()");
menu.setupLcdWithMenu(0x3F, mainMenu);
pressStartTime = millis() - 1000;
lastMenuTime = millis();
}
void pressStop() {
Serial.print("pressStop(");
Serial.print(millis() - pressStartTime);
Serial.println(") detected.");
lastMenuTime = millis();
}
//*************************************
void setup() {
Serial.begin(115200);
//Encoder & Button
pinMode(SW, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(SW), checkTicks, CHANGE);
button.attachClick(singleClick);
button.attachDoubleClick(doubleClick);
button.attachMultiClick(multiClick);
button.setPressMs(1000);
button.attachLongPressStart(pressStart);
button.attachLongPressStop(pressStop);
encoder.attachHalfQuad(CLK, DT);
lastcount = encoder.getCount();
//Menu
//charsetPosition = 0;
//LCD Screen
lcd.begin();
lcd.backlight();
}
void loop() {
button.tick();
if (encoder.getCount() != lastcount) {
if (encoder.getCount() > lastcount) {
menu.down();
lastMenuTime = millis();
lastcount = encoder.getCount();
/*
if (menu.isInEditMode()) // Update the position only in edit mode
charsetPosition = constrain(charsetPosition - 1, 0, CHARSET_SIZE);
menu.drawChar(charset[charsetPosition]);
*/
} else {
menu.up();
lastMenuTime = millis();
lastcount = encoder.getCount();
/*
if (menu.isInEditMode()) // Update the position only in edit mode
charsetPosition = (charsetPosition + 1) % CHARSET_SIZE;
menu.drawChar(charset[charsetPosition]);
*/
}
}
int btnState = digitalRead(SW);
if (btnState == HIGH && millis() - lastMenuTime >= interval) {
lcd.clear();
}
}
void inputCallback(char* value) {
Serial.print(F("# "));
Serial.println(value);
}
void toggleBacklight(uint8_t isOn) {
menu.setBacklight(isOn);
}
i am using ( Thomas Forntoh Lcd menu + Esp32Encoder + Onebutton libraries ).
most of things working well , but input or command or toggle with lcd menu callback function not working at all .


