Bonjour à tous
Mon projet est une machine à trier les légos par couleurs.
Mon code ici est fonctionnel et s'appuie sur des conditions de détéctions de fréquences par la sonde.
Le souci c'est que pour détécter les couleurs à tous les coups je finis par élargir les fourchettes de détéction ce qui donne plusieurs conditions vraies en même temps ![]()
Par exemple les pièces rouges et oranges sont détéctées en même temps sans distinction.
Pour les couleurs à fort contraste ca fonctionne par contre
#include <Servo.h>
int servoPin=11;
int servoPin2=12;
int color=0;
String finalcode;
long finalc;
// Define color sensor pins
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define SL 2
#define sensorOut 8
// Variables for Color Pulse Width Measurements
int redPW = 0;
int greenPW = 0;
int bluePW = 0;
int servoPos=90;
int servoPos2=0;
//creation objet servo
Servo myServo;
Servo myServo2;
//creation objet servo
void setup() {
myServo.attach(servoPin);
myServo2.attach(servoPin2);
// Set S0 - S3 as outputs
pinMode(S0, OUTPUT);
pinMode(S1, OUTPUT);
pinMode(S2, OUTPUT);
pinMode(S3, OUTPUT);
pinMode(SL, OUTPUT);
// Set Sensor output as input
pinMode(sensorOut, INPUT);
// Set Pulse Width scaling to 20%
digitalWrite(S0,HIGH);
digitalWrite(S1,LOW);
// Setup Serial Monitor
Serial.begin(9600);
digitalWrite(SL,LOW);
}
void loop() {
// Read Red Pulse Width
redPW = getRedPW();
// Delay to stabilize sensor
delay(200);
// Read Green Pulse Width
greenPW = getGreenPW();
// Delay to stabilize sensor
delay(200);
// Read Blue Pulse Width
bluePW = getBluePW();
// Delay to stabilize sensor
delay(200);
// Print output to Serial Monitor
Serial.print("Red PW = ");
Serial.print(redPW);
Serial.print(" - Green PW = ");
Serial.print(greenPW);
Serial.print(" - Blue PW = ");
Serial.println(bluePW);
//finalcode=redPW;
//finalcode.concat(greenPW);
//finalcode.concat(bluePW);
//Serial.println(finalcode);
//finalc=finalcode.toInt();
// recherche bleu ciel
if(redPW<100 & redPW>40 & greenPW<100 & greenPW>60 & bluePW<65 & bluePW>30){
color = 1; // Red
digitalWrite(SL,HIGH);
Serial.println("BLEU");
// myServo2.write(servoPos);
}
if(redPW<90 & redPW>55 & greenPW<60 & greenPW>30 & bluePW<45 & bluePW>30){
color = 1; // Red
digitalWrite(SL,HIGH);
Serial.println("BLEU CIEL");
}
if(redPW<55 & redPW>35 & greenPW<135 & greenPW>65 & bluePW<105 & bluePW>55){
color = 1; // Red
digitalWrite(SL,HIGH);
Serial.println("ROUGE");
//myServo.write(servoPos);
}
if(redPW<115 & redPW>65 & greenPW<95 & greenPW>55 & bluePW<100 & bluePW>50){
color = 1; // Red
digitalWrite(SL,HIGH);
Serial.println("MARRON");
// myServo.write(servoPos);
}
if(redPW<65 & redPW>25 & greenPW<130 & greenPW>85 & bluePW<135 & bluePW>100){
color = 1; // Red
digitalWrite(SL,HIGH);
Serial.println("Orange");
//myServo.write(servoPos);
}
if(redPW<65 & redPW>25 & greenPW<130 & greenPW>85 & bluePW<135 & bluePW>100){
color = 1; // Red
digitalWrite(SL,HIGH);
Serial.println("Vert");
//myServo.write(servoPos);
}
delay(200);
digitalWrite(SL,LOW);
color=0;
//remise à 0 des servo
// myServo.write(servoPos2);
// myServo2.write(servoPos2);
}
// Function to read Red Pulse Widths
int getRedPW() {
// Set sensor to read Red only
digitalWrite(S2,LOW);
digitalWrite(S3,LOW);
// Define integer to represent Pulse Width
int PW;
// Read the output Pulse Width
PW = pulseIn(sensorOut, LOW);
//PW = map(PW, 25,70,255,0);
// Return the value
return PW;
}
// Function to read Green Pulse Widths
int getGreenPW() {
// Set sensor to read Green only
digitalWrite(S2,HIGH);
digitalWrite(S3,HIGH);
// Define integer to represent Pulse Width
int PW;
// Read the output Pulse Width
PW = pulseIn(sensorOut, LOW);
//PW = map(PW, 25,70,255,0);
// Return the value
return PW;
}
// Function to read Blue Pulse Widths
int getBluePW() {
// Set sensor to read Blue only
digitalWrite(S2,LOW);
digitalWrite(S3,HIGH);
// Define integer to represent Pulse Width
int PW;
// Read the output Pulse Width
PW = pulseIn(sensorOut, LOW);
//PW = map(PW, 25,70,255,0);
// Return the value
return PW;
}
Merci pour votre aide
