#include "Wire.h"
#include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C LCD(0x27, 16, 2);
#include "RotaryEncoder.h"
RotaryEncoder encoder(4, 5); // DT, CLK
#define STEPS 6
#define POSMIN 0
#define POSMAX 12
int lastPos, newPos;
boolean buttonWasUp = true;
void setup() {
LCD.init();
LCD.backlight();
pinMode(9, OUTPUT); // LED blue
pinMode(10, OUTPUT); // LED green
pinMode(11, OUTPUT); // LED red
pinMode(2, INPUT_PULLUP); // SW
Serial.begin(9600);
encoder.setPosition(10 / STEPS);
}
void loop() {
LCD.setCursor(0, 0);
LCD.print("LED1 LED2 LED3");
encoder.tick();
newPos = encoder.getPosition() * STEPS;
if (newPos < POSMIN) {
encoder.setPosition(POSMIN / STEPS);
newPos = POSMIN;
}
else if (newPos > POSMAX) {
encoder.setPosition(POSMAX / STEPS);
newPos = POSMAX;
}
if (lastPos != newPos) {
Serial.println(newPos);
LCD.setCursor(lastPos, 1);
LCD.print(" ");
LCD.setCursor(newPos, 1);
LCD.print("====");
lastPos = newPos;
}
boolean buttonIsUp = digitalRead(2);
if (buttonWasUp && !buttonIsUp) {
delay(10);
buttonIsUp = digitalRead(2);
if (!buttonIsUp && newPos == 0) {
digitalWrite(9,HIGH); digitalWrite(10,LOW); digitalWrite(11,LOW);
}
if (!buttonIsUp && newPos == 6) {
digitalWrite(9,LOW); digitalWrite(10,HIGH); digitalWrite(11,LOW);
}
if (!buttonIsUp && newPos == 12) {
digitalWrite(9,LOW); digitalWrite(10,LOW); digitalWrite(11,HIGH);
}
}
}