Boa noite, tudo bem? Sou Thalia e preciso de uma ajudinha. Por favor.
Estou fazendo um varal automático via arduíno utilizando o sensor de chuva, ponte h e motor DC.
Coloquei um botão pulsante onde o o primeiro toque o motor deve girar 10 segundos e desativar ( saindo da área para o quintal). No segundo toque o motor deve girar no sentido inverso do primeiro toque por 10 segundos e parar (saíndo do quintal para área) no terceiro toque entra no automático o motor deve girar 10 segundos e parar no mesmo sentido do primeiro toque (indo para quintal). Mas ao detectar chuva o motor deve girar 10 segundos e desativar no mesmo sentido do segundo toque (voltando para área - detectado chuva), mas se parar de chover o motor deve ir para o quintal novamente.
O primeiro e segundo toque funcionou. No terceiro toque ele só vai os 10 segundos para ir no quintal, mas quando jogo água no sensor não detecta chuva e não faz girar o motor.
Meu código é esse…
Poderiam me ajudar, por favor. Desde já agradeço imensamente
#define motorPin1 2 // Pino 1 da ponte H
#define motorPin2 3 // Pino 2 da ponte H
#define sensorPin A0 // Pino analógico para o sensor de chuva
#define pushButtonPin 12 // Pino do botão
#define redLedPin 13 // Pino para o LED vermelho
#define greenLedPin 10 // Pino para o LED verde
#define blueLedPin 9 // Pino para o LED azul
bool motorAtivo = false; // Variável para controlar o estado do motor
bool automaticoAtivo = false; // Variável para controlar o modo automático
int numToques = 0; // Contador de toques no botão
unsigned long tempoInicioMotor = 0; // Variável para armazenar o tempo de início do motor
bool primeiroToque = false; // Variável para verificar se é o primeiro toque
void setup() {
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(sensorPin, INPUT);
pinMode(pushButtonPin, INPUT_PULLUP);
pinMode(redLedPin, OUTPUT);
pinMode(greenLedPin, OUTPUT);
pinMode(blueLedPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(sensorPin);
if (!automaticoAtivo) {
// Modo manual
if (digitalRead(pushButtonPin) == LOW) {
numToques++;
if (numToques == 1) {
// Primeiro toque: Liga o motor, gira por 10 segundos e desliga
motorLiga();
primeiroToque = true;
digitalWrite(redLedPin, HIGH);
digitalWrite(greenLedPin, LOW);
digitalWrite(blueLedPin, LOW);
delay(10000);
motorDesliga();
digitalWrite(redLedPin, LOW);
Serial.println(“Motor desligado após 10 segundos”);
} else if (numToques == 2) {
// Segundo toque: Liga o motor, gira por 10 segundos no sentido oposto ao primeiro toque e desliga
motorLiga();
primeiroToque = false;
digitalWrite(redLedPin, LOW);
digitalWrite(greenLedPin, HIGH);
digitalWrite(blueLedPin, LOW);
motorInverteSentido();
delay(10000);
motorDesliga();
digitalWrite(greenLedPin, LOW);
Serial.println(“Motor desligado após 10 segundos”);
} else if (numToques == 3) {
// Terceiro toque: Liga o motor, gira por 10 segundos no sentido do primeiro toque e desliga
motorLiga();
primeiroToque = true;
digitalWrite(redLedPin, LOW);
digitalWrite(greenLedPin, LOW);
digitalWrite(blueLedPin, HIGH);
delay(10000);
motorDesliga();
digitalWrite(blueLedPin, LOW);
Serial.println(“Motor desligado após 10 segundos”);
}
delay(250); // Debounce para evitar múltiplos acionamentos do botão
}
} else {
// Modo automático
if (sensorValue < 500) {
if (!motorAtivo) {
if (primeiroToque) {
motorInverteSentido(); // Inverte o sentido do motor se for o primeiro toque
}
motorLiga();
tempoInicioMotor = millis(); // Armazena o tempo de início do motor
Serial.println(“Motor ligado”);
}
// Gira o motor por 10 segundos
if (motorAtivo && millis() - tempoInicioMotor >= 10000) {
motorDesliga();
digitalWrite(greenLedPin, LOW);
Serial.println(“Motor desligado após 10 segundos”);
}
} else {
if (!motorAtivo) {
if (!primeiroToque) {
motorInverteSentido(); // Inverte o sentido do motor se não for o primeiro toque
}
motorLiga();
tempoInicioMotor = millis(); // Armazena o tempo de início do motor
Serial.println(“Motor ligado”);
}
// Gira o motor por 10 segundos
if (motorAtivo && millis() - tempoInicioMotor >= 10000) {
motorDesliga();
digitalWrite(redLedPin, LOW);
Serial.println(“Motor desligado após 10 segundos”);
}
}
}
delay(100); // Pequeno atraso para estabilidade do código
}
void motorLiga() {
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
motorAtivo = true;
}
void motorDesliga() {
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
motorAtivo = false;
}
void motorInverteSentido() {
digitalWrite(motorPin1, !digitalRead(motorPin1));
digitalWrite(motorPin2, !digitalRead(motorPin2));
}