Go Down

Topic: TCS230 Color Sensor Calibration (Read 18 times) previous topic - next topic

521minsu

I was trying to use few lines of code without any libraries, that were made by other people. This code works perfectly fine for me. However, I want to put a calibration code in setup, so that it can calibrate by itself every time I start the robot. Can you please add the calibration code at the start of the code and share it back for me? Thank you :D

Ps. few extra codes in color_left comparing to color_right is some codes that I have failed to make them calibrate.

Code: [Select]

#include <AFMotor.h>
#include <LiquidCrystal_I2C.h> //Load Liquid Crystal Library
LiquidCrystal_I2C lcd(0x27, 16, 2);

AF_DCMotor motor1(1, MOTOR12_64KHZ);
AF_DCMotor motor2(2, MOTOR12_64KHZ);

int dir;
int forward = 0;
int left = 1;
int right = 2;
int backward = 3;
int wait = 4;

const int ls0 = 22;
const int ls1 = 24;
const int ls2 = 26;
const int ls3 = 28;
const int lout = 30;

const int rs0 = 44;
const int rs1 = 46;
const int rs2 = 48;
const int rs3 = 50;
const int rout = 52;

int red_left = 0;
int green_left = 0;
int blue_left = 0;

int red_right = 0;
int green_right = 0;
int blue_right = 0;

float SF_left[3];
float SF_right[3];
   
void setup()   

  Serial.begin(9600);
  pinMode(ls0, OUTPUT);
  pinMode(ls1, OUTPUT);
  pinMode(ls2, OUTPUT);
  pinMode(ls3, OUTPUT);
  pinMode(lout, INPUT);
  digitalWrite(ls0, HIGH);
  digitalWrite(ls1, HIGH);

  pinMode(rs0, OUTPUT);
  pinMode(rs1, OUTPUT);
  pinMode(rs2, OUTPUT);
  pinMode(rs3, OUTPUT);
  pinMode(rout, INPUT);
  digitalWrite(rs0, HIGH);
  digitalWrite(rs1, HIGH);

  // turn on motor
  motor1.setSpeed(255);
  motor2.setSpeed(255);
 
  motor1.run(RELEASE);
  motor2.run(RELEASE);

  lcd.init();
  lcd.backlight();
  lcd.setCursor(0, 0); //Set LCD cursor to upper left corner, column 0, row 0

   
void loop()

  color_left();
  color_right();

       if (red_right < green_right < 70 && blue_right < green_right < 71 && red_right < 60 && blue_right < 62)
  {
    lcd.setCursor(0,0); 
    lcd.print("Black Right");
  } 

   else if (red_right > 5 && red_right < 13 && green_right > 5 && green_right < 13 && blue_right > 5 && blue_right < 13) {
    lcd.setCursor(0,0);
    lcd.print("White Right");
  }
 
    else if (green_right < red_right < 41 && green_right < blue_right < 31) 
  { 
   lcd.setCursor(0,0);
   lcd.print("Green right"); 
  } 

 
   if (red_left > 5 && red_left < 13 && green_left > 5 && green_left < 13 && blue_left > 5 && blue_left < 13) {
    lcd.setCursor(0,1);
    lcd.print("White Left");
  }



     if (red_left < green_left < 70 && blue_left < green_left < 71 && red_left < 60 && blue_left < 61) {
    lcd.setCursor(0,1);
    lcd.print("Black Left");
  }

    else if (green_left < red_left < 41 && green_left < blue_left < 31) 
  { 
   lcd.setCursor(0,1);
   lcd.print("Green Left"); 
  } 
 



  Serial.print("Left R:");
  Serial.print(red_left, DEC);
  Serial.print(" G:");
  Serial.print(green_left, DEC);
  Serial.print(" B:");
  Serial.println(blue_left, DEC);
  Serial.print("Right R:");
  Serial.print(red_right, DEC);
  Serial.print(" G:");
  Serial.print(green_right, DEC);
  Serial.print(" B:");
  Serial.println(blue_right, DEC);

 } 
   
void color_left()
{
  digitalWrite(ls2, LOW);
  digitalWrite(ls3, LOW);
  //count OUT, pRed, RED
  red_left = pulseIn(lout, digitalRead(lout) == HIGH ? LOW : HIGH);
  digitalWrite(ls3, HIGH);
  //count OUT, pBLUE, BLUE
  blue_left = pulseIn(lout, digitalRead(lout) == HIGH ? LOW : HIGH);
  digitalWrite(ls2, HIGH);
  //count OUT, pGreen, GREEN
  green_left = pulseIn(lout, digitalRead(lout) == HIGH ? LOW : HIGH); 

  SF_left[0] = (255 / red_left);
  SF_left[1] = (255 / green_left);
  SF_left[2] = (255 / blue_left);

  red_left = (255 - red_left);
  green_left = (255 - green_left);
  blue_left = (255 - blue_left);
 
 // red_left = (red_left * SF_left[0]);
  //green_left = (green_left * SF_left[1]);
  //blue_left = (blue_left * SF_left[2]);
}

void color_right()
{
  digitalWrite(rs2, LOW);
  digitalWrite(rs3, LOW);
  //count OUT, pRed, RED
  red_right = pulseIn(rout, digitalRead(rout) == HIGH ? LOW : HIGH);
  digitalWrite(rs3, HIGH);
  //count OUT, pBLUE, BLUE
  blue_right = pulseIn(rout, digitalRead(rout) == HIGH ? LOW : HIGH);
  digitalWrite(rs2, HIGH);
  //count OUT, pGreen, GREEN
  green_right = pulseIn(rout, digitalRead(rout) == HIGH ? LOW : HIGH);
}

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy