#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Stepper.h>

const int stepsPerRevolution = 50;
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C umumnya 0x27 untuk modul LCD 16x2
const int buttonPin1 = 2; // Pin tombol 1
const int buttonPin2 = 3; // Pin tombol 2
int buttonState1 = 0; // Status tombol 1
int buttonState2 = 0; // Status tombol 2
int speed = 60; // Kecepatan awal motor
bool button2Pressed = false; // Menyimpan status tombol 2

void setup() {
  myStepper.setSpeed(speed); // Set kecepatan awal motor

  // Inisialisasi LCD
  lcd.init();
  lcd.backlight();
  lcd.setCursor(2, 0);
  lcd.print("Viper Mobil");

  // Inisialisasi pin tombol
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
}

void loop() {
  buttonState1 = digitalRead(buttonPin1);
  buttonState2 = digitalRead(buttonPin2);

  if (buttonState1 == HIGH) {
    lcd.setCursor(0, 1);
    lcd.print("Viper ON  ");
    
    // Mengatur kecepatan motor ke nilai tetap
    myStepper.setSpeed(speed);
    
    // Langsung berputar satu langkah searah segera saat tombol 1 ditekan
    myStepper.step(stepsPerRevolution);
    delay(100);
    
    // Berputar satu langkah sebaliknya setelah delay
    myStepper.step(-stepsPerRevolution);
    delay(100);
  } else {
    lcd.setCursor(0, 1);
    lcd.print("Viper OFF ");
  }

  if (buttonState2 == HIGH && !button2Pressed) {
    // Menambah kecepatan saat tombol 2 ditekan
    speed += 50;
    if (speed > 200) {
      speed = 200; // Batasi kecepatan maksimum jika diperlukan
    }
    button2Pressed = true; // Tombol 2 telah ditekan
  } else if (buttonState2 == LOW) {
    button2Pressed = false; // Tombol 2 dilepas
  }

  // Tampilkan nilai kecepatan pada LCD
  lcd.setCursor(12, 1); // Posisi untuk menampilkan nilai kecepatan
  lcd.print(speed); // Menampilkan nilai kecepatan
}