#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
int servoRotateTrue = 0;
Servo dispenserServo;
#define SERVO_PIN 19
#define SENSOR_PIN 34
#define BTN_MANUAL 32
void setup() {
Serial.begin(115200);
Serial.println("Hello, ESP32!");
pinMode(SENSOR_PIN, INPUT_PULLUP);
pinMode(BTN_MANUAL, INPUT_PULLUP);
dispenserServo.setPeriodHertz(50);
dispenserServo.attach(SERVO_PIN);
dispenserServo.write(0); // stop at startup (neutral for continuous servo)
}
void servoRotate() {
if (servoRotateTrue == 1) {
dispenserServo.attach(SERVO_PIN);
dispenserServo.write(120);
delay(50);
dispenserServo.write(90);
dispenserServo.detach(SERVO_PIN);
delay(1000);
}
}
void loop() {
servoRotate();
int manual = digitalRead(BTN_MANUAL);
int sensor = digitalRead(SENSOR_PIN);
// manual button pressed
if (manual == LOW) {
servoRotateTrue = 1;
Serial.println("MANUAL ROTATE");
}
// sensor triggered → stop immediately
if (sensor == LOW) {
servoRotateTrue = 0;
dispenserServo.write(90); // stop
Serial.println("STOP ROTATE");
}
}