#include <LiquidCrystal_I2C.h>
#include <GyverEncoder.h>
#define version "1.0."
#define buzz_pin 6
#define led_pin 5
#define period 350
#define hz 250
#define t1 100
#define t2 50
#define t3 50
LiquidCrystal_I2C lcd(0x27, 16, 2);
Encoder enc(2, 3, 4);
int counter1 = 0;
int counter2 = 0;
int counter3 = 0;
int counter4 = 0;
int counter5 = 0;
int counter6 = 0;
byte next_id = 0;
boolean config = 0;
boolean led_flag = 0;
boolean music = 1;
uint32_t timer1;
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
enc.setType(TYPE1);
enc.setTickMode(AUTO);
main_screen();
}
void loop() {
if(enc.isHolded()){
if(config == 0){
tone(buzz_pin, hz, t1);
configuration(counter1, counter2, counter3, counter4, counter5, counter6);
}
else if(config == 1){
tone(buzz_pin, hz, t1);
main_screen();
}
}
if(config == 0){
digitalWrite(led_pin, 1);
}
if(config == 1){
if(millis() - timer1 >= period){
timer1 = millis();
led_flag = !led_flag;
digitalWrite(led_pin, led_flag);
}
}
if(next_id == 6){
next_id = 0;
configuration(counter1, counter2, counter3, counter4, counter5, counter6);
}
if(enc.isRight() == 1 && config == 1){
switch(next_id){
case 0: counter1++;
tone(buzz_pin, hz, t2);
break;
case 1: counter2++;
tone(buzz_pin, hz, t2);
break;
case 2: counter3++;
tone(buzz_pin, hz, t2);
break;
case 3: counter4++;
tone(buzz_pin, hz, t2);
break;
case 4: counter5++;
tone(buzz_pin, hz, t2);
break;
case 5: counter6++;
tone(buzz_pin, hz, t2);
break;
}
configuration(counter1, counter2, counter3, counter4, counter5, counter6);
}
if(enc.isLeft() == 1 && config == 1){
switch(next_id){
case 0: counter1--;
break;
case 1: counter2--;
break;
case 2: counter3--;
break;
case 3: counter4--;
break;
case 4: counter5--;
break;
case 5: counter6--;
break;
}
configuration(counter1, counter2, counter3, counter4, counter5, counter6);
if(music){
tone(buzz_pin, hz, t3);
}
}
if(enc.isClick() == 1 && config == 1){
if(music){
tone(buzz_pin, hz, t1);
}
next_id++;
configuration(counter1, counter2, counter3, counter4, counter5, counter6);
}
}
void main_screen(){
config = 0;
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("ULTRAMIXER");
lcd.setCursor(4, 1);
lcd.print("ver ");
lcd.print(version);
}
void configuration(int c1, int c2, int c3, int c4, int c5, int c6){
config = 1;
switch(next_id){
case 0:
lcd.clear();
lcd.setCursor(1, 0);
lcd.print(c1);
lcd.setCursor(1, 1);
lcd.print(c2);
lcd.setCursor(7, 0);
lcd.print(c3);
lcd.setCursor(7, 1);
lcd.print(c4);
lcd.setCursor(13, 0);
lcd.print(c5);
lcd.setCursor(13, 1);
lcd.print(c6);
lcd.setCursor(0, 0);
lcd.print(">");
break;
case 1:
lcd.clear();
lcd.setCursor(1, 0);
lcd.print(c1);
lcd.setCursor(1, 1);
lcd.print(c2);
lcd.setCursor(7, 0);
lcd.print(c3);
lcd.setCursor(7, 1);
lcd.print(c4);
lcd.setCursor(13, 0);
lcd.print(c5);
lcd.setCursor(13, 1);
lcd.print(c6);
lcd.setCursor(0, 1);
lcd.print(">");
break;
case 2:
lcd.clear();
lcd.setCursor(1, 0);
lcd.print(c1);
lcd.setCursor(1, 1);
lcd.print(c2);
lcd.setCursor(7, 0);
lcd.print(c3);
lcd.setCursor(7, 1);
lcd.print(c4);
lcd.setCursor(13, 0);
lcd.print(c5);
lcd.setCursor(13, 1);
lcd.print(c6);
lcd.setCursor(6, 0);
lcd.print(">");
break;
case 3:
lcd.clear();
lcd.setCursor(1, 0);
lcd.print(c1);
lcd.setCursor(1, 1);
lcd.print(c2);
lcd.setCursor(7, 0);
lcd.print(c3);
lcd.setCursor(7, 1);
lcd.print(c4);
lcd.setCursor(13, 0);
lcd.print(c5);
lcd.setCursor(13, 1);
lcd.print(c6);
lcd.setCursor(6, 1);
lcd.print(">");
break;
case 4:
lcd.clear();
lcd.setCursor(1, 0);
lcd.print(c1);
lcd.setCursor(1, 1);
lcd.print(c2);
lcd.setCursor(7, 0);
lcd.print(c3);
lcd.setCursor(7, 1);
lcd.print(c4);
lcd.setCursor(13, 0);
lcd.print(c5);
lcd.setCursor(13, 1);
lcd.print(c6);
lcd.setCursor(12, 0);
lcd.print(">");
break;
case 5:
lcd.clear();
lcd.setCursor(1, 0);
lcd.print(c1);
lcd.setCursor(1, 1);
lcd.print(c2);
lcd.setCursor(7, 0);
lcd.print(c3);
lcd.setCursor(7, 1);
lcd.print(c4);
lcd.setCursor(13, 0);
lcd.print(c5);
lcd.setCursor(13, 1);
lcd.print(c6);
lcd.setCursor(12, 1);
lcd.print(">");
break;
}
}