/*
Nama : Maulana Agus Setiawan
NIM : 2209106024
Soal : 3
*/
const int BUTTON_UP_PIN = 5;
const int BUTTON_DOWN_PIN = 6;
const int POT_PIN = 4;
const int MOTOR_PIN = 1;
const int PWM_FREQUENCY = 5000;
const int PWM_RESOLUTION = 8;
int currentSpeed = 0;
int speedLimit = 255;
int lastButtonUpPressTime = 0;
int lastButtonDownPressTime = 0;
int currentTime = 0;
const int debounceDelay = 200;
void setup() {
// Inisialisasi Serial Monitor
Serial.begin(115200);
pinMode(BUTTON_UP_PIN, INPUT_PULLUP);
pinMode(BUTTON_DOWN_PIN, INPUT_PULLUP);
pinMode(POT_PIN, INPUT);
ledcAttach(MOTOR_PIN, PWM_FREQUENCY, PWM_RESOLUTION);
}
void loop() {
speedLimit = map(analogRead(POT_PIN), 0, 4095, 0, 255);
if (digitalRead(BUTTON_UP_PIN) == LOW) {
currentTime = millis();
if (currentTime - lastButtonUpPressTime > debounceDelay) {
currentSpeed += 5;
if (currentSpeed > speedLimit) currentSpeed = speedLimit;
lastButtonUpPressTime = currentTime;
}
}
if (digitalRead(BUTTON_DOWN_PIN) == LOW) {
currentTime = millis();
if (currentTime - lastButtonDownPressTime > debounceDelay) {
currentSpeed -= 5;
if (currentSpeed < 0) currentSpeed = 0;
lastButtonDownPressTime = currentTime;
}
}
ledcWrite(MOTOR_PIN, currentSpeed);
int simulatedRPM = map(currentSpeed, 0, 255, 0, 1000);
Serial.print("Batas Kecepatan: ");
Serial.print(speedLimit);
Serial.print("\tKecepatan: ");
Serial.print(currentSpeed);
Serial.print("\tRPM Simulasi: ");
Serial.println(simulatedRPM);
delay(100);
}