Bonjour,
J'ai utilisé un programme de ¨Avoid collision¨ avec shield L293D sur une MEGA2560 R3, j'utilise les sorties M1 et M4, et tout fonctionnait.
Dans le programme originel ils utilisaient un servo pour diriger le sonar de détection, j'ai enlevé les lignes associé au mouvement du sonar et ca fonctionnait.
Là je tente d'ajouter une commande par IR Remote, car le ¨proto car¨ s'arrête si il rencontre un obstacle sans réussir à l'éviter...
J'ai récupéré le code de lecture du IR et j'ai tenté d'y associer des appels à des fonctions qui semblent être des blocs indépendants .
Ex: en lisant le bouton IR ¨PAUSE¨ je voulais appeler la fonction ; void checkForward () qui est dans le void loop. voir ci-dessous les extraits
if (irrecv.decode(&results)) // have we received an IR signal?
{
switch(results.value)
{
case 0xFF02FD: //PAUSE button pressed
// set all motors forward full speed
Serial.println("FORWARD");
motorSet = "FORWARD";
checkForward();
break;
void checkForward() {
if (motorSet=="FORWARD")
{Serial.println("Forward");
motorR.run(FORWARD); motorL.run(FORWARD); }
}
Bref en compilant on me donne comme erreur que
' checkForward' was not declare in the scope
Je ne comprends pas comment déclarer une fonction... bref très mêlé en ce moment......j'ai lu des tuto sur la déclaration de variable mais comme ce n'est pas vraiment une variable je ne sais comment régler cela....
voir code complet
[code]
#include <IRremote.h>
#include <IRremoteInt.h>
//14CORE OBSTACLE AVOINDACE ROBOT
//======================TEST CODE
#include <NewPing.h> //
#include <AFMotor.h> // You can download the code library below
// Ultranic Pin Configuration
#define TRIG_PIN 22 //A5
#define ECHO_PIN 24 //A4
#define MAX_DISTANCE 400
#define MAX_SPEED 200
#define MAX_SPEED_OFFSET -8
#define COLL_DIST 20
#define TURN_DIST COLL_DIST+20
#define ACT_TIME 250
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);
AF_DCMotor motorR(1, MOTOR12_1KHZ); // Set motor , MOTOR12_1KHZ); // Set motor Right, 1kHz PWM
AF_DCMotor motorL(4, MOTOR34_1KHZ); // Set motor , MOTOR34_1KHZ); // Set motor Left, 1kHz PWM
//IR receiver code
int receiver = 29; // Signal Pin of IR receiver to Arduino Digital Pin 29
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results; // create instance of 'decode_results'
String motorSet = "";
int curDist = 0, pos, speedSet = 0 ;
void setup() {
/* set IR receiver set up
*/
// set up de IR reciver
Serial.begin(9600);
Serial.println("IR RECEIVER BUTTON DECODE");
irrecv.enableIRIn(); // Start the receiver
}
/*-----( Function )-----*/
void translateIR() // takes action based on IR code received
// describing Remote IR codes
{ switch (results.value)
{
case 0xFFA25D: Serial.println("POWER"); break;
case 0xFFE21D: Serial.println("FUNC/STOP"); break;
case 0xFF629D: Serial.println("VOL+"); break;
case 0xFF22DD: Serial.println("TURN LEFT"); break;
case 0xFF02FD: Serial.println("FORWARD"); break;
case 0xFFC23D: Serial.println("TURN RIGHT"); break;
case 0xFFE01F: Serial.println("DOWN"); break;
case 0xFFA857: Serial.println("VOL-"); break;
case 0xFF906F: Serial.println("UP"); break;
case 0xFF9867: Serial.println("EQ"); break;
case 0xFFB04F: Serial.println("ST/REPT"); break;
case 0xFF6897: Serial.println("0"); break;
case 0xFF30CF: Serial.println("1"); break;
case 0xFF18E7: Serial.println("2"); break;
case 0xFF7A85: Serial.println("3"); break;
case 0xFF10EF: Serial.println("4"); break;
case 0xFF38C7: Serial.println("5"); break;
case 0xFF5AA5: Serial.println("6"); break;
case 0xFF42BD: Serial.println("7"); break;
case 0xFF4AB5: Serial.println("8"); break;
case 0xFF52AD: Serial.println("9"); break;
case 0xFFFFFFFF: Serial.println(" REPEAT");break;
default:
Serial.println("OTHER BUTTON");
}// End Case
delay(250);// Do not get immediate repeat
} //END translateIR
void loop()
{
int checkPath();
if (irrecv.decode(&results)) // have we received an IR signal?
{
switch(results.value)
{
case 0xFF02FD: //PAUSE button pressed
// set all motors forward full speed
Serial.println("FORWARD");
motorSet = "FORWARD";
checkForward();
break;
case 0xFFC23D: //FAST FORWARD button pressed, set turn to right
// set motor left forward, motor right reverse
Serial.println("TURN RIGHT");
motorSet = "TURN RIGHT";
turnRight();
break;
case 0xFF22DD: //BACK,REVERSE button pressed set turn to left
//set motor left reverse, motor right forward
Serial.println("TURN LEFT");
turnLeft();
break;
case 0xFF9867: //EQ button pressed
// set motor left reverse, motor righ reverse
Serial.println("BACKWARD");
moveBackward();
break;
case 0xFFE21D: //STP button pressed
// stop all motor
Serial.println("MOTORS STOPPED");
moveStop();
break;
}
irrecv.resume(); // receive the next value
}
void checkPath() {
int curLeft = 0; int curRight = 0; int curFront = 0;
curDist = 0;
checkForward();
for (pos = 135; pos >= 45; pos -= 45) {
curDist = readPing();
Serial.println(curDist);
if (curDist < COLL_DIST) { checkCourse(); break; }
if (curDist < TURN_DIST) { changePath(); }
}
int readPing() {
int cm = 0;
while (cm < 2) {int uS = sonar.ping(); cm = uS/US_ROUNDTRIP_CM;}
return cm;
}
}
void checkForward() {
if (motorSet=="FORWARD")
{Serial.println("Forward");
motorR.run(FORWARD); motorL.run(FORWARD); }
}
void changePath() {
if (pos < 90) { veerLeft(); }
if (pos > 90) { veerRight(); }
}
void veerRight() {
Serial.println("veerRight");
motorR.run(BACKWARD); motorL.run(FORWARD);
delay(ACT_TIME);
motorR.run(FORWARD); motorL.run(FORWARD);
motorSet = "FORWARD";
}
void veerLeft() {
Serial.println("veerLeft");
motorL.run(BACKWARD); motorR.run(FORWARD);
delay(ACT_TIME);
motorL.run(FORWARD); motorR.run(FORWARD);
motorSet = "FORWARD";
}
void checkCourse() {
moveBackward();
delay(ACT_TIME);
moveStop();
setCourse();
}
void setCourse() {
if (pos < 90) { turnRight(); }
if (pos > 90) { turnLeft(); }
}
void moveBackward() {
Serial.println("Backward");
motorSet = "BACKWARD";
motorR.run(BACKWARD); // Turn right motor backward
motorL.run(BACKWARD); // Turn left motor backward
for (speedSet = 150; speedSet < MAX_SPEED; speedSet +=2)
{
motorL.setSpeed(speedSet);
motorR.setSpeed(speedSet+MAX_SPEED_OFFSET);
delay(5);
}
}
void moveForward() {
motorSet = "FORWARD";
checkForward();
for (speedSet = 150; speedSet < MAX_SPEED; speedSet +=2) {
motorL.setSpeed(speedSet);
motorR.setSpeed(speedSet+MAX_SPEED_OFFSET);
delay(4);
}
}
void moveStop() { motorR.run(RELEASE); motorL.run(RELEASE); }
void turnRight() {
motorSet = "RIGHT";
motorR.run(FORWARD); // Turn right motor forward
motorL.run(BACKWARD); // Turn left motor backward
delay(ACT_TIME);
motorSet = "FORWARD";
checkForward();
}
void turnLeft() {
motorSet = "LEFT";
motorR.run(BACKWARD); // Turn right motor backward
motorL.run(FORWARD); // Turn left motor forward
delay(ACT_TIME);
motorSet = "FORWARD";
checkForward(); }
}
J'essai de comprendre si je suis sur une fausse route dans ma méthode ou si l'idée de base est raisonnable, si oui, alors comment résoudre ce pépin.... merci de m'éclairer