#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 2
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);
uint8_t band_button[10] = {2,3,4,5,6,7,8,9,10,11};
uint8_t mem_button = 12;
uint8_t inc_button = 43;
uint8_t dec_button = 42;
uint8_t band_led[10] = {22,23,24,25,26,27,28,29,30,31};
uint8_t relay[8] = {32,33,34,35,36,37,38,39};
uint8_t relay_value = 0;
uint8_t band_value = 0;
uint8_t band_relay_value[10];
bool inc_flag = true;
bool dec_flag = true;
bool mem_flag = true;
void setup() {
// put your setup code here, to run once:
for (uint8_t i = 0; i<10; i++) {
pinMode(band_button[i], INPUT_PULLUP);
pinMode(band_led[i], OUTPUT);
band_relay_value[i] = 0;
}
for (uint8_t i = 0; i<8; i++) {
pinMode(relay[i], OUTPUT);
}
pinMode(mem_button, INPUT_PULLUP);
pinMode(inc_button, INPUT_PULLUP);
pinMode(dec_button, INPUT_PULLUP);
digitalWrite(band_led[band_value], HIGH);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print(relay_value);
}
void loop() {
// put your main code here, to run repeatedly:
for (uint8_t i=0; i<10; i++){
if (digitalRead(band_button[i]) == 0) {
band_value = i;
show_band_value();
}
}
if (digitalRead(inc_button) == 0) {
if (relay_value < 127) {
relay_value++;
set_relays();
}
}
if (digitalRead(dec_button) == 0){
if (relay_value > 0) {
relay_value--;
set_relays();
}
}
if (digitalRead(mem_button) == 0) {
band_relay_value[band_value] = relay_value;
}
lcd.setCursor(0, 0);
lcd.print(relay_value);
delay(200);
}
void show_band_value() {
for (uint8_t i=0; i<10; i++){
digitalWrite(band_led[i], LOW);
}
digitalWrite(band_led[band_value], HIGH);
relay_value = band_relay_value[band_value];
set_relays();
}
void set_relays() {
uint8_t mult;
for (uint8_t i=0; i<8; i++) {
mult = 1 << i;
if ((relay_value & mult) != 0) {
digitalWrite(relay[i], HIGH);
} else {
digitalWrite(relay[i], LOW);
}
}
}