0% found this document useful (0 votes)
14 views5 pages

111

The document is an Arduino code that controls a robotic system using a LiquidCrystal display and a DHT sensor for temperature and humidity readings. It includes motor control for movement in various directions, a buzzer for sound alerts, and functionality for displaying sensor data on an LCD. The code also handles user input via serial commands to manage the robot's operations and intermitentes (turn signals).
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14 views5 pages

111

The document is an Arduino code that controls a robotic system using a LiquidCrystal display and a DHT sensor for temperature and humidity readings. It includes motor control for movement in various directions, a buzzer for sound alerts, and functionality for displaying sensor data on an LCD. The code also handles user input via serial commands to manage the robot's operations and intermitentes (turn signals).
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

#include <LiquidCrystal_I2C.

h>
#include <Wire.h>
#include <DHT.h>

LiquidCrystal_I2C lcd(0x20, 16, 2);


DHT dht(8, DHT11);

const int Motor1A = 5;


const int Motor1B = 6;
const int Motor2A = 9;
const int Motor2B = 10;
const int Buzzer = 7;
const int Delante = 12;
const int Atras = 11;

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 mostrarLCD(const char* linea1, const char* linea2) {


lcd.clear();
lcd.setCursor(0, 0);
lcd.print(linea1);
lcd.setCursor(0, 1);
lcd.print(linea2);
}

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();

mostrarLCD(" ", "Pausa");


}

void loop() {
unsigned long currentMillis = millis();

if (currentMillis - previousMillisDHT >= intervalDHT) {


previousMillisDHT = currentMillis;
actualizarHumedad();
actualizarTemperatura();
}

if (currentMillis - previousMillisLCD >= intervalLCD) {


previousMillisLCD = currentMillis;
lcd.setCursor(0, 0);
lcd.print("H: ");
lcd.print(hA, 2);
lcd.print("% T: ");
lcd.print(T, 2);
lcd.print("C");
}

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;
}
}
}

You might also like