#include <Encoder.h>
#include <LiquidCrystal_I2C.h>
// Define pins for the encoder
#define PIN_ROTARY_CLK 2 // Used for generating interrupts using CLK signal
#define PIN_ROTARY_DAT 3 // Used for reading DT signal
#define PIN_ROTARY_SW 4
Encoder knob(PIN_ROTARY_CLK, PIN_ROTARY_DAT);
bool rotary_click = false;
// Define LCD address and dimensions
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Menu variables
int currentMenuItem = 0;
String menuItems[] = {"Continuous Flow", "Volume Flow"};
const int numMenuItems = sizeof(menuItems) / sizeof(menuItems[0]);
long previousPosition = 0; // Store previous encoder position
void printMenu() {
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Set Function");
lcd.setCursor(0,1);
lcd.print(menuItems[currentMenuItem]);
}
void setup() {
lcd.init();
lcd.backlight();
printMenu();
pinMode(PIN_ROTARY_SW, INPUT);
Serial.begin(9600);
}
void loop() {
int newPosition = knob.read()/4; //change the number according to the step of the encoder
if (newPosition != previousPosition)
{
previousPosition = newPosition;
if (currentMenuItem < numMenuItems)
{
currentMenuItem = currentMenuItem + 1;
if (currentMenuItem == numMenuItems)
currentMenuItem = 0;
}
printMenu();
// Update previous position
}
bool rotary_click = digitalRead(PIN_ROTARY_SW);
Serial.println(rotary_click);
// (Optional) Check for button presses to select menu items
// if (digitalRead(4) == LOW) {
// Handle menu item selection logic here
// }
}