//library
#include <LiquidCrystal_I2C.h>
//Rotary Encoder
#define SW 2
#define CLK 3
#define DT 4
//LED RGB
#define R 9
#define G 10
#define B 11
//LCD
LiquidCrystal_I2C lcd(0x27,16,2);
int gantiMenu=0;
int mode=0;
int setDelay=1000;
int Rv=0;
int Bv=0;
int Gv=0;
boolean lastCLK=HIGH;
void openMenu()
{
gantiMenu=gantiMenu+1;
if (gantiMenu==3)
{
gantiMenu=0;
}
}
void setup() {
//Rotary Encoder
pinMode(SW, INPUT_PULLUP);
pinMode(CLK, INPUT);
pinMode(DT, INPUT);
//LCD
lcd.init ();
lcd.setBacklight(HIGH);
//interupt
attachInterrupt(digitalPinToInterrupt(SW), openMenu, FALLING);
}
void loop() {
switch (gantiMenu)
{
case 0: menuUtama(); break;
case 1: menuMode(); break;
case 2: menuDelay(); break;
default: break;
}
switch (mode)
{
case 0: mode1(); break;
case 1: mode2(); break;
case 2: mode3(); break;
default: break;
}
}
//menu**********************************************************
void menuUtama()
{
lcd.setCursor(1,0);
lcd.print("mode :");
lcd.print(mode);
lcd.setCursor(1,1);
lcd.print("delay :");
lcd.print(setDelay);
}
void menuMode()
{
int newCLK=digitalRead(CLK);
if (newCLK != lastCLK) {
lastCLK = newCLK;
int dtValue = digitalRead(DT);
if (newCLK == LOW && dtValue == HIGH) {
mode=mode+1;
if (mode>2)
{
mode=2;
}
}
if (newCLK == LOW && dtValue == LOW) {
mode=mode-1;
if (mode<0)
{
mode=0;
}
}
}
lcd.setCursor(0,0);
lcd.print(">mode :");
lcd.print(mode);
lcd.setCursor(1,1);
lcd.print("delay :");
lcd.print(setDelay);
}
void menuDelay()
{
lcd.setCursor(1,0);
lcd.print("mode :");
lcd.print(mode);
lcd.setCursor(1,1);
lcd.print("delay :");
lcd.print(setDelay);
}
//mode**********************************************************
void mode1()
{
analogWrite(R,255);
analogWrite(G,0);
analogWrite(B,0);
delay(setDelay);
analogWrite(R,0);
analogWrite(G,255);
analogWrite(B,0);
delay(setDelay);
analogWrite(R,0);
analogWrite(G,0);
analogWrite(B,255);
delay(setDelay);
}
void mode2()
{
analogWrite(R,255);
analogWrite(G,255);
analogWrite(B,0);
delay(setDelay);
analogWrite(R,0);
analogWrite(G,255);
analogWrite(B,255);
delay(setDelay);
analogWrite(R,255);
analogWrite(G,0);
analogWrite(B,255);
delay(setDelay);
}
void mode3()
{
analogWrite(R,Rv);
analogWrite(G,Gv);
analogWrite(B,Bv);
}