Go Down

Topic: Erreur de syntaxe en ajoutant HC-05 (Read 226 times) previous topic - next topic

Rogmorin

Bonjour,

J'ai une difficulté de syntaxe, j'essais d'ajouter un HC-05 pour controler avec Bluetooth mon vehicule.
J'obtiens l'erreur suivante:
 
Code: [Select]
Arduino:1.8.8 (Windows Store 1.8.19.0) (Windows 10), Carte : "Arduino/Genuino Uno"

C:\Users\rogmo\Documents\Protocar_4_Blue_Ping_1702\Protocar_4_Blue_Ping_1702.ino: In function 'void setup()':

Protocar_4_Blue_Ping_1702:83:12: error: expected primary-expression before '.' token

     Serial2.begin(38400);

            ^

Protocar_4_Blue_Ping_1702:98:21: error: expected primary-expression before '.' token

         if ( Serial2.available())  {  serialByte = Serial2.read();  }

                     ^

Protocar_4_Blue_Ping_1702:98:59: error: expected primary-expression before '.' token

         if ( Serial2.available())  {  serialByte = Serial2.read();  }

                                                           ^

C:\Users\rogmo\Documents\Protocar_4_Blue_Ping_1702\Protocar_4_Blue_Ping_1702.ino: At global scope:

Protocar_4_Blue_Ping_1702:132:2: error: expected declaration before '}' token

  } 

  ^

exit status 1
expected primary-expression before '.' token

Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.


Mon code est le suivant:
Code: [Select]

#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
#define Serial2
 
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


int curDist = 0, pos, speedSet = 0 ;


String motorSet = "";
 

// int pos ;
//int speedSet = 0;

// Basic Bluetooth test sketch 5a for the Arduino Mega.
// AT mode using button switch
// HC-05 with EN pin and button switch
//
// Uses serial with the host computer and serial2 for communication with the Bluetooth module
//
//  Pins
//  BT VCC to Arduino 5V out. Disconnect before running the sketch
//  BT GND to Arduino GND
//  BT RX (through a voltage AMS117 reducer) to Arduino TX2 (pin 16)
//  BT TX  to Arduino RX2 (no need voltage divider)   (pin 17)
//
// When a command is entered in to the serial monitor on the computer
// the Arduino will relay it to the Bluetooth module and display the result.
//
 
char serialByte = '0';
const byte  LEDPIN = 31;

/* end of Bluetooth declare*/
 
void setup() {

/* begin of bluetooth setup section */

    pinMode(LEDPIN, OUTPUT);
 
    // communication with the host computer
    Serial.begin(9600); 
  // communication with the BT module on serial2
    Serial2.begin(38400);
    Serial.println("Do not power the BT module");
    Serial.println(" ");
    Serial.println("On the BT module, press the button switch (keep pressed, and at the same time power the BT module");
    Serial.println("The LED on the BT module should now flash on/off every 2 seconds");
    Serial.println("Can now release the button switch on the BT module");
    Serial.println(" ");
    Serial.println("After entering AT mode, type 1 and hit send");
    Serial.println(" ");
 
   
   
    // wait for the user to type "1" in the serial monitor
    while (serialByte !='1')
    {
        if ( Serial2.available())  {  serialByte = Serial2.read();  }
    } 
 
 
 
 
    // LED to show we have started the serial channels
    digitalWrite(LEDPIN, HIGH); 
 
    Serial.println(" ");
    Serial.println("AT mode.");
    Serial.println("Remember to to set Both NL & CR in the serial monitor.");
    Serial.println("The HC-05 accepts commands in both upper case and lower case");
    Serial.println(" ");
}

/* end of bluetooth setup*/

 
 } 

 

void loop()
 

/* Begin of loop Bluetooth section*/

 // listen for communication from the BT module and then write it to the serial monitor
    if ( Serial2.available() )   {  Serial.write( Serial2.read() );  }
 
    // listen for user input and send it to the HC-05
   if ( Serial.available() )   {  Serial2.write( Serial.read() );  }

   

 {
   const checkPath();
 }

 

  /* end of void loop*/
 
 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();  }



Je me doute bien que ce doit etre une erreur bete , mais je n'y arrive pas, un coup de main serait apprécié.

Merci

al1fch

#1
Feb 22, 2019, 09:28 pm Last Edit: Feb 22, 2019, 09:32 pm by al1fch
Bonsoir

Une carte Uno ne possède qu'un seul port série matériel , le compilateur ne peut donc pas accepter Serial2.begin()

En cas de besoin de port série supplémentaire sur cette carte  il faut se tourner vers un port série logiciel (SoftSerial)

Ce code provient sans doute d'un montage utilisant une carte Mega

Rogmorin

Bonjour,

Désolé je n'ai pas indiqué que c'est effectivement une carte Mega2560 que j'utilise.
J'ai eu une erreur avant celle-ci qui demandais de déclarer le serial2; c'est pourquoi j'ai ajouté au début :
#define Serial2,

je ne suis même pas certain que c'est la bonne facon de déclarer un Hardwire serial, malgré bien des recherches sur le Net je n'ai pas trouvé de réponse claire à ce sujet.

Merci

hbachetti

Supprimer la ligne #define Serial2

Ensuite il y a quelques problèmes d'accolades.
Une fonction commence et se termine toujours par une accolade.

Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

al1fch

#4
Feb 23, 2019, 10:35 pm Last Edit: Feb 23, 2019, 10:39 pm by al1fch
Si c'est une carte Mega comment se fait-il que la première ligne du compte rendu soit celle-ci .?

Code: [Select]
Arduino:1.8.8 (Windows Store 1.8.19.0) (Windows 10), Carte : "Arduino/Genuino Uno"

Qui a dit au compilateur de travailler en vue d'une exécution sur  carte UNO ?
Quelle option a été choisie dans le menu Outils/Type de cartes ?

Go Up