Muy buenas, este es mi primer post, llevo ya dias buscando por el foro por si alguien le ha ocurrido lo mismo que a mi, pero la verdad que no lo encuentro, a continuacion os paso a detallar el problemilla que me ha surgido en mi proyecto que es el siguiente:
Tengo un deposito de agua a unos 20 mts de mi casa que lo utilizo para regar la huerta, mi primera intencion fue a traves de dos modulos de RF APC220 saber que nivel tenia el deposito de agua y cuando le faltara pues lo llenaba. Al principio todo iba bien, tenia unos led en el receptor el cual me indicaba el nivel y con el tiempo me dije de incluir una salida del receptor a una electrovalvula para que se llenara automaticamente y aqui viene mi fracaso. El emisor lo tengo alimentado con una bateria de 12V 7Ah pues no tengo posibilidad de suministro electrico directo, antes cuando se me agotaba la bateria, el panel led se me quedaba apagado y sabia que habia que cargar la bateria, pero ahora (me ha ocurrido dos veces) si se agota la bateria del emisor y si este habia mandado la orden de llenado, el receptor se queda enclavado con esa orden y no cambia de estado, con lo cual el deposito ha desbordado dos veces (la primera vez no preste mucha atencion). A continuacion os pongo el codigo:
Emisor:
// Emisor 8 canales
const int PULS = 2; // pin 2 conectado al pulsador (conectado a masa y una resistencia+5v)
const int PULS1 = 3;
const int PULS2 = 4;
const int PULS3 = 5;
const int PULS4 = 6;
const int PULS5 = 7;
const int PULS6 = 8;
const int PULS7 = 9;
// variable que cambiara:
int estadoPULS = 0;
int estadoPULS1 = 0;
int estadoPULS2 = 0;
int estadoPULS3 = 0;// variable para ver el estado del boton
int estadoPULS4 = 0;
int estadoPULS5 = 0;
int estadoPULS6 = 0;
int estadoPULS7 = 0;
void setup()
{
Serial.begin(2400); // Inicia la velocidad de transmision para Tx
pinMode(PULS, INPUT); //declaramos los pulsadores como entradas
pinMode(PULS1, INPUT);
pinMode(PULS2, INPUT);
pinMode(PULS3, INPUT);
pinMode(PULS4, INPUT);
pinMode(PULS5, INPUT);
pinMode(PULS6, INPUT);
pinMode(PULS7, INPUT);
;
}
void loop()
{
// lee si el pulsador esta suelto 0 o pulsado 1
estadoPULS = digitalRead(PULS);
estadoPULS1 = digitalRead(PULS1);
estadoPULS2 = digitalRead(PULS2);
estadoPULS3 = digitalRead(PULS3);
estadoPULS4 = digitalRead(PULS4);
estadoPULS5 = digitalRead(PULS5);
estadoPULS6 = digitalRead(PULS6);
estadoPULS7 = digitalRead(PULS7);
if (estadoPULS == LOW)
{ // si el boton no ha sido pulsado (esta sonda esta al reves):
Serial.print('A'); // Enviamos 'A' por Tx (puerto serie)
delay(1000); // Retardo de 1 s
}
if (estadoPULS == HIGH)
{ // si el boton ha sido pulsado:
Serial.print('B'); // Enviamos 'B' por Tx (puerto serie)
delay(1000); // Retardo de 1 s
}
if (estadoPULS1 == HIGH)
{
Serial.print('C');
delay(1000);
}
if (estadoPULS2 == HIGH)
{
Serial.print('D');
delay(1000);
}
if (estadoPULS3 == HIGH)
{
Serial.print('E');
delay(1000);
}
if (estadoPULS4 == HIGH)
{
Serial.print('F');
delay(1000);
}
if (estadoPULS5 == HIGH)
{
Serial.print('G');
delay(1000);
}
if (estadoPULS6 ==HIGH)
{
Serial.print('H');
delay(1000);
}
if (estadoPULS7 ==HIGH)
{
Serial.print('I');
delay(1000);
}
delay(3000);
}
este es el receptor
// Receptor de 8 canales y control de entrada de agua
int led = 2; //salida a la que conecto el led
int led1 = 3;
int led2 = 4;
int led3 = 5;
int led4 = 6;
int led5 = 7;
int led6 = 8;
void setup() {
Serial.begin(2400); // Inicia la velocidad de transmision para Tx
pinMode(led, OUTPUT); //declaramos los led como salidas
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
}
void loop() {
if (Serial.available() ) {
int byte_entrada = Serial.read(); // almaceno en byte_entrada el dato que llega al puerto
if (byte_entrada == 'A'){ // busca el caracter A y si lo encuentra enciende el led
digitalWrite(led, HIGH); //enciende led
delay(1000); // espera 1.5 seg
digitalWrite(led, LOW); // apaga led
}
if (byte_entrada == 'B'){ // busca el caracter B y si lo encuentra apaga el led
digitalWrite(led1, HIGH);
delay(1000);
digitalWrite(led1, LOW);
}
if (byte_entrada == 'C'){
digitalWrite(led1, HIGH);
delay(1000);
digitalWrite(led1, LOW);
}
if (byte_entrada == 'D'){
digitalWrite(led2, HIGH);
delay(1000);
digitalWrite(led2, LOW);
}
if (byte_entrada == 'E'){
digitalWrite(led3, HIGH);
delay(1000);
digitalWrite(led3, LOW);
}
if (byte_entrada == 'F'){
digitalWrite(led4, HIGH);
delay(1000);
digitalWrite(led4, LOW);
}
if (byte_entrada == 'G'){
digitalWrite(led5, HIGH);
delay(1000);
digitalWrite(led5, LOW);
}
if (byte_entrada == 'H'){
digitalWrite(led6, HIGH);
}
if (byte_entrada == 'I'){
digitalWrite(led6, LOW);
}
}
}
Con lo cual mi pregunta seria la siguiente:
¿Existe alguna orden dentro de la funcion Serial para que pasado un cierto tiempo, si esta dejara de recibir datos, para poder poner una orden para que la salida de la electrovalvula pasara a estado LOW?
Agradeciendo vuestra ayuda de antemano se despide un novato en Arduino.
P.D. Este codigo viene de un codigo de timbre inalambrico que anda en la red.