Hola Silvia,
de hecho no te falta mucho para arreglarlo, pero si que tienes que aclararte. Iria bien que miraras algun curso o tutorial de programacion basica en Arduino o en C++. Solo seran unas horas pero te ayudaran a entender y practicar las cosas mas basicas.
La aplicacion no es dificil, aunque tienes un poco de lio. Entiendo que lees la altura del nivel en adcValue, luego calculas el area y con ello los litros. Ademas guardas en una variable el estado del deposito, que puede ser: ESTADO_NIVEL_INFERIOR o ESTADO_NIVEL_SUPERIOR.
Como comentas, esto ya estaria bien para actualizar el estado:
if (litros < NIVEL_INFERIOR) {
nivel = ESTADO_NIVEL_INFERIOR;
} else if (litros > NIVEL_SUPERIOR) {
nivel = ESTADO_NIVEL_SUPERIOR;
}
¿Faltaria tal vez un estado intermedio o normal? cuando esta entre los dos valores, por la mitad.
Despues de esas lineas ya tendrias en nivel el estado del deposito. Entonces a continuacion en funcion de la variable nivel y de los tiempos haces el resto de acciones.
Si no quieres usar SWITCH/CASE puede hacerlo directamente con IF/ELSE. Como quieras. Por ejemplo:
if( nivel == ESTADO_NIVEL_SUPERIOR){
alarmaSuperior = true;
alarmaInferior = false;
// resto de acciones
// bla, bla
// bla, bla
} else if( nivel == ESTADO_NIVEL_INFERIOR){
alarmaInferior = true;
alarmaSuperior = false;
// resto de acciones
// bla, bla
// bla, bla
}
else { // ni inferior ni superior
// deactivar ambas alarmas... ?
}
Faltaria añadir el calculo del tiempo a la activacion de las alarmas, etc. No me lo he mirado.
El calculo del area lo puedes sacar fuera del loop y ponerlo en el setup, porque el area no va cambiar a cada vuelta del loop. Asi simplificas mucho el codido.
En el setup, calcula el area en una variable global que se llame area, para ambos casos: cilindrico o rectangular. Luego en el loop simplemente calcula los litros, solo una vez, sin SWITCH ni IF ni nada, directamente asi:
litros = ( area / 1000.0) * (adcValue / 53.40);
Seguramente hay mas cosas que puedes simplificar.
Prueba y avanza hasta donde puedas. Vuelve a poner el codigo en un nuevo comentario con las dudas o problemas que queden.