Buenas noches,Necesito que alguien me ayude con este programa

En una industria de la región se tienen dos depósitos de agua comunicados por una tubería que tiene una electroválvula (ver figura). El nivel de agua de cada depósito se mide con 15 sensores distribuidos uniformemente a lo alto de cada depósito. Cada sensor dará un '1' lógico si está cubierto de agua, y un '0' lógico si está al aire. Como se tienen 15 sensores para conocer el nivel, el rango de valores va desde 0 a 15. Se supone que ningún sensor va a fallar, por lo tanto, si un sensor indica un '1' lógico, todos los sensores que estén debajo de él darán un '1' lógico (pues el agua los cubrirá también).

Se quiere realizar un circuito que accione la electroválvula cuando uno de los depósitos contenga el doble o más de agua que el otro, en este caso la salida EV será '1'. Mientras que EV será '0' cuando la diferencia del contenido de agua entre los depósitos sea menor del doble. Al accionar la válvula el depósito de mayor cantidad de agua se vaciará y el de menor cantidad de agua se llenará por ser un sistema de vasos comunicantes.

Esto parece un ejercicio escolar. ¿Espera que alguien escriba código por usted?

¿Qué has probado?

Que es un ejercicio escolar es evidente y no veo que pida un código , mas bien creo que esta atascado con el problema y necesita alguna idea para empezar.
¡ 30 sensores ! uff.. demasiados, mucho cableado, mcu potente, (a nivel de tener suficientes pines de entrada) y como poco código un poco complicado.
Podemos simplificar un poco el problema. Sin duda como has llegado a microprocesadores has tenido que pasar por estudiar los "DAC" o Digital Analog Converter y aunque muy de pasada , (seguro), los "DAC R+2R". Buca esto ultimo en google los entenderas seguro y tendras muchos ejemplos.
Bueno pues la idea es conectar cada deposito a un DAC, del tipo que sea y de esta forma en lugar de tener 15 salidas por deposito solo tendremos 1 que su tensión variara de 0, (deposito vacio) o 5V deposito lleno y digo 5V porque estoy con arduino si fuera otro montaje serian +Vcc.
Pues de 30 señales las hemos reducido a dos, las conectas a dos pines analogicos del arduino y haces una lectura de ellas con analogRead guardando los resultados en dos variables por ejemplo dep1 y dep2 , pues ya lo tienes todo.
En el sketch defines al principio tipo de variables pines etc. En el setup como se han de comportar los pines los del DAC como NPUT y el que maneja la electrovalvula como OUTPUT y en algun lugar del loop solo añadir estas lineas de código:

if (dep1 >= 2 * dep2 || dep2 >= 2 * dep1) {
  digitalWrite (electrovalvula, HIGH);
}
else {
  digitalWrite (electrovalvula, LOW);
}

Saludos.

como no hay pregunta, podemos ahondar en todas las hipótesis. El tuyo es válido por supuesto.

...Se quiere realizar un circuito...

➜ la pregunta podría haber sido un circuito con puerta lógica

¿Cuál es tu pregunta?
Porque solo presentas el enunciado de un problema que te han dado para que TU resuelvas y ya.

Además ahí solo dice que "se quiere realizar un circuito", sin mayores detalles sobre el circuito en sí (por ejemplo, no dice que debas usar arduino).

Explica bien lo que quieres, presenta tu código si estás usando un arduino y lo vemos.

Saludos

PD: La palabra "Ayuda" (y sus variantes) no está permitida porque es obvio que si preguntas aquí es porque necesitas ayuda, ya te lo recordará el moderador.

Poner 15 sensores y no usar 16 para mi ya es un despropósito. No cambia mucho en usar uno mas y tener todos los bits de un int ocupados. De todos modos da igual se usan 15 de 16
Tus dos sensores SA y SB leerán datos de 15 puertos digitales. En arduino eso lo haces con digitalRead(pin) o usar PORTs para hacerlo mas facil.
Si usas digitalRead(pin) podrias poner un loop o ciclo para leer elemento por elemento e ir formando el valor entero con potencias de 2. Es fácil, está por todos lados.
Si usas PORT, una simple lectura te dará un valor y la 2da leerás los otros bits, porque PORT siempre es de 8 bits, asi que lees el LSB menos significativo y luego el MSB Mas significativo y tienes tu entero que de dice que altura tiene el tanque A y lo mismo con el B.
Con las alturas resuelves como equilibrar uno u otro con una simple comparación.
Supongamos que sensorSA contiene ahora un entero representativo de la altura del tanque A y lo mismo con sensorSB. Ambos definidos como unsigned int sensorSA, por ej.
entonces si comparas
If (sensorSA > 2*sensorSB)
// comandas la salida EV
Lo mismo con el otro.
Lo de la diferencia no me queda claro.

El doble de qué?

No es asi, solo necesitaba puntos de vista para comenzar y Gracias por su apoyo

Gracias por ayudarme a simplificar las ideas y continuar con mi programacion

if(sensorSA >= 2*sensorSB || sensorSB >= 2*sensorSA)){
  EV = 1;
}
else {
  EV = 0;
}

:wink:

No discutamos la forma en que está redactado el problema porque no creo que sea culpa del/la PO.

Saludos

A ver @Madie_52 continúa con el tema.
No te ofendas porque hablamos de trabajo escolar, eso lo hacemos siempre.
Tu trabajo luce como tal, y seguramente lo es.
Pero te he dado mi punto de vista.

No vi este comentario.
Yo no entendí la redacción, que obviamente no es del interesado.

if(sensorSA >= 2*sensorSB || sensorSB >= 2*sensorSA)){

Donde ves ahi la diferencia del contendido de agua?
Difencia es (sensorSA - SensorSB) si queres lo tomamos en valor absoluto para independizarnos del signo pero luego contra que haces el doble contra 1 y entonces hay que hacerlo contra el otro.

Del otro deposito.

Tu lo entendistes bien en en tu primera contestacion:

Pues eso lo mismo con el otro pero en un solo if.

if(sensorSA >= 2*sensorSB || sensorSB >= 2*sensorSA)){

Saludos.

Lo que pasa es que necesito hacer una programación con esas indicaciones en Arduino para simular primero en proteus
Pretendo utilizar un display para ver el nivel del agua, ocupare un arduino mega

Y que te detiene?

Moderador:
Lee las Normas del foro.
El foro responde dudas y puede aportar sugerencias, no hacemos códigos si el interesado no muestra esfuerzo.

@gonpezzi y yo te hemos dado dos visiones de cómo hacerlo.

Si, y de verdad que me han ayudado bastante si es posible cuando termine el programa se los presento