#include <Servo.h>
Servo meuServo;
// Definição dos pinos
const int pinoServo = 7;
const int pinoSensor = 2; // Usando o pino 2 (bom se quiser usar interrupções no futuro)
// Variáveis de controle
int estadoSensorAtual; // Armazena o estado atual do sensor
int estadoSensorAnterior = HIGH; // Armazena o estado anterior (sensores IR comuns costumam ser HIGH quando não há nada)
int contadorObjetos = 0; // Contador de objetos detectados
int tempoPasso = 15; // Tempo em milissegundos para suavizar o movimento
void setup() {
Serial.begin(9600); // Inicia o monitor serial
meuServo.attach(pinoServo); // Conecta o servo
pinMode(pinoSensor, INPUT); // Configura o pino do sensor como entrada
meuServo.write(0); // Garante que o servo começa na posição 0
Serial.println("Sistema Iniciado! Aguardando objetos...");
}
void loop() {
// Lê o estado atual do sensor (LOW = Objeto detectado na maioria dos sensores IR reflexivos)
estadoSensorAtual = digitalRead(pinoSensor);
// Verifica se o estado mudou de "nada" para "objeto detectado"
if (estadoSensorAtual == LOW && estadoSensorAnterior == HIGH) {
contadorObjetos++; // Incrementa a contagem
// Mostra no monitor serial
Serial.print("Objeto detectado! Total: ");
Serial.println(contadorObjetos);
// Movimento SUAVE de IDA (0 para 180)
for (int pos = 0; pos <= 180; pos += 1) {
meuServo.write(pos);
delay(tempoPasso);
}
delay(1000); // Espera 1 segundo com ele aberto (opcional, ajuste como quiser)
// Movimento SUAVE de VOLTA (180 para 0)
for (int pos = 180; pos >= 0; pos -= 1) {
meuServo.write(pos);
delay(tempoPasso);
}
}
// Atualiza o estado anterior para a próxima leitura do loop
estadoSensorAnterior = estadoSensorAtual;
delay(50); // Pequena pausa para estabilizar as leituras do sensor
}