Go Down

Topic: Realizar una accion u otra con if o while? (Read 210 times) previous topic - next topic

danielgaviria23

Hola a todos, estoy tomando datos con 4 sensores de color al mismo tiempo y lo que quiero es que cuando los 4 sensores me lean el mismo color se active una salida, y cuando al menos uno o mas no corresponda al mismo color que los otros sensores este leyendo me active otra salida.

Lo que quiero que no pase es que con la luz ambiente o con solo colocar un color en un sensor y aun que no haya puesto los otros 3 colores me active como si no estuviera leyendo los 4 mismos colores

Facemaker


danielgaviria23

si con cualquiera, lo que necesito es poder realizar eso que expongo

_jose_

#3
Feb 13, 2018, 09:31 pm Last Edit: Feb 13, 2018, 09:32 pm by _jose_
Si posteas el sketch que estas usando y algun esquema ,modelo de sensor,etc,etc,sera mas facil ayudarte.

ArduMyth

Primero. Descartar el while salvo que quieras que el arduino no ejecute otra cosa hasta la salida del mismo.
Recordemos que al estar en el loop es cómo otros lenguajes con la recursividad (no digo que sea igual) y personalmente no veo la lógica de leer así los sensores.

Después descataría el switch porque necesitas comparar al mismo tiempo varios sensores y es más simple 1 if que anidar los switch.

Es tan simple como leer los sensores y asignar los valores en las variables y comparar. Tan simple como usar el operador lógico AND && en un if.

danielgaviria23

algo como esto entonces es lo que quiero

suponiendo el color verde me marca 300, entonces:

si sensor1=300 sensor2=300 sensor3=300 sensor4=300 prender una salida digital en la que vaya un led verde

y si no cumple con eso es decir que alguno sea diferente que prenda otra salida diferente siempre y cuando ya este haciendo lectura de algún color, lo que no quiero que suceda es que como al inicio sin haber colocado el color obviamente los sensores van a tener valores diferentes entonces me prenderia el led diciendome que son diferentes, solo quiero que eso pase cuando ya le ponga los colores en lectura

surbyte

#6
Feb 14, 2018, 01:42 am Last Edit: Feb 14, 2018, 01:42 am by surbyte
no lo hagas para 300 exactos porque jamas vas a lograr la misma respuesta en 4 sensores.
Usa algo como esto

puedes para cada color buscar esta situacion
Code: [Select]
if (sensor1 > 250 && sensor1 < 350) 

o
Code: [Select]
if (abs(sensor1 - 300) < 50)

el segundo caso es el que uso yo aunque ambos son lo mismo.

repite esta situación para los 4 sensores.

Facemaker

switch…case sirve para controlar el flujo del programa sometiendo una variable de control a ciertas condiciones. En particular, switch…case permite hacer una serie de comparaciones sin necesidad de ifs anidados.
esta hecho a la rapid puede contener errores, lo escribi desde el movil
Code: [Select]

byte valor_lectura;
unsigned long sensor1;
unsigned long sensor2;
unsigned long sensor3;

unsigned long limite1;
unsigned long limite2;
unsigned long limite3;
byte byte_I,byte_D,byte_E;

void loop(){
if(sensor1=limite1) { byte_I=1;
  else byte_I=0;
}

if(sensor2=limite2) { byte_d=1; // limite2 puede ser cambiado por algun valor numerico a comparar
  else byte_d=0;
}
if(sensor3=limite3) { byte_e=1; // limite2 puede ser cambiado por algun valor numerico a comparar
  else byte_e=0;
}
valor_lectura=byte_I+byte_D+byte_E;
  
  byte_I=0;
  byte_D=0;
  byte_E=0;
 
  

switch(valor_lectura){
    case 1:
       //1 se ejecuta esto
    break;
    case 2:
       //2 se ejecuta esto
    break;
case 3:
       //3 se ejecuta esto
    break;

    //pueden haber tantos case como se necesite.
    default:
       //si nada coincide se ejecuta esto
       //es opcional  
    break;
}
}

tabla de equivalencia

 I-D-E
 0-0-0   0°
 0-0-1   1°
 0-1-0   2°
 0-1-1   3°
 1-0-0   4°
 1-0-1   5°
 1-1-0   6°
 1-1-1   7°

surbyte

No hace falta ningun switch case. solo una comparación de que 4 valores de sensores esten dentro de cierto rango como lo he expuesto y tmb lo ha explicado ArduMyth

Go Up