0% found this document useful (0 votes)
51 views

Robot

This document contains code for an Arduino project that controls a robot vehicle. It defines constants, variables, and functions for controlling motors, reading sensors, and following lines or detecting colors. The code sets up pins for motor control and sensors, then enters a loop that makes the robot follow lines using sensor inputs until detecting an obstacle, at which point it stops, counts turns at a crossing, and can react to detected colors before stopping again.
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
51 views

Robot

This document contains code for an Arduino project that controls a robot vehicle. It defines constants, variables, and functions for controlling motors, reading sensors, and following lines or detecting colors. The code sets up pins for motor control and sensors, then enters a loop that makes the robot follow lines using sensor inputs until detecting an obstacle, at which point it stops, counts turns at a crossing, and can react to detected colors before stopping again.
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 5

#include <Arduino.

h>
#include <Wire.h>
#include <SoftwareSerial.h>

double angle_rad = PI/180.0;


double angle_deg = 180.0/PI;
void AVANCER_V1();
double IN1;
double IN2;
double IN3;
double IN4;
void DROITE_V1();
void AVANCER_V2();
void GAUCHE_V2();
void SUIVEUR_VITESSE1();
double Cap_G;
double Cap_D;
void ARRETER();
void GAUCHE_V1();
void DROITE_V2();
void TD_Croisement();
void SUIVEUR_VITESSE2();
void REAGIR_COULEUR();
double ROUGE;
double VERT;
const int TCS230_S0 = 14;
const int TCS230_S1 = 15;
const int TCS230_S2 = 16;
const int TCS230_S3 = 11;
const int TCS230_OUT = 10;
void prepareTCS230(int s2, int s3) {
digitalWrite(TCS230_S2,s2);
digitalWrite(TCS230_S3,s3);
}
void prepareToReadRedTCS230() {
prepareTCS230(LOW, LOW);
}
void prepareToReadGreenTCS230() {
prepareTCS230(HIGH, HIGH);
}
void prepareToReadBlueTCS230() {
return prepareTCS230(LOW, HIGH);
}
void prepareToReadClearTCS230() {
prepareTCS230(HIGH, LOW);
}
void setColorWithFilter(int filter) {
return filter == 1 ? prepareToReadRedTCS230() : (filter == 2 ?
prepareToReadGreenTCS230() : (filter == 3) ? prepareToReadBlueTCS230() :
prepareToReadClearTCS230());
}
double Cap_Obs_Droit;
double Cap_Obs_Avant;
double COMPTEUR;
float getDistance(int trig,int echo){
pinMode(trig,OUTPUT);
digitalWrite(trig,LOW);
delayMicroseconds(2);
digitalWrite(trig,HIGH);
delayMicroseconds(10);
digitalWrite(trig,LOW);
pinMode(echo, INPUT);
return pulseIn(echo,HIGH,30000)/58.0;
}

void AVANCER_V1()
{
analogWrite(IN1,175);
analogWrite(IN2,0);
analogWrite(IN3,175);
analogWrite(IN4,0);
}

void DROITE_V1()
{
analogWrite(IN1,150);
analogWrite(IN2,0);
analogWrite(IN3,0);
analogWrite(IN4,0);
}

void AVANCER_V2()
{
analogWrite(IN1,135);
analogWrite(IN2,0);
analogWrite(IN3,135);
analogWrite(IN4,0);
}

void GAUCHE_V2()
{
analogWrite(IN1,0);
analogWrite(IN2,0);
analogWrite(IN3,120);
analogWrite(IN4,0);
}

void SUIVEUR_VITESSE1()
{
if((((Cap_G)==(1))) && (((Cap_D)==(1)))){
AVANCER_V1();
}
if((((Cap_G)==(1))) && (((Cap_D)==(0)))){
DROITE_V1();
}
if((((Cap_G)==(0))) && (((Cap_D)==(1)))){
GAUCHE_V1();
}
}

void ARRETER()
{
analogWrite(IN1,0);
analogWrite(IN2,0);
analogWrite(IN3,0);
analogWrite(IN4,0);
}
void GAUCHE_V1()
{
analogWrite(IN1,0);
analogWrite(IN2,0);
analogWrite(IN3,150);
analogWrite(IN4,0);
}

void DROITE_V2()
{
analogWrite(IN1,120);
analogWrite(IN2,0);
analogWrite(IN3,0);
analogWrite(IN4,0);
}

void TD_Croisement()
{
analogWrite(IN1,175);
analogWrite(IN2,0);
analogWrite(IN3,0);
analogWrite(IN4,175);
}

void SUIVEUR_VITESSE2()
{
if((((Cap_G)==(1))) && (((Cap_D)==(1)))){
AVANCER_V2();
}
if((((Cap_G)==(1))) && (((Cap_D)==(0)))){
DROITE_V2();
}
if((((Cap_G)==(0))) && (((Cap_D)==(1)))){
GAUCHE_V2();
}
}

void REAGIR_COULEUR()
{
pinMode(TCS230_S0, OUTPUT);
pinMode(TCS230_S1, OUTPUT);
pinMode(TCS230_S2, OUTPUT);
pinMode(TCS230_S3, OUTPUT);
pinMode(TCS230_OUT, INPUT);
digitalWrite(TCS230_S0, (100 == 0 || 100 == 2) ? LOW : HIGH);
digitalWrite(TCS230_S1, (100 == 0 || 100 == 20) ? LOW : HIGH);
setColorWithFilter(1);
ROUGE = pulseIn(TCS230_OUT, digitalRead(TCS230_OUT) == HIGH ? LOW : HIGH);
setColorWithFilter(2);
VERT = pulseIn(TCS230_OUT, digitalRead(TCS230_OUT) == HIGH ? LOW : HIGH);
if((ROUGE) < (VERT)){
ARRETER();
}
if((VERT) < (ROUGE)){
SUIVEUR_VITESSE2();
}
}
void setup()
{
Serial.begin(9600);

void loop(){
IN1 = 3;
IN2 = 5;
IN3 = 6;
IN4 = 9;
Cap_Obs_Droit = getDistance(13,12);
pinMode(IN1,OUTPUT);
pinMode(IN2,OUTPUT);
pinMode(IN3,OUTPUT);
pinMode(IN4,OUTPUT);
pinMode(7,INPUT);
pinMode(8,INPUT);
delay(200);
while(!((Cap_Obs_Droit) < (5.0)))
{

Cap_G = digitalRead(7);
Cap_D = digitalRead(8);
Cap_Obs_Droit = getDistance(13,12);
SUIVEUR_VITESSE1();
}
delay(200);
Cap_G = digitalRead(7);
Cap_D = digitalRead(8);
while(!((((Cap_G)==(0))) && (((Cap_D)==(0)))))
{

Cap_G = digitalRead(7);
Cap_D = digitalRead(8);
Cap_Obs_Avant = getDistance(4,2);
if((Cap_Obs_Avant) < (7)){
ARRETER();
}else{
SUIVEUR_VITESSE2();
}
}
delay(200);
Cap_Obs_Avant = getDistance(4,2);
while(!((Cap_Obs_Avant) < (17.0)))
{

Cap_Obs_Avant = getDistance(4,2);
ARRETER();
}
delay(2000);
Cap_G = digitalRead(7);
Cap_D = digitalRead(8);
COMPTEUR = 0;
while(!((((Cap_G)==(0))) && ((((Cap_D)==(0))) && (((COMPTEUR)==(2))))))
{

Cap_Obs_Avant = getDistance(4,2);
Cap_G = digitalRead(7);
Cap_D = digitalRead(8);
if((((Cap_G)==(0))) && (((Cap_D)==(0)))){
COMPTEUR += 1;
AVANCER_V2();
delay(200);
TD_Croisement();
delay(200);
}else{
if((Cap_Obs_Avant) < (7.0)){
ARRETER();
}else{
SUIVEUR_VITESSE2();
REAGIR_COULEUR();
}
}
}
ARRETER();
}

You might also like