#incluse #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 VMAX 5
void * operator new(size_t size) {
return malloc(size);
}
class PareChocs {
public:
byte choc(int updd) {
// On retourne l'état du pin.
// S'il est haut c'est que c'est un choc.
return digitalRead(updd);
}
PareChocs() {
// A la création du PareChocs les pins sont prets ;p
pinMode(UPDDG, INPUT);
pinMode(UPDDD, INPUT);
}
};
class Chassis {
// Le chassis a deux servomoteurs
Servo servog; // MESSAGE D'ERREUR ICI :"servo" does not name a type , lors de la compilation
Servo servod;}
// Fonction du tuto de robocop avec mes valeurs
int getNeutral(int s) {
if(s == SERVOG)
return 90;
else
return 90;
}
// Fonction du tuto de robocop
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);
}
public:
// Le chassis se déplace grâce à la fonction
// du tutoriel de robocop
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);
}
Chassis() {
// Lors de la création du chassis, l'attachement aux
// pins de l'arduino se fera automatiquement
servog.attach(10);
servod.attach(9);
}
};
class Roby {
PareChocs * parechocs;
Chassis * chassis;
byte detecterColision(int updd) {
return parechocs->choc(updd);
}
void contourner(int sens) {
chassis->move(ARRIERE);
delay(500);
chassis->move(sens);
delay(800);
}
public:
// Déclaration de l'atribut modeAutomatique
// Un puriste C++ mettrait bool à la place
// de byte. Mais je n'ai pas envie de vous
// perdre, je garde byte car vous le
// connaissez bien.
byte modeAutomatique;
Roby() {
parechocs = new PareChocs();
chassis = new Chassis();
// le mode automatique est désactivé
// à la construction de Roby
modeAutomatique = false;
}
void arreter() {
chassis->move(-1);
// va forcer la fonction de robocop
// à mettre la vitesse 0
}
void bouger(byte direction) {
// Si Roby veut bouger. Il sait le faire
// Il sait maintenant qu'il faut bouger le chassis
chassis->move(direction);
}
void agirAutomatiquement() {
if(detecterColision(UPDDG))
contourner(DROITE);
else if(detecterColision(UPDDD))
contourner(GAUCHE);
else
bouger(AVANT);
}
};
Roby * roby;
void setup() {
roby = new Roby();
roby->arreter();
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
switch(Serial.read()) {
case 'f': // avancer
roby->bouger(AVANT);
break;
case 'b': // reculer
roby->bouger(ARRIERE);
break;
case 'l': // gauche
roby->bouger(GAUCHE);
break;
case 'r': // droite
roby->bouger(DROITE);
break;
case 's': // stop
roby->arreter();
break;
case 'm': // mode
roby->arreter(); // On s'arrête et on change de mode
roby->modeAutomatique = !roby->modeAutomatique;
break;
default: // ordre inconnu
break;
}
}
if(roby->modeAutomatique)
roby->agirAutomatiquement();
delay(15);
}
[/code]
lors de la compilation j'ai ce message d'erreur ::"servo" does not name a type j'ai peut etre oublié une acolade mai je ses pas ou !