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