control de nivel de agua

que tal, tengo una duda en un codigo que estoy puliendo de programar unas salidas (electrodos ) con cables sumergidos en agua para sensar un estado logico, pues bien mi codigo si lee algunas condiciones pero en uno de los niveles de sensado no lo hace (en el nivel ALTO de llenado no me lee nada en el monitor serial), si son tan amables de encontrar algo releevante a mi duda lo agradezco, saludos...

prueba2.ino (835 Bytes)

int sensorPin[] = {8, 9, 10};
int ledPin[] = {11, 12, 13}; //número de leds = número de sensores

const int sensors = 3;
int level = 0;

void setup() {
Serial.begin(9600);
for (int i = 0; i < sensors; i ++) {
    pinMode (sensorPin [i], INPUT);
    pinMode (ledPin [i], OUTPUT);

}

}

void loop() {

level = 0;
for (int i = 0; i < sensors; i ++) {
    if(digitalRead (sensorPin[i]) == LOW) {
    digitalWrite (ledPin[i], HIGH);

level = sensors - i;

}

else

{

digitalWrite (ledPin[i], LOW);

}
}

Serial.println("Nivel de Agua");

switch(level)
{

case 1:

Serial.println("ALTO");

break;

case 2:

Serial.println("MEDIO");

break;

case 3:

Serial.println("BAJO");

break;
default:
Serial.println("NIVEL CRITICO");


break;


}

delay(2000);

}

Dices que no detectas la situacion del case 1?

Probaste simplemente midiendo con el tester/multímetro a ver si realmente se cumple?

Hola. Si te fijas has creado un arreglo llamado sensorPin[], que arduino asume que es sensorPin[3] porque le has puesto tres valores 8, 9, 10. O sea que tendrás una variable sensorPin[0] que vale 8, otra variable sensorPin[1] que vale 9 y una tercera sensorPin[2] que vale 10.

En tu primer ciclo for.

for (int i = 0; i < sensors; i ++) {
    pinMode (sensorPin, INPUT);
    pinMode (ledPin, OUTPUT);

}

desde que comienza la llave, i vale cero hasta que llega a la llave de cierre, la segunda vez valdrá i++ o sea (1) y la tercera pasada valdrá i++ o sea (2) y aquí se detiene el ciclo porque 2 es menor a sensor.

El ciclo correcto sería así:

for (int i = 0; i < sensors; i ++) {
    pinMode (sensorPin[i], INPUT);
    pinMode (ledPin[i], OUTPUT);

} 

Lo mismo pasa con los otros ciclos for.

Estas equivocado @Daniel_Arg?

Los led y sensores estan bien inicializados.

No hay ningún codigo que diga lo que tu has puesto

for (int i = 0; i < sensors; i ++) {
    pinMode (sensorPin, INPUT);
    pinMode (ledPin, OUTPUT);

}

Ojo yo miro el código que esta posteado en el post #2. si lo que esta ajunto esta mal no lo se porque no lo vi.

Mira, yo lo copié y lo pequé en mi soft, y juro que no estaba como ahora.
También miré el código que esta adjunto y no es el mismo.

Lo que veo que ahora su código esta entre las etiquetas [..code..] que antes no estaba.

Hoy comí asado pero no he tomado una gota de vino.

A mi no me importa lo que veas o dejes de ver, te sentis perseguido y crees que todo el mundo esta contra vos.
Yo no estoy contra vos.

Post#1 editado por mi con las etiquetas
Today at 18:14:38 by surbyte Reason: Agregado de etiquetas de código y errores.

Mir espuesta Post#2
Today at 18:23:29

Tu código post#3
Today at 18:30:24

A ver decime como hice para editar esas horas?

Cabe la posibilidad que lo haya cambiado @Coki34 en el momento previo a que yo le pusiera etiquetas.

Yo bajé el código y esta como se ve en el post#1 pero no tiene importancia.

No lo se, pero cuando yo lo copié los arreglos estaban mal y el código pegado sin el tag.

¿Que razón tendría para mentirte?

Lo copié, me puse a revisarlo mientras me tomaba un café.
Pensé si debía marcarle solo ese error y dejar que arregle el otro for o hacerle el código completo.

Y aquí está

int sensorPin[] = {8, 9, 10};
int ledPin[] = {11, 12, 13}; //número de leds = número de sensores
const int sensors = 3;
int level;

void setup() {
 Serial.begin(9600);
 for (int i = 0; i < sensors; i ++) {
     pinMode (sensorPin[i] , INPUT_PULLUP);
     pinMode (ledPin[i] , OUTPUT);
 }
}

void loop() {
 level = 0;
 int estado;
 for (int i = 0; i < sensors; i ++) {
   estado = digitalRead(sensorPin[i]);
   Serial.println(estado);
   digitalWrite (ledPin[i], estado);
   level = level + estado;
   estado = 0;
}

Serial.println("Nivel de Agua");
switch(level)
{
case 3:
Serial.println("ALTO");
break;
case 2:
Serial.println("MEDIO");
break;
case 1:
Serial.println("BAJO");
break;
default:
Serial.println("NIVEL CRITICO");
break;
}

delay(2000);

}

¿Porque no podría haber copiado yo antes que se editara y darle al botón Enviar Respuesta, luego que lo editaran? No es la primera vez que cuando contesto me aparece un cartél en rojo diciendo que se agregó una respuesta al post o algo asi.
Esperemos a que el usuario vuelva y le preguntamos.