Regador + Bluetooth + RTC Clock + Humedad.

Buenas noches a todos ,

Bueno como ya eh dicho en otros post soy totalmente en el mundo Arduino y sinceramente lo que eh logrado hacer es un logro para mi.

Estoy en este proyecto para regar mi casa en que consiste esto ?

En Un Reloj : Para programar los dias y horarios de Riego. En un Sensor de Humedad: Para saber si llovio , que no riegue En un Bluetooth para poder regar manual por sectores. En un 4 Relays ( 3 Sectores de Riego y 1 Contacto para prender la bomba) En Un Arduino UNO para programar todo

Bueno , Vamos al tema.

Lo que ya logre es

Medir La Humedad : Perfecto Aplicacion para el Bluetooth: Perfecto Y Programar el Bluetooth: Perfecto Programar el Arduino para el riego: Perfecto

El Ciruito de riego lo hace perfecto , rega todo cumple su tiempo todo.

Pero bueno el problema esta en el reloj ,

Pude Obtener la Hora y fecha , pero cuando pregunto si la hora es (Ej 23:00) Que empiese la funcion de Medir Humedad y Sino hay Humedad Que riegue, Osea la funcion comienza pero com oque tengo un buclee , Jamas termina , hace los 30 minutos de riego y vuelve a empezar

Porque pienso que me pasa esto ? , Porque cuando yo hago el IF preguntando la hora para saber si riego como que el reloj se detiene en ese tiempo

23:00:00 y queda ahi , y creo que cuadno termina la funcion vuelve a empezar el riego ya que el reloj esta detenido.

Aqui les dejo el codigo:

include "Wire.h"

define DS1307_ADDRESS 0x68

int bomba= 6; // rele pin int canilla1= 4; // rele pin int canilla2= 5; // rele pin int canilla3= 3; // rele pin int bocina= 9; int humedad1; int sector1 = 0; int sector2 = 0; int sector3 = 0; int bomba1 = 0;

byte bcdToDec(byte val) { // Convert binary coded decimal to normal decimal numbers return ( (val/16*10) + (val%16) ); } void setup() { Serial.begin(9600) ; Wire.begin();

//Configuramos los pines correspondientes como entradas o salidas pinMode(bomba, OUTPUT); pinMode(canilla1, OUTPUT); pinMode(canilla2, OUTPUT); pinMode(canilla3, OUTPUT); pinMode(bocina, OUTPUT); }

void loop() { //Mostrar_humedad(); mostrar_hora(); char dato = Serial.read(); if (dato=='1'){ if (sector1){ digitalWrite(canilla1, LOW); sector1 = 0; } else { digitalWrite(canilla1, HIGH); sector1 = 1; } } else if (dato=='2'){ if (sector2){ digitalWrite(canilla2, LOW); sector2 = 0; } else { digitalWrite(canilla2, HIGH); sector2 = 1; } } else if (dato=='3'){ if (sector3){ digitalWrite(canilla3, LOW); sector3 = 0; } else { digitalWrite(canilla3, HIGH); sector3 = 1; } } else if (dato=='b'){ if (bomba1){ prender_bomba(); bomba1 = 0; } else { apagar_bomba(); bomba1 = 1; } } else if (dato=='r') { Medir_Humedad();

} else if (dato=='m') { mostrar_hora(); Mostrar_humedad();

}

}

void Medir_Humedad() { humedad1 = analogRead(0); if(humedad1 >= 500) { comenzar_riego(); } else {

// delay(1000); Serial.print("Demaciada Humedad Para Regar.\n"); } } void comenzar_riego() { digitalWrite(canilla1, HIGH); delay(1500); prender_bomba(); delay(600000); apagar_bomba(); delay(1500); digitalWrite(canilla1, LOW); delay(1500); digitalWrite(canilla2, HIGH); delay(1500); prender_bomba(); delay(600000); apagar_bomba(); delay(1500); digitalWrite(canilla2, LOW); delay(1500); digitalWrite(canilla3, HIGH); delay(1500); prender_bomba(); delay(600000); apagar_bomba(); delay(1500); digitalWrite(canilla3, LOW); } void prender_bomba() { digitalWrite(bomba, HIGH); Serial.print("Bomba Prendida.\n"); } void apagar_bomba() { digitalWrite(bomba, LOW); Serial.print("Bomba Apagada.\n"); }

void Mostrar_humedad() { Serial.print("Humedad:"); Serial.println(analogRead(0)); delay(1000);

}

void Alarma() { digitalWrite(bocina,HIGH); delay(1000); digitalWrite(bocina,HIGH); delay(1000); digitalWrite(bocina,HIGH); delay(1000); digitalWrite(bocina,HIGH); delay(1000); digitalWrite(bocina,HIGH); delay(1000); digitalWrite(bocina,HIGH); delay(1000); digitalWrite(bocina,HIGH); delay(1000); } void mostrar_hora() { int second = bcdToDec(Wire.read()); int minute = bcdToDec(Wire.read()); int hour = bcdToDec(Wire.read() & 0b111111); //24 hour time int weekDay = bcdToDec(Wire.read()); //0-6 -> sunday - Saturday int monthDay = bcdToDec(Wire.read()); int month = bcdToDec(Wire.read()); int year = bcdToDec(Wire.read()); Wire.beginTransmission(DS1307_ADDRESS); byte zero = 0x00; Wire.write(zero); Wire.endTransmission();

Wire.requestFrom(DS1307_ADDRESS, 7); Serial.print(monthDay); Serial.print("/"); Serial.print(month); Serial.print("/"); Serial.print(year); Serial.print(" "); Serial.print(hour); Serial.print(":"); Serial.print(minute); Serial.print(":"); Serial.println(second); if(hour== 0 && minute == 44 ) { Medir_Humedad(); }

delay(1000); }

Gracias a todo aquel que me ayude !!!

con switch case el código se vería mejor

Me podrias explicar Como hacerlo (?

algo así:

void loop()
{ 
//Mostrar_humedad();
mostrar_hora(); 
    char dato = Serial.read();

    switch (dato){
case '1':
  if (sector1)
  {
    digitalWrite(canilla1,LOW);
    sector1=0;
  }
  else
  {
    digitalWrite(canilla1,HIGH);
    sector1=1;
  }
break;
case '2':
  if (sector2)
  {
    digitalWrite(canilla2, LOW);
    sector2 = 0;
  } 
  else 
  {
    digitalWrite(canilla2, HIGH);
    sector2 = 1;
  }
break;
case '3':
  if (sector3)
  {
    digitalWrite(canilla3,LOW);
    sector3 = 0;
  }
  else
  {
    digitalWrite(canilla3,HIGH);
    sector3 = 1;
  }
break;
case 'b':
  if(bomba1)
  {
    prender_bomba();
    bomba1 = 0;
  }
  else 
  {
    prender_bomba();
    bomba1 = 1;
  }
break;
case 'r':
  Medir_Humedad();
break;
case 'm':
  mostrar_hora();
  Mostrar_humedad();
break;
case 'stop':
  Serial.println("---====STOP====---");
  //instrucciones para parar todo
break;
delay(20);
}