#include <AccelStepper.h>
#include <ESP32Servo.h>
// Definições do motor de passo
const int stepPin = 14;
const int dirPin = 12;
const int stepsPerRevolution = 200;
const int ledPin = 2;
// Definições do servo motor
Servo servo; // Corrigido para usar Servo ao invés de ESP32Servo
const int servoPin = 18;
// Definições dos botões
const int metalButtonPin = 16; // Botão que simula o sensor indutivo (metal)
const int objectButtonPin = 4; // Botão que simula o sensor infravermelho (objeto presente)
const int nivelButtonPin = 0; // Botão que simula o sensor infravermlho (nível)
// Definição do fim de curso
const int limitSwitchPin = 17;
bool isObjectPresent = false;
bool isMetal = false;
void setup() {
// Inicialização da comunicação serial
Serial.begin(115200);
// Configuração dos pinos dos botões
pinMode(metalButtonPin, INPUT_PULLUP);
pinMode(objectButtonPin, INPUT_PULLUP);
pinMode(nivelButtonPin, INPUT_PULLUP);
// Configuração do pino do fim de curso
pinMode(limitSwitchPin, INPUT_PULLUP);
// Configuração dos pinos do driver do motor de passo
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
pinMode(ledPin, OUTPUT);
// Inicialização do servo motor
servo.attach(servoPin, 500, 2400); // Attach the servo with a range of 500-2400 microseconds
}
void loop() {
// Leitura dos botões
isMetal = digitalRead(metalButtonPin) == LOW; // LOW significa que o botão foi pressionado
isObjectPresent = digitalRead(objectButtonPin) == LOW; // LOW significa que o botão foi pressionado
Serial.print("Metal: ");
Serial.println(digitalRead(objectButtonPin));
delay(10);
}
void teste(){
// Verificação se ambos botões estão pressionados
if (isMetal == 1) {
// Gira o motor de passo 180 graus
rotateStepper(stepsPerRevolution / 2, true); // Rotaciona no sentido horário
// Gira o servo motor 180 graus
servo.write(180);
delay(1000); // Aguarda 1 segundo para completar a rotação
// Aguarda 30 segundos
delay(30000);
// Retorna o servo motor para 0 graus
servo.write(0);
delay(1000); // Aguarda 1 segundo para completar a rotação
// Retorna o motor de passo para a posição inicial
while (digitalRead(limitSwitchPin) == HIGH) {
rotateStepper(1, false); // Rotaciona no sentido anti-horário até encontrar o fim de curso
}
}
// Leitura do botão e controle do LED
int stbutao = digitalRead(objectButtonPin);
if (stbutao == LOW) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
delay(100);
}
void rotateStepper(int steps, bool clockwise) {
digitalWrite(dirPin, clockwise ? HIGH : LOW);
for (int i = 0; i < steps; i++) {
digitalWrite(stepPin, HIGH);
delayMicroseconds(500);
digitalWrite(stepPin, LOW);
delayMicroseconds(500);
}
}