#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define pinLed1 12
#define pinLed2 11
#define pinLed3 10
#define pinLed4 9
#define pinButton1 8
#define pinButton2 7
#define pinClock 6
#define pinData 5
#define pinLatch 4
#define pinClockLed 3
#define pinDataLed 2
#define pinLatchLed 13
//Set alamat I2C dan ukuran LCD
LiquidCrystal_I2C lcd(0x27,16,2);
//variabel bilangan bulat
uint8_t dataButton1 = 0;
uint8_t dataButton2 = 0;
uint8_t k1 = 0;
uint8_t k2 = 0;
uint8_t menu = 0;
uint8_t counter = 0; //uint (unsigned integer) 0 -255
int8_t counter2 = 0; //
uint8_t dataDummy = 0; //int (interger) -127 - 127
uint8_t logicButton2 = 0;
//variabel array
uint8_t arraySegment[10] = {
0b00000011, //0
0b10011111, //1
0b00100101, //2
0b00001101, //3
0b10011001, //4
0b01001001, //5
0b01000001, //6
0b00011111, //7
0b00000001, //8
0b00001001 //9
};
int8_t counterDwn = 0;
int8_t counterUp = 0;
int8_t runningKr = 0;
int8_t runningKn = 0;
void setup(){
pinMode(pinLed1, OUTPUT);
pinMode(pinLed2, OUTPUT);
pinMode(pinLed3, OUTPUT);
pinMode(pinLed4, OUTPUT);
pinMode(pinButton1, INPUT);
pinMode(pinButton2, INPUT);
pinMode(pinClock, OUTPUT);
pinMode(pinData, OUTPUT);
pinMode(pinLatch, OUTPUT);
pinMode(pinClockLed, OUTPUT);
pinMode(pinDataLed, OUTPUT);
pinMode(pinLatchLed, OUTPUT);
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("SMKN 39 JAKARTA");
lcd.setCursor(0,1);
lcd.print(" ELECTRONICS ");
delay(3000);
lcd.clear();
}
void loop(){
dataButton1 = digitalRead(pinButton1);
dataButton2 = digitalRead(pinButton2);
//button 1
if(dataButton1 == 1 && k1 == 0){
k1 = 1;
};
if(dataButton1 == 0 && k1 == 1){
menu++;
if(menu > 4){
menu = 1;
}
k1 =0;
};
//button 2
if(dataButton2 == 0 && k2 == 0){
k2 = 1;
};
if(dataButton2 == 1 && k2 == 1){
logicButton2 = 1;
k2 =0;
};
switch(menu){
case 1:
menu1();
break;
case 2:
menu2();
break;
case 3:
menu3();
break;
case 4:
menu4();
break;
default:
lcd.setCursor(0,0);
lcd.print("Tekan Button 1 ");
lcd.setCursor(0,1);
lcd.print("Untuk Pilih Menu");
break;
};
}
void shiftRegSeg(uint8_t dataSeg){
for(uint8_t i=0; i<8; i++){
digitalWrite(pinData, (arraySegment[dataSeg] >> i)&1);
digitalWrite(pinClock, 0);
digitalWrite(pinClock, 1);
}
digitalWrite(pinLatch, 0);
digitalWrite(pinLatch, 1);
}
void shiftRegLed(uint8_t dataLed){
for(uint8_t i=0; i<8; i++){
digitalWrite(pinDataLed, ((1 << (8 - dataLed)) >> i)&1);
digitalWrite(pinClockLed, 0);
digitalWrite(pinClockLed, 1);
}
digitalWrite(pinLatchLed, 0);
digitalWrite(pinLatchLed, 1);
}
void menu1(){
lcd.setCursor(0,0);
lcd.print("Menu Selector : ");
lcd.setCursor(0,1);
lcd.print("Menu - 1 ");
while(logicButton2 == 1){
lcd.setCursor(0,0);
lcd.print("Menu - 1 ");
lcd.setCursor(0,1);
lcd.print("Running LED Kn ");
digitalWrite(pinLed1, 1);
runningKn++;
if(runningKn > 8){
runningKn = 1;
};
shiftRegLed(runningKn);
shiftRegSeg(runningKn);
delay(500);
};
}
void menu2(){
lcd.setCursor(0,0);
lcd.print("Menu Selector : ");
lcd.setCursor(0,1);
lcd.print("Menu - 2 ");
while(logicButton2 == 1){
lcd.setCursor(0,0);
lcd.print("Menu - 2 ");
lcd.setCursor(0,1);
lcd.print("Running LED Kr ");
digitalWrite(pinLed2, 1);
runningKr--;
if(runningKr < 1){
runningKr = 8;
};
shiftRegLed(runningKr);
shiftRegSeg(runningKr);
delay(500);
};
}
void menu3(){
lcd.setCursor(0,0);
lcd.print("Menu Selector : ");
lcd.setCursor(0,1);
lcd.print("Menu - 3 ");
while(logicButton2 == 1){
lcd.setCursor(0,0);
lcd.print("Menu - 3 ");
lcd.setCursor(0,1);
lcd.print("Counter UP : ");
dataButton1 = digitalRead(pinButton1);
digitalWrite(pinLed3, 1);
if(dataButton1 == 1 && k1 == 0){
k1 = 1;
};
if(dataButton1 == 0 && k1 == 1){
counterUp++;
if(counterUp > 8){
counterUp = 0;
};
k1 =0;
};
lcd.setCursor(13,1);
lcd.print(counterUp);
shiftRegLed(counterUp);
shiftRegSeg(counterUp);
};
}
void menu4(){
lcd.setCursor(0,0);
lcd.print("Menu Selector : ");
lcd.setCursor(0,1);
lcd.print("Menu - 4 ");
while(logicButton2 == 1){
lcd.setCursor(0,0);
lcd.print("Menu - 4 ");
lcd.setCursor(0,1);
lcd.print("Counter Dwn : ");
dataButton1 = digitalRead(pinButton1);
digitalWrite(pinLed4, 1);
if(dataButton1 == 1 && k1 == 0){
k1 = 1;
};
if(dataButton1 == 0 && k1 == 1){
counterDwn--;
if(counterDwn < 1){
counterDwn = 8;
};
k1 =0;
};
lcd.setCursor(14,1);
lcd.print(counterDwn);
shiftRegLed(counterDwn);
shiftRegSeg(counterDwn);
};
}