Por que a variável não responde o valor correto?

Olá, gostaria de saber o porque a variável contra_a não responde o valor correto, ficando em "2"
Segue o código:

/****************************************************************
ColorSensor.ino
APDS-9960 RGB and Gesture Sensor
Shawn Hymel @ SparkFun Electronics
October 15, 2014
https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor

Conexões

Importante: O módulo APDS-9960 funciona somente com 3.3V!!!
 
Arduino Pin  APDS-9960 Board  Function
 
 3.3V            VCC            Power
 GND             GND            Ground
 A4              SDA            I2C Data
 A5              SCL            I2C Clock
 
******************************************************************/

//Inclusão de bibliotecas
#include <Wire.h>
#include <SparkFun_APDS9960.h>

//Instanciando o objeto "apds" e atribuindo como valor uma função existente na biblioteca
SparkFun_APDS9960 apds = SparkFun_APDS9960();

//Variáveis globais
uint16_t ambient_light = 0;
uint16_t red_light = 0;
uint16_t green_light = 0;
uint16_t blue_light = 0;
int Cor = 0;
int contra_a = 0; // tudo contra o azul
int contra_v = 0; // tudo contra o vermelho

void setup() {
  
  //Inicializando a comunicação serial
  Serial.begin(9600);
  Serial.println();
  Serial.println(F("--------------------------------"));
  Serial.println(F("SparkFun APDS-9960 - Sensor de Cor"));
  Serial.println(F("--------------------------------"));
  
  //Inicializa o módulo APDS-9960
  if ( apds.init() ) {
    Serial.println(F("APDS-9960: Inicialização completa!"));
  } else {
    Serial.println(F("APDS-9960: Algo deu errado durante a inicialização!"));
  }
  
  //Executa o sensor de luminosidade
  if ( apds.enableLightSensor(false) ) {
    Serial.println(F("O sensor de luz está funcionando!"));
  } else {
    Serial.println(F("Algo deu errado durante a unidade do sensor de luz!"));
  }
  
  // Aguarde a inicialização e calibração terminar
  delay(500);


// Colocamos o pino 3 do Arduino como OUTPUT (saída)
  pinMode(3, OUTPUT);



}

void loop() {
  
  // Lê os níveis de luminosidade (ambiente, vermelho, verde, azul)
  if (  !apds.readAmbientLight(ambient_light) ||
        !apds.readRedLight(red_light) ||
        !apds.readGreenLight(green_light) ||
        !apds.readBlueLight(blue_light) ) {
    Serial.println("Erro ao ler os valores de luminosidade");
  } else {
    Serial.print("Ambiente: ");
    Serial.print(ambient_light);
    Serial.print(" Cor: ");
    Serial.print(Cor);
    Serial.print(" Vermelho: ");
    Serial.print(red_light);
    Serial.print(" Verde: ");
    Serial.print(green_light);
    Serial.print(" Azul: ");
    Serial.print(blue_light);
    Serial.print(" Contra Azul: ");
    Serial.println(contra_a);

    


  }
  
  // Espera 1 segundo e executa a próxima leitura
 delay(300);

if (ambient_light > 400 && ambient_light < 430 && red_light > 10 && red_light < 20  && green_light > 112  && green_light < 135  && blue_light > 290  && blue_light < 312)
// Esta é para quando for azul
{
  Cor = 1;
}

if (ambient_light > 185 && ambient_light < 212 && red_light > 140 && red_light < 170  && green_light > 20  && green_light < 32  && blue_light > 55  && blue_light < 72)
// esta é para quando for vermelho
{
  Cor = 2;
}

// contras:

if (ambient_light < 400 && ambient_light > 430 && red_light < 10 && red_light > 20  && green_light < 112  && green_light > 135  && blue_light < 290  && blue_light > 312)
{
  contra_a = 1;
}

if (ambient_light > 400 && ambient_light < 430 && red_light > 10 && red_light < 20  && green_light > 112  && green_light < 135  && blue_light > 290  && blue_light < 312)
{
  contra_a = 2;
}

}

Pense nisso... é possível?

dica: quando você pega o oposto de um AND, você tem um OR...

PS: post movido para a seção portuguesa

1 Like

Ótimo! Muito obrigado! Resolvido!

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.