#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <Stepper.h>
const int stepsPerRevolution = 200;
Stepper myStepper(stepsPerRevolution, 12, 13, 14, 27);
const int buttonPin = 15;
const int reverseButtonPin = 16;
const int potPin = 34;
int buttonState = 0;
int reverseButtonState = 0;
int lastButtonState = 0;
int lastReverseButtonState = 0;
bool motorMoving = false;
bool isReversing = false;
const int maxSteps = 30;
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
pinMode(buttonPin, INPUT);
pinMode(reverseButtonPin, INPUT);
Serial.begin(9600);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.display();
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Excrusor");
display.print("Ver: 1.0");
display.setTextSize(1);
display.setCursor(0, 20);
display.println("Prog: AJ Garcia");
display.setCursor(0, 30);
display.println("Accesor: JP Machado");
display.println("Iniciando...");
display.display();
delay(7000);
lastButtonState = digitalRead(buttonPin);
lastReverseButtonState = digitalRead(reverseButtonPin);
}
void loop() {
buttonState = digitalRead(buttonPin);
reverseButtonState = digitalRead(reverseButtonPin);
if (buttonState == HIGH && lastButtonState == LOW) {
int potValue = analogRead(potPin);
int stepsToMove = map(potValue, 0, 4095, 1, maxSteps);
stepsToMove = max(stepsToMove, 1);
myStepper.step(stepsToMove);
motorMoving = true;
isReversing = false;
delay(200);
}
if (reverseButtonState == HIGH && lastReverseButtonState == LOW) {
int potValue = analogRead(potPin);
int stepsToMove = map(potValue, 0, 4095, 1, maxSteps);
stepsToMove = max(stepsToMove, 1);
myStepper.step(-stepsToMove);
motorMoving = true;
isReversing = true;
delay(200);
}
if (buttonState == LOW && reverseButtonState == LOW) {
motorMoving = false;
isReversing = false;
}
lastButtonState = buttonState;
lastReverseButtonState = reverseButtonState;
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("Valor Pot: ");
display.println(analogRead(potPin));
display.setCursor(0, 10);
display.print("volumen ml: ");
display.println(map(analogRead(potPin), 0, 4095, 1, maxSteps));
display.setCursor(0, 20);
if (motorMoving) {
if (isReversing) {
display.println("Motor: Reversa");
} else {
display.println("Motor: Avance");
}
} else {
display.println("Dispositivo: Detenido");
}
display.setCursor(0, 30);
display.print("Velocidad: ");
display.print(map(analogRead(potPin), 0, 4095, 1, maxSteps));
display.println(" ml/pas");
display.setCursor(0, 40);
if (isReversing) {
display.println("EMBOLO <-REGRESANDO");
}
display.setCursor(0, 50);
if (!isReversing && motorMoving) {
display.println("ENBOLO ->DISPENSANDO");
}
display.display();
delay(100);
}