#include <Servo.h>
#include <LiquidCrystal_I2C.h>

const int BUTTON_PIN1 = 10;
const int BUTTON_PIN2 = 13;
const int BUTTON_PIN3 = 11;
const int BUTTON_PIN4 = 12;
const int BUTTON_PIN5 = 9;
LiquidCrystal_I2C s(0x27, 16, 2);
Servo m;

int lastButtonState1; 
int lastButtonState2; 
int lastButtonState3; 
int lastButtonState4; 
int lastButtonState5; 

int currentButtonState1;
int currentButtonState2;
int currentButtonState3;
int currentButtonState4;
int currentButtonState5;

int led1 = 7;
int led2 = 6;
int led3 = 5;
int led4 = 4;

void setup() {
  // put your setup code here, to run once:
  pinMode(BUTTON_PIN1, INPUT_PULLUP);
  pinMode(BUTTON_PIN2, INPUT_PULLUP);
  pinMode(BUTTON_PIN3, INPUT_PULLUP);
  pinMode(BUTTON_PIN4, INPUT_PULLUP);
  pinMode(BUTTON_PIN5, INPUT_PULLUP);

  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);

  s.begin(16, 2);
  m.attach(3);
  m.write(0);
  s.setCursor(0, 0);
  s.print("Mode  : Off");
  s.setCursor(0, 1);
  s.print("Angle : 0");
  currentButtonState1 = digitalRead(BUTTON_PIN1);
  currentButtonState2 = digitalRead(BUTTON_PIN2);
  currentButtonState3 = digitalRead(BUTTON_PIN3);
  currentButtonState4 = digitalRead(BUTTON_PIN4);
  currentButtonState5 = digitalRead(BUTTON_PIN5);
}

void loop() {
  // put your main code here, to run repeatedly:
  lastButtonState1    = currentButtonState1;
  currentButtonState1 = digitalRead(BUTTON_PIN1);

  lastButtonState2    = currentButtonState2;
  currentButtonState2 = digitalRead(BUTTON_PIN2);

  lastButtonState3    = currentButtonState3;
  currentButtonState3 = digitalRead(BUTTON_PIN3);

  lastButtonState4    = currentButtonState4;
  currentButtonState4 = digitalRead(BUTTON_PIN4);

  lastButtonState5    = currentButtonState5;
  currentButtonState5 = digitalRead(BUTTON_PIN5);

  if(lastButtonState1 == HIGH && currentButtonState1 == LOW) 
  {
      s.backlight();
      s.clear();
      digitalWrite(led1, HIGH);
      digitalWrite(led2, LOW);
      digitalWrite(led3, LOW);
      digitalWrite(led4, LOW);
      m.write(0);
      s.setCursor(0, 0);
      s.print("Mode  : 1");
      s.setCursor(0, 1);
      s.print("Angle : 0");
  }
  if(lastButtonState2 == HIGH && currentButtonState2 == LOW) 
  {
      s.backlight();
      s.clear();
      digitalWrite(led1, LOW);
      digitalWrite(led2, HIGH);
      digitalWrite(led3, LOW);
      digitalWrite(led4, LOW);
      m.write(60);
      s.setCursor(0, 0);
      s.print("Mode  : 2");
      s.setCursor(0, 1);
      s.print("Angle : 60");
  }
  if(lastButtonState3 == HIGH && currentButtonState3 == LOW) 
  {
      s.backlight();
      s.clear();
      digitalWrite(led1, LOW);
      digitalWrite(led2, LOW);
      digitalWrite(led3, HIGH);
      digitalWrite(led4, LOW);
      m.write(120);
      s.setCursor(0, 0);
      s.print("Mode  : 3");
      s.setCursor(0, 1);
      s.print("Angle : 120");
  }
  if(lastButtonState4 == HIGH && currentButtonState4 == LOW) 
  {
      s.backlight();
      s.clear();
      digitalWrite(led1, LOW);
      digitalWrite(led2, LOW);
      digitalWrite(led3, LOW);
      digitalWrite(led4, HIGH);
      m.write(180);
      s.setCursor(0, 0);
      s.print("Mode  : 4");
      s.setCursor(0, 1);
      s.print("Angle : 180");
  }
  if(lastButtonState5 == HIGH && currentButtonState5 == LOW) 
  { 
      digitalWrite(led1, LOW);
      digitalWrite(led2, LOW);
      digitalWrite(led3, LOW);
      digitalWrite(led4, LOW);
      s.clear();
      s.noBacklight();
      s.setCursor(0, 0);
      s.print("Mode  : Off");
      s.setCursor(0, 1);
      s.print("Angle : 0");
      m.write(0);
  }
  
}