#define STEP_PIN 21
#define DIR_PIN 26
#define CONV_FWD 14
#define CONV_REV 12
#define HOME_SW 35
long stepsPerBin = 50; // small for simulation
long currentPos = 0;
void setup() {
Serial.begin(115200);
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
pinMode(CONV_FWD, OUTPUT);
pinMode(CONV_REV, OUTPUT);
pinMode(HOME_SW, INPUT_PULLUP);
Serial.println("VLM READY - Enter Bin (1-20)");
}
void loop() {
if (Serial.available()) {
int bin = Serial.parseInt();
if (bin >= 1 && bin <= 20) {
moveToBin(bin);
deliverBin();
Serial.println("Send R to Return");
while (true) {
if (Serial.available()) {
char c = Serial.read();
if (c == 'R' || c == 'r') {
returnBin();
break;
}
}
}
}
}
}
void moveToBin(int bin) {
long target = bin * stepsPerBin;
long moveSteps = target - currentPos;
digitalWrite(DIR_PIN, moveSteps > 0 ? HIGH : LOW);
moveSteps = abs(moveSteps);
for (long i = 0; i < moveSteps; i++) {
stepMotor();
}
currentPos = target;
Serial.print("At Bin ");
Serial.println(bin);
}
void deliverBin() {
digitalWrite(CONV_FWD, HIGH);
delay(2000);
digitalWrite(CONV_FWD, LOW);
}
void returnBin() {
digitalWrite(CONV_REV, HIGH);
delay(2000);
digitalWrite(CONV_REV, LOW);
}
void stepMotor() {
digitalWrite(STEP_PIN, HIGH);
delay(5);
digitalWrite(STEP_PIN, LOW);
delay(5);
}
Loading
esp32-s2-devkitm-1
esp32-s2-devkitm-1