Go Down

Topic: Realizar una accion u otra con if o while? (Read 389 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.

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

#5
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