Hola, tengo algunas dudas respecto a mi código, ya que presenta problemas al momento de cargar el código.
Mi proyecto se trata de una cortina automática que funciona por luz que absorbe el sensor LDR (o no), y activa el motor (enrolla y despliega la cortina), tienen unos limitadores (pulsadores PULLDOWN) que esta en los extremos de la cortina, y esto permite que el motor se detenga cuando la cortina active los pulsadores (PULL UP).
Mi problema recae al momento de agregar mas líneas de código ya que quiero agregar un sensor DHT11 y una pantalla lcd I2c de 2x16.
Al cargar el programa con el sensor y la pantalla, el motor comienza a girar de manera lenta y a vibrar de forma extraña, no logro encontrar una solución a este problema.
estoy usando:
DRV8825
nema 17 1,5A
arduino uno
DHT11
Lcd I2c
sensor LDR
2 pulsadores NA
Mi codigo:
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <DHT.h>
#define LdrPin A0
#define boton1 A1
#define boton2 A2
#define dirPin 2
#define stepPin 3
#define Type DHT11
LiquidCrystal_I2C lcd(0x27, 16, 2);
int dhtPin = A3;
DHT HT(dhtPin,Type);
int humidity;
int tempC;
float tempf;
int limit1 ;
int limit2;
int valLdr = 0;
int hasstopped = 0;
void moveUP(){
hasstopped = 0;
digitalWrite(dirPin, HIGH);//establece la direccion del giro en el sentido de las agujas del reloj
//estas cuatro lineas dan como resultado 1 paso
digitalWrite(stepPin, HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin, LOW);
delayMicroseconds(1000);
}
void moveDOWN(){
hasstopped = 0;
digitalWrite(dirPin, LOW);//establece la direccion de giro en sentido contrario a las agujas del reloj
digitalWrite(stepPin, HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin, LOW);
delayMicroseconds(1000);
}
void moveSTOP(){
if(hasstopped == 0){
hasstopped = 1;
digitalWrite(stepPin, LOW);
delayMicroseconds(0);
digitalWrite(stepPin,LOW);
delayMicroseconds(1000);
}
}
void setup() {
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
lcd.init();
lcd.clear();
lcd.backlight();
HT.begin();
}
void loop() {
valLdr = analogRead(LdrPin);
limit1 = analogRead(boton1);
limit2 = analogRead(boton2);
if(limit1 == LOW){
if (valLdr > 400){
int motorSpeed = map(valLdr,0,700,200,1000);// Convierte los valores de lectura del LDR de 0 a 400 en los valores de retardo deseados (200 a 1000)
if (motorSpeed > 0) {
moveUP();// Establecer la dirección de giro en el sentido de las agujas del reloj
// Serial.println(valLdr);
}
}
}
else if ( limit1 == HIGH ){
moveSTOP();
}
if(limit2 == LOW){
if(valLdr < 400){
int motorSpeed = map(valLdr, 0, 1000, 200, 1000);
if(motorSpeed > 0){
moveDOWN();
}
}
}
else if(limit2 == HIGH){
moveSTOP();
}
// Yo creo que estas líneas de código causa el problema
humidity = HT.readHumidity();
tempC = HT.readTemperature();
lcd.setCursor(0,0);
lcd.print("Humed.");
lcd.setCursor(1,1);
lcd.print(humidity);
lcd.print("%");
lcd.setCursor(7,0);
lcd.print("||");
lcd.setCursor(7,1);
lcd.print("||");
lcd.setCursor(10,0);
lcd.print("Tempe.");
lcd.setCursor(11,1);
lcd.print(tempC);
lcd.print((char)223);
lcd.print("C");
}
Espero me ayuden a solucionar el problema gracias.
