Errores con sensor de color ADJD-S311

Buenos días,

Tengo problemas para encender salidas dependiendo de los colore que detecte con mi sensor de color.

Estoy haciendo un proyecto de robotica y debo de sensar colores con la placa ADJD-S311.

en fin, el sensor de color me esta funcionando muy bien sin embargo debo de hacer que cada vez que detecte un color tome una salida y la encienda, hice esta acción con un if y un else sencillo sin embargo poseo algún problema q no me la enciende.

Adjunto dejo mi archivo de programación a ver si tengo algún error o alguna sugerencia

Saludos.

adjd_s311.ino (1.12 KB)

I don’t know what else you want it to do (I think the way you are using delay() will be a problem too), but this is definitely not going to work:

color.red >= 800 || color.red <= 1023

This is ALWAYS true - for any value of color.red, it’s either above 800 or below 1023.
I think you want logical AND (&&) instead of logical OR? (||)?

Also, please post in the proper language section

Entendiste lo que te respondieron en inglés?
Solo cuando los códigos son muy grandes se adjuntan sino se usa tags. Usa </> luego de seleccionar todo el código y quedará como esto que yo te agrego

#include <ADJDS311.h>
#include <Wire.h>

int sensorLed_pin = 2; //LED on the ADJDS-311
ADJDS311 colorSensor(sensorLed_pin);

//if using an RGB LED (Needs PWM Pins)
int redPin = 3;
int greenPin = 5;
int bluePin = 6;

void setup(){
	Serial.begin(9600);
	
	colorSensor.init();
  colorSensor.ledOn(); //turn LED on
  
  //Calibrate white 
  //Need to hold white card in front (1-3mm) of it to calibrate from
  colorSensor.calibrate(); 
}

void loop(){
  RGBC color = colorSensor.read(); //read the color
  
  Serial.print(color.red);
  Serial.print(" | ");
  Serial.print(color.green);
  Serial.print(" | ");
  Serial.print(color.blue);
  Serial.print(" | ");
  Serial.println(color.clear);
  

  
  delay(200); //just here to slow down the serial output
  

  if (color.red >= 800 && color.red <= 1023)
  {
  	digitalWrite (5,HIGH);
  }
  else {
  	digitalWrite (5,LOW);
  	
  } 

  if (color.green >= 800 && color.green <= 1023)
  {
  	digitalWrite (5,HIGH);
  }
  else {
  	digitalWrite (5,LOW);
  	
  } 

  if (color.blue >= 800 && color.blue <= 1023)
  {
  	digitalWrite (5,HIGH);
  }
  else {
  	digitalWrite (5,LOW);
  	
  } 
  delay(1000);
}

dos errores

  1. tu if usaba OR y no AND
    Yo te modifiqué todo para que luzca como corresponde.
  if (color.red >= 800 && color.red <= 1023)
  {
  	digitalWrite (5,HIGH);
  }
  else {
  	digitalWrite (5,LOW);
  	
  }

Y eliminé todos los delay y luego del ultimo chequeo de color y fuera del if else puse solo un delay(1000);

Lo que no entiendo es que en todos casos activas el mismo pin
de modo que pudiste simplificar todo asi

  if ((color.red    >= 800 && color.red    <= 1023) ||
     (color.green >= 800 && color.green <= 1023) ||
     (color.blue   >= 800 && color.blue   <= 1023))  {
  	digitalWrite (5,HIGH);
  }
  else {
  	digitalWrite (5,LOW);
  	
  }