111
111
h>
#include <Wire.h>
#include <DHT.h>
float hA = 0, T = 0;
int flag1 = -1;
int flag2 = -1;
bool intermitentes = false;
unsigned long previousMillisDHT = 0;
unsigned long intervalDHT = 2000;
unsigned long previousMillisLCD = 0;
unsigned long intervalLCD = 1000;
unsigned long previousMillisIntermitentes = 0;
unsigned long intervalIntermitentes = 500;
void detenerMotores() {
digitalWrite(Motor1A, LOW);
digitalWrite(Motor1B, LOW);
digitalWrite(Motor2A, LOW);
digitalWrite(Motor2B, LOW);
}
void actualizarHumedad() {
hA = dht.readHumidity();
}
void actualizarTemperatura() {
T = dht.readTemperature();
}
void manejarIntermitentes() {
if (intermitentes) {
unsigned long currentMillis = millis();
if (currentMillis - previousMillisIntermitentes >= intervalIntermitentes) {
previousMillisIntermitentes = currentMillis;
digitalWrite(Delante, !digitalRead(Delante));
digitalWrite(Atras, !digitalRead(Atras));
}
}
}
void setup() {
Serial.begin(9600);
pinMode(Motor1A, OUTPUT);
pinMode(Motor1B, OUTPUT);
pinMode(Motor2A, OUTPUT);
pinMode(Motor2B, OUTPUT);
pinMode(Buzzer, OUTPUT);
pinMode(Delante, OUTPUT);
pinMode(Atras, OUTPUT);
lcd.init();
lcd.backlight();
lcd.clear();
dht.begin();
void loop() {
unsigned long currentMillis = millis();
manejarIntermitentes();
if (Serial.available() > 0) {
char toSend = (char)Serial.read();
switch (toSend) {
case 'S':
flag1 = 0;
flag2 = 0;
detenerMotores();
mostrarLCD(" ", "Pausa");
delay(10);
break;
case 'F':
if (flag1 != 1) {
flag1 = 1;
digitalWrite(Motor1A, HIGH);
digitalWrite(Motor1B, LOW);
digitalWrite(Motor2A, HIGH);
digitalWrite(Motor2B, LOW);
mostrarLCD(" ", "Adelante");
delay(10);
}
break;
case 'B':
if (flag1 != 2) {
flag1 = 2;
digitalWrite(Motor1A, LOW);
digitalWrite(Motor1B, HIGH);
digitalWrite(Motor2A, LOW);
digitalWrite(Motor2B, HIGH);
mostrarLCD(" ", "Atras");
delay(10);
}
break;
case 'L':
if (flag2 != 1) {
flag2 = 1;
digitalWrite(Motor1A, LOW);
digitalWrite(Motor1B, HIGH);
digitalWrite(Motor2A, HIGH);
digitalWrite(Motor2B, LOW);
mostrarLCD(" ", "Izquierda");
delay(10);
}
break;
case 'R':
if (flag2 != 2) {
flag2 = 2;
digitalWrite(Motor1A, HIGH);
digitalWrite(Motor1B, LOW);
digitalWrite(Motor2A, LOW);
digitalWrite(Motor2B, HIGH);
mostrarLCD(" ", "Derecha");
delay(10);
}
break;
case 'G':
if (flag1 != 1 || flag2 != 1) {
flag1 = 1;
flag2 = 1;
digitalWrite(Motor1A, HIGH);
digitalWrite(Motor1B, LOW);
digitalWrite(Motor2A, LOW);
digitalWrite(Motor2B, HIGH);
mostrarLCD(" ", "Adelante Izq");
delay(10);
}
break;
case 'I':
if (flag1 != 1 || flag2 != 2) {
flag1 = 1;
flag2 = 2;
digitalWrite(Motor1A, HIGH);
digitalWrite(Motor1B, LOW);
digitalWrite(Motor2A, HIGH);
digitalWrite(Motor2B, LOW);
mostrarLCD(" ", "Adelante Der");
delay(10);
}
break;
case 'H':
if (flag1 != 2 || flag2 != 1) {
flag1 = 2;
flag2 = 1;
digitalWrite(Motor1A, LOW);
digitalWrite(Motor1B, HIGH);
digitalWrite(Motor2A, LOW);
digitalWrite(Motor2B, HIGH);
mostrarLCD(" ", "Atras Izq");
delay(10);
}
break;
case 'J':
if (flag1 != 2 || flag2 != 2) {
flag1 = 2;
flag2 = 2;
digitalWrite(Motor1A, LOW);
digitalWrite(Motor1B, HIGH);
digitalWrite(Motor2A, HIGH);
digitalWrite(Motor2B, LOW);
mostrarLCD(" ", "Atras Der");
delay(10);
}
break;
case 'V':
digitalWrite(Buzzer, HIGH);
break;
case 'v':
digitalWrite(Buzzer, LOW);
break;
case 'W':
digitalWrite(Delante, HIGH);
break;
case 'w':
digitalWrite(Delante, LOW);
break;
case 'U':
digitalWrite(Atras, HIGH);
break;
case 'u':
digitalWrite(Atras, LOW);
break;
case 'X':
intermitentes = true;
break;
case 'x':
intermitentes = false;
digitalWrite(Delante, LOW);
digitalWrite(Atras, LOW);
break;
default:
detenerMotores();
break;
}
}
}