duda de programación estare hacer?

Hola buenos días y feliz año. tengo el siguiente problema uní 2 códigos que por separados, funcionan bien, el problema es que cuando los uní y compilo el código funciona bien por 5 segundos, luego se activa por si solo y se clava relay 1 y 2, y no se pueden desclavar, no se si se puede llamar el relay y Bluetooth y el con reloj de manera simultanea, lo estoy haciendo de un pin de salida.

etiquete todo el código y la conexión física por separado funciona bien.

Espero que me entiendan estoy a su diposicion.

codigo 1

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); //Pin10 RX , Pin 11 TX connected to--> Bluetooth TX,RX

#define relay1 2 // FUNCIONA CON Bluetooth ANDA PERFECTAMENTE
#define relay2 3 // FUNCIONA CON Bluetooth ANDA PERFECTAMENTE
#define relay3 4 // FUNCIONA CON Bluetooth ANDA PERFECTAMENTE
#define relay4 5 // FUNCIONA CON Bluetooth ANDA PERFECTAMENTE

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd (0x27, 16, 2);// si no te sale con esta direccion puedes usar (0x3f,16,2)||(0x20,16,2)
#include "Sodaq_DS3231.h"
char DiaSemana[][4] = {"Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab"};
// La linea fija la fecha, hora y dia de la semana, se debe suprimir la linea en la segunda carga
// Ejemplo 2018 noviembre 11, 08:00:00 dia 6-Sabado (0=Dom, 1=Lun, 2=Mar, 3=Mie, 4=Jue, 5=Vie, 6=Sab)
// DateTime dt(2018, 11, 14, 22, 12, 0, 3);

char val;
void setup() {
pinMode(relay1,OUTPUT); // FUNCIONA CON Bluetooth ANDA PERFECTAMENTE
pinMode(relay2,OUTPUT); // FUNCIONA CON Bluetooth ANDA PERFECTAMENTE
pinMode(relay3,OUTPUT); // FUNCIONA CON Bluetooth ANDA PERFECTAMENTE
pinMode(relay4,OUTPUT); // FUNCIONA CON Bluetooth ANDA PERFECTAMENTE
digitalWrite(relay1,HIGH); // FUNCIONA CON Bluetooth ANDA PERFECTAMENTE
digitalWrite(relay2,HIGH); // FUNCIONA CON Bluetooth ANDA PERFECTAMENTE
digitalWrite(relay3,HIGH); // FUNCIONA CON Bluetooth ANDA PERFECTAMENTE
digitalWrite(relay4,HIGH); // FUNCIONA CON Bluetooth ANDA PERFECTAMENTE
mySerial.begin(9600);
Serial.begin(9600);

rtc.begin();
Wire.begin();
lcd.init();
lcd.backlight();
lcd.setCursor (0,0);
lcd.print ("carlos");
delay(2000);
lcd.clear();
// La linea fija la fecha, hora y dia de la semana, se debe suprimir la linea en la segunda carga
// rtc.setDateTime(dt);
}

}

void loop() {
//cek data serial from bluetooth android App
if( mySerial.available() >0 ) {
val = mySerial.read();
Serial.println(val);
}
//Relay is on
if( val == '1' ) {
digitalWrite(relay1,LOW); }
else if( val == '2' ) {
digitalWrite(relay2,LOW); }
else if( val == '3' ) {
digitalWrite(relay3,LOW); }
else if( val == '4' ) {
digitalWrite(relay4,LOW); }
//relay all on
else if( val == '9' ) {
digitalWrite(relay1,LOW);
digitalWrite(relay2,LOW);
digitalWrite(relay3,LOW);
digitalWrite(relay4,LOW);
}
//relay is off
else if( val == 'A' ) {
digitalWrite(relay1,HIGH); }
else if( val == 'B' ) {
digitalWrite(relay2,HIGH); }
else if( val == 'C' ) {
digitalWrite(relay3,HIGH); }
else if( val == 'D' ) {
digitalWrite(relay4,HIGH); }
//relay all off
else if( val == 'I' ) {
digitalWrite(relay1,HIGH);
digitalWrite(relay2,HIGH);
digitalWrite(relay3,HIGH);
digitalWrite(relay4,HIGH);
}

DateTime now = rtc.now();
lcd.setCursor(0,0);
lcd.print(DiaSemana[now.dayOfWeek()]);
lcd.print(' ');
lcd.print(now.date(), DEC);
lcd.print('/');
lcd.print(now.month(), DEC);
lcd.print('/');
lcd.print(now.year(), DEC);
lcd.print('/');
lcd.setCursor(4,1);
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute(), DEC);
lcd.print(':');
lcd.print(now.second(), DEC);
delay(1000);
lcd.clear();
int hora =now.hour();
int minuto =now.minute();
int segundo = now.second();

/// separación del código///

codigo 2

if(hora >=8 && minuto <11 ){
digitalWrite(relay1,HIGH); //ACCIONA EL RIEGO POR 3 MINUTOS A LAS 8 DE LA MANANA
}
else {
digitalWrite(relay1,LOW); // CORTA EL RIEGO
}

if(hora >=21 && hora <7 ){
digitalWrite(relay2,HIGH); //ACCIONA EL ALUMBRADO POR 10 HORAS
}
else {
digitalWrite(relay2,LOW); // CORTA LA LUMINARIA
}

if(hora >=23 && minuto <3 ){
digitalWrite(relay1,HIGH); //ACCIONA EL RIEGO POR 3 MINUTOS A LAS 23 DE LA NOCHE DE LA MANANA
}
else {
digitalWrite(relay1,LOW); // CORTA EL RIEGO
}
}

Moderador
Hola, bienvenido al foro Arduino en Español

Por favor edita tu post usando etiquetas de código.
Otra cosa es que no debes usar Mayúsculas en los comentarios porque resulta molesto a la vista.
Las mayúsculas equivalen a Gritar en un foro. Sé que no fue tu intención pero es bueno que lo corrijas.
Lo que se hace es editar el mismo post y entonces solucionas las cosas de acuerdo a lo solicitado.
Normas del foro

A grandes rasgos veo que varias cosas controlan por separado el funcionamiento de relay1...4 y ahi entonces esta el problema.
Cuando varias cosas controlan qué hace cada relay debes tomar decisiones sobre cual será la prioritaria y qué acción tomar cuando otro comando intente cambiarlo.
Ejemplo:
'1' pone en LOW a relay1
'A' pone en HIGH al mismo relay1
pero al mismo tiempo tienes esto

   if(hora >=8 && minuto <11 ){
   digitalWrite(relay1,HIGH);  //ACCIONA EL RIEGO POR 3 MINUTOS A LAS 8 DE LA MANANA      
   }
   else {
   digitalWrite(relay1,LOW); // CORTA EL RIEGO 
   }

que no deja que x BT hagas algo. ya que es la ultima acción la que decide como queda el relay1.

Entonces el comportamiento de relay1 tiene dos elementos de control. Uno por tiempo y otro por BT.
Debes resolver como deben actuar de manera compartida.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.