// CODIGO ARDUINO - TEST v3.1 (30-AGO-2022)
#define pin_boya 2 // A
#define pin_Trigger 12 // B
#define pin_Echo 11 // B
#define pin_ReleValLlen 3 // C
#define pin_ReleValEmer 4 // D
#define pin_ReleBombaAgua 5 // E: pin 8 (real) o pin 5 (Simulador)
String str = ""; // Lectura de datos de Serial
const char separator = ',';
const int dataLength = 2;
String data[dataLength];
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);//115200 Opcional
pinMode(pin_boya, INPUT); //Configuracion de los pines
pinMode(pin_Trigger, OUTPUT);
pinMode(pin_Echo, INPUT);
pinMode(pin_ReleValLlen, OUTPUT);
pinMode(pin_ReleValEmer, OUTPUT);
pinMode(pin_ReleBombaAgua, OUTPUT);
digitalWrite(pin_Trigger, LOW); //Inicializacion de los pines
digitalWrite(pin_ReleValLlen, LOW);
digitalWrite(pin_ReleValEmer, LOW);
digitalWrite(pin_ReleBombaAgua, LOW);
Serial.println("Inicio de Programa");
}
void loop() {
// put your main code here, to run repeatedly:
}
void serialEvent(){
str = Serial.readStringUntil('\n');
//Serial.println(str.length());
byte longitud = str.length();
for (int i = 0; i < dataLength ; i++){
int index = str.indexOf(separator);
data[i] = str.substring(0, index);
str = str.substring(index + 1);
//Serial.println(data[i]);
}
//printParam(data);
byte param02=0;
if(longitud==3){ param02 = data[1].toInt();}
switch(data[0][0]){
case 'A': //1. Boya
Serial.print("A->");
Serial.print(isBoyaAlto());
Serial.println((isBoyaAlto()?"#Con Continuidad":"#Sin Continuidad"));
break;
case 'B': // 2. Sensor Ultrasonido
Serial.print("B->");
Serial.println(getProf_Deposito());
break;
case 'C': // 3. Valvula Llenado
Serial.print("C");
if(longitud==1){
Serial.println("->#Falta un Parametro");
break;
}
if(param02==1) {
Serial.print(",1->");
if(set_ValLlenado(true)) Serial.println("C#Val. Llenado, Encendido Con Exito");
else Serial.println("S#Val. Llenado, Encendido Sin Exito");
} else if(param02==0){
Serial.print(",0->");
if(set_ValLlenado(false)) Serial.println("C#Val. Llenado, Apagado Con Exito");
else Serial.println("S#Val. Llenado, Apagado Sin Exito");
} else if(param02==9){ //?: Consulta: Val. Llenado
Serial.print(",9->");
if(isOpen_ValLlenado()) Serial.println("1#Valv. de Llenado Encendido");
else Serial.println("0#Valv. de Llenado Apagado");
} else Serial.println("#Fuera Rango");
break;
case 'D': // 4. Valvulad Emergencia
Serial.print("D");
if(longitud==1){
Serial.println("->#Falta un Parametro");
break;
}
if(param02==1) {
Serial.print(",1->");
if(set_ValEmerg(true)) Serial.println("C#Val. Emergencia, Encendido Con Exito");
else Serial.println("S#Val. Emergencia, Encendido Sin Exito");
} else if(param02==0){
Serial.print(",0->");
if(set_ValEmerg(false)) Serial.println("C#Val. Emergencia, Apagado Con Exito");
else Serial.println("S#Val. Emergencia, Apagado Sin Exito");
} else if(param02==9){ //?: Consulta: Val. Emergencia
Serial.print(",9->");
if(isOpen_ValEmerg()) Serial.println("1#Valv. de Emergencia Encendido");
else Serial.println("0#Valv. de Emergencia Apagado");
} else Serial.println("#Fuera Rango");
break;
case 'E': // 5. Bomba de Agua
Serial.print("E");
if(longitud==1){
Serial.println("#Falta un Parametro");
break;
}
if(param02==1) {
Serial.print(",1->");
if(set_RiegoActivado(true)) Serial.println("C#Bomba, Encendido Con Exito");
else Serial.println("S#Bomba, Encendido Sin Exito");
} else if(param02==0){
Serial.print(",0->");
if(set_RiegoActivado(false)) Serial.println("C#Bomba, Apagado Con Exito");
else Serial.println("S#Bomba, Apagado Sin Exito");
} else if(param02==9){ //?: Consulta: Bomba de Agua
Serial.print(",9->");
if(isRiegoActivado()) Serial.println("1#Bomba de Agua Encendido");
else Serial.println("0#Bomba de Agua Apagado");
} else Serial.println(",#Fuera Rango");
break;
}
}
bool isBoyaAlto(){ // 1. Boya
return digitalRead(pin_boya);
}
float getProf_Deposito(){ // 2. Sensor Ultrasonido
digitalWrite(pin_Trigger, HIGH);
delayMicroseconds(10);
digitalWrite(pin_Trigger, LOW);
long tiempo = pulseIn(11, HIGH);
float distancia = 34300*tiempo*0.000001/2;
return distancia;
}
bool set_ValLlenado(bool value){ // 3. Valv. Llenado
digitalWrite(pin_ReleValLlen, value);
if(digitalRead(pin_ReleValLlen)==value) return true;
else return false;
}
bool isOpen_ValLlenado(){ //ON:True, OFF:False (xDef)
return digitalRead(pin_ReleValLlen);
}
bool set_ValEmerg(bool value){ // 4. Valv. Emergencia
digitalWrite(pin_ReleValEmer, value);
if(digitalRead(pin_ReleValEmer)==value) return true;
else return false;
}
bool isOpen_ValEmerg(){ //ON:True (xDef), OFF:False
return digitalRead(pin_ReleValEmer);
}
bool set_RiegoActivado(bool value){ // 5. Bomba de Agua
digitalWrite(pin_ReleBombaAgua, value);
if(digitalRead(pin_ReleBombaAgua)==value) return true;
else return false;
}
bool isRiegoActivado(){ //ON:True, OFF:False (xDef)
return digitalRead(pin_ReleBombaAgua);
}
// Funciones Auxiliares
void printParam(String a[] ) {
for (int index = 0; index < dataLength; index++){
Serial.print(a[index]);
Serial.print('-');
}
Serial.println();
}