#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Konfigurasi pin Motor
const int buttonPin = 2; // Pin untuk tombol
const int P = 3; // Pin untuk tombol
const int pulsePin = 9; // Pin untuk sinyal step
const int enable = 10; // Pin untuk sinyal arah
const int sensorOut = 4;
const int S0 = 5;
const int S1 = 6;
const int S2 = 7;
const int S3 = 8;
// Inisialisasi LCD (ganti 0x27 dengan alamat I2C LCD Anda)
LiquidCrystal_I2C lcd(0x27, 16, 2);
int sensorState = 0;
// Variabel Tombol
bool motorRunning = false; // Status motor (ON/OFF)
bool lastButtonState = LOW;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
pinMode(P, INPUT);// Gunakan INPUT_PULLUP untuk tombol
pinMode(pulsePin, OUTPUT); // Pin untuk sinyal step
pinMode(enable, OUTPUT); // Pin untuk arah
digitalWrite(pulsePin, LOW);
Serial.begin(9600); // Untuk debugging
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(sensorOut, INPUT);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Sensor Warna");
delay(2000);
lcd.clear();
// Atur skala frekuensi ke 20% untuk TCS3200
digitalWrite(S0, HIGH);
digitalWrite(S1, LOW);
Serial.begin(9600);
}
void loop() {
// Baca status tombol
bool buttonState = digitalRead(buttonPin);
// Deteksi perubahan tombol
if (buttonState == HIGH && lastButtonState == LOW) {
delay(50); // Debouncing
if (digitalRead(buttonPin) == HIGH) {
digitalWrite(enable,LOW);
motorRunning = !motorRunning; // Toggle status motor
Serial.print("Motor Running: ");
Serial.println(motorRunning ? "ON" : "OFF");
}
}
lastButtonState = buttonState;
// Mengirim sinyal pulse jika motor aktif
if (motorRunning) {
digitalWrite(pulsePin, HIGH);
delayMicroseconds(2000); // Durasi HIGH (sesuaikan untuk kecepatan motor)
digitalWrite(pulsePin, LOW);
delayMicroseconds(2000); // Durasi LOW
}
sensorState = digitalRead(P);
if (sensorState == HIGH) {
digitalWrite(enable,LOW);
}
else {
digitalWrite(enable,HIGH);
}
}