Aller au contenu


Contenu de Abdessamad Abalhi

Il y a 1 élément(s) pour Abdessamad Abalhi (recherche limitée depuis 03-avril 13)


#64653 Arduino Cotoxis probmlème détection obstacle

Posté par Abdessamad Abalhi sur 06 juin 2015 - 12:10 dans Programmation

Bonjour,

 

j'ai voulu réaliser cotoxis V2 avec l'arduino. j'ai réaliser tout le montage en respectant le tout. Mon problème est assez simple. Mon robot avance, mon capteur détecte les obstacle mais le robot ne réasis pas, il continue tout droit.

J'ai pas mis de micro-rupteur comme dans le tuto mais je n'ai pas changé le code. Pourrais-ce être un problème?(je pense pas).

 

dans le tuto c'est un duelimanova qui est t'uliliser et dans la tuto, un DUemilanova, cela pourrais-til posé un problème?

 

et si quelqu'un pourrais m'expliquer ce qu'est "intvldr" s'il vous plait ?

 

je suis débutant 

 

Je vous remercie de votre attention !

 

j'ai utilisé ce code:

 
 
#include <Servo.h>

#define AVANT 1
#define ARRIERE 0
#define GAUCHE 2
#define DROITE 3

#define SERVOG 1
#define SERVOD 0

#define UPDDG 3
#define UPDDD 4

#define SHARP 4

#define VMAX 5

Servo servog;
Servo servod;

int vLdr = 5;

int getNeutral(int s)
{
if(s == SERVOG)
return 86;
else
return 84;
}


void handleS(int s, int speed)
{
//Vitesse :
// 0 -> 0; 1 -> 1; 2 -> 3; 3 -> 8; 4 -> 10; v => 5 -> 30
int tab[6] = {0,1,3,8,10,30};
int pos = getNeutral(s);

int acc;
if (speed < 0)
acc = - tab[abs(speed)];
else
acc = tab[speed];

if(s == SERVOG)
servog.write(pos += acc);
else
servod.write(pos -= acc);
}


void move(int direction)
{
int m1 = 0, m2 = 0;
switch(direction)
{
case DROITE: m1 = 1; m2 = -1; break;
case GAUCHE: m1 = -1; m2 = 1; break;
case AVANT: m1 = 1; m2 = 1; break;
case ARRIERE: m1 = -1; m2 = -1; break;
}
handleS(SERVOG, m1*VMAX);
handleS(SERVOD, m2*VMAX);
}

void handleUPDD(int updd)
{
if(digitalRead(updd) == HIGH)
{
move(ARRIERE);
delay(500);

if (updd == UPDDG)
{
move(DROITE);
}
else
{
move(GAUCHE);
}
delay(800);
}
}

void sharp()
{
int v = analogRead(SHARP);
if (v >= 180)
{
move(ARRIERE);
delay(300);
move(DROITE);
delay(900);
}
else if (v >= 100)
{
handleS(SERVOG, VMAX);
handleS(SERVOD, 0);
delay(1500);
}
}
void setup()
{
pinMode(UPDDG, INPUT);
pinMode(UPDDD, INPUT);

Serial.begin(9600);
servog.attach(10);
servod.attach(9);
move(AVANT);
}

void loop()
{
handleUPDD(UPDDG);
handleUPDD(UPDDD);
sharp();
move(AVANT);
delay(100);
}