Demande d'aide pour ce code (Voiture téléguidée)

Du nouveau : Demande d'aide pour ce code (Voiture téléguidée) - #3 by system - Français - Arduino Forum

Bien le bonjour a vous tous,
Je suis sur un projet qui consiste a faire une voiture téléguider mais j'ais des problème au niveau de mes variable char :s
Voici mon code actuelle

/* Voiture Téléguider  0.0.1 */
/* Fonction : 
Servo Moteur : direction 1x PIN PWM(PIN 5)
Moteur : Avancer/reculer 2x PIN(PIN 7 & 8) + 1x PIN PWM(PIN 6)
Réception 433 Mhz : 1x PIN(PIN 11) */
/*-----------------------------------------------------------------------------------------*/
#include <VirtualWire.h>//433Mhz
#include <Servo.h>
uint8_t buf[VW_MAX_MESSAGE_LEN]; // Tableau qui va contenir le message recu (de taille maximum VW_MAX_MESSAGE_LEN)
uint8_t buflen = VW_MAX_MESSAGE_LEN; // Taille maximum de notre tableau
int rx_pin = 11;
int av_pin = 7;
int ar_pin = 8;
int servoMot;
int motor;
boolean marche;
char commande = "";
char message;
Servo myServo;

void setup()
{
  //Init 433Mhz Reception
  extern void vw_set_rx_pin(uint8_t rx_pin);
  vw_setup(2000);
  vw_rx_start();
  //Init servo
  myServo.attach(5);
  //Init Pin
  pinMode(av_pin, OUTPUT);
  pinMode(ar_pin, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
}
void loop()
{
  message = receiver();
  //Réception des commande
  if(message == "avance")
    commande = "avance";
  else if(message == "recule")
    commande = "recule";
  else if(massage == "turn")
    commande = "turn";
  else
  {
    int val = parseInt(message);
    if(val >= 0 && val <= 255)
    {
      if(commande == "turn")
        myServo.write(val);
      else if(commande == "avance")
      {
        digitalWrite(av_pin, HIGH);
        digitalWrite(ar_pin, LOW);
        analogWrite(6, val);
      }
      else if(commande == "recule")
      {
        digitalWrite(av_pin, LOW);
        digitalWrite(ar_pin, HIGH);
        analogWrite(6, val);
      }
      else
      {
        myServo.write(0);
        digitalWrite(av_pin, LOW);
        digitalWrite(ar_pin, LOW);
        analogWrite(6, 0);
      }
    }
  } 
}
char receiver()
{
  char message = "";
  if (vw_wait_rx_max(200)) // Si un message est recu dans les 200ms qui viennent
   {
	if (vw_get_message(buf, &buflen)) // On copie le message, qu'il soit corrompu ou non
        {
  	    for (byte i = 0; i < buflen; i++) 
  	    {
              if(buf[i] != "")
                message += buf[i];
            }
            return message;
  	}
   }
}

Merci d’avance

Bonjour,

Tu confond char (= un caractère) et String (= chaine de caractères) :wink:

Ps: tu as aussi pas mal de faute sur les noms de tes variables, ex message -> massage.
Et tu as des if inutile, voir même une String inutile.
Utilise "message" ou "commande", mais pas les deux si elles contiennent la même chose.

Merci skywodd .
Effectivement je fait beaucou(trop) de faute orthographique et de faute de frape :blush: mais j'essaye de m'améliorer :stuck_out_tongue: et il faut que j’apprenne a me relire
Pour ce qui est de mon code il se compile mais a la fin de la compilation j'obtient :

Servo\Servo.cpp.o: In function `__vector_11':
C:\Users\Adrien\Desktop\arduino\0023\libraries\Servo/Servo.cpp:103: multiple definition of `__vector_11'
VirtualWire\VirtualWire.cpp.o:C:\Users\Adrien\Desktop\arduino\0023\libraries\VirtualWire/VirtualWire.cpp:416: first defined here

J'imagine que c'est un conflit entre les deux librairie ...
Mon nouveau code

/* Voiture Téléguider  0.0.1 */
/* Fonction : 
Servo Moteur : direction 1x PIN PWM(PIN 5)
Moteur : Avancer/reculer 2x PIN(PIN 7 & 8) + 1x PIN PWM(PIN 6)
Réception 433 Mhz : 1x PIN(PIN 11) */
/*-----------------------------------------------------------------------------------------*/
#include <VirtualWire.h>//433Mhz
#include <Servo.h>
uint8_t buf[VW_MAX_MESSAGE_LEN]; //Tableau de réception du message
uint8_t buflen = VW_MAX_MESSAGE_LEN; //Longueur maximale dumessage
int rx_pin = 11;//Pin de réception 433Mhz
int av_pin = 7;//PIN pont H
int ar_pin = 8;//PIN pont H
int val;
boolean avance, recule, turn;
Servo myServo ;

void setup()
{
  //Init 433Mhz Reception
  extern void vw_set_rx_pin(uint8_t rx_pin);
  vw_setup(2000);
  vw_rx_start();
  //Init servo
  myServo.attach(5);
  //Init Pin
  pinMode(av_pin, OUTPUT);
  pinMode(ar_pin, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
}
void loop()
{
  if (vw_wait_rx_max(200)) // Si un message est recu dans les 200ms qui viennent
   {
	if (vw_get_message(buf, &buflen)) // On copie le message, qu'il soit corrompu ou non
        {
            //Réception des commande
            if(strcmp("avance", (char*)buf) == 0)
            {
              avance = true;
              recule = false;
              turn = false;
            }
            else if(strcmp("recule", (char*)buf) == 0)
            {
              avance = false;
              recule = true;
              turn = false;
            }
            else if(strcmp("turn", (char*)buf) == 0)
            {
              avance = false;
              recule = false;
              turn = true;
            }
            else
            {
              for(int i=0; i <= 255; i++)
              {
                if(sscanf((char*)buf, "%d", &i) != 0)
                  val = i;
              }
              if(val >= 0 && val <= 255)
              {
                if(turn)
                  myServo.write(val);
                else if(avance)
                {
                  digitalWrite(av_pin, HIGH);
                  digitalWrite(ar_pin, LOW);
                  analogWrite(6, val); //Vitesse
                }
                else if(recule)
                {
                  digitalWrite(av_pin, LOW);
                  digitalWrite(ar_pin, HIGH);
                  analogWrite(6, val); //Vitesse
                }
                else
                {
                  myServo.write(0);
                  digitalWrite(av_pin, LOW);
                  digitalWrite(ar_pin, LOW);
                  analogWrite(6, 0);//Vitesse
                }
              }
            }
  	}
   }
}/* Voiture Téléguider  0.0.1 */
/* Fonction : 
Servo Moteur : direction 1x PIN PWM(PIN 5)
Moteur : Avancer/reculer 2x PIN(PIN 7 & 8) + 1x PIN PWM(PIN 6)
Réception 433 Mhz : 1x PIN(PIN 11) */
/*-----------------------------------------------------------------------------------------*/
#include <VirtualWire.h>//433Mhz
#include <Servo.h>
uint8_t buf[VW_MAX_MESSAGE_LEN]; 
uint8_t buflen = VW_MAX_MESSAGE_LEN; 
int rx_pin = 11;//Pin de réception 433Mhz
int av_pin = 7;//PIN pont H
int ar_pin = 8;//PIN pont H
boolean avance, recule, turn;
Servo myServo ;

void setup()
{
  //Init 433Mhz Reception
  extern void vw_set_rx_pin(uint8_t rx_pin);
  vw_setup(2000);
  vw_rx_start();
  //Init servo
  myServo.attach(5);
  //Init Pin
  pinMode(av_pin, OUTPUT);
  pinMode(ar_pin, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
}
void loop()
{
  if (vw_wait_rx_max(200)) // Si un message est recu dans les 200ms qui viennent
   {
	if (vw_get_message(buf, &buflen))
        {
            //Réception des commande et traitement de celle-ci
            if(strcmp("avance", (char*)buf) != 0)
            {
              avance = true;
              recule = false;
              turn = false;
            }
            else if(strcmp("recule", (char*)buf) != 0)
            {
              avance = false;
              recule = true;
              turn = false;
            }
            else if(strcmp("turn", (char*)buf) != 0)
            {
              avance = false;
              recule = false;
              turn = true;
            }
            else
            {
              for(int i=0; i <= 255; i++)
              {
                if(sscanf((char*)buf, "%d", &i) != 0)
                  val = i;
              }
              if(val >= 0 && val <= 255)
              {
                if(turn)
                  myServo.write(val);
                else if(avance)
                {
                  digitalWrite(av_pin, HIGH);
                  digitalWrite(ar_pin, LOW);
                  analogWrite(6, val); //Vitesse
                }
                else if(recule)
                {
                  digitalWrite(av_pin, LOW);
                  digitalWrite(ar_pin, HIGH);
                  analogWrite(6, val); //Vitesse
                }
                else
                {
                  myServo.write(0);
                  digitalWrite(av_pin, LOW);
                  digitalWrite(ar_pin, LOW);
                  analogWrite(6, 0);//Vitesse
                }
              }
            }
  	}
   }
}

Encore un grand merci :smiley:

EDIT : J'ais changer la ligne 416 du fichier VirtualWire.cpp et j'ais mis "SIGNAL(TIMER2_COMPA_vect)" la compilation se fait correctement, mais est-ce qu'il va fonctionner ?

avez vous trouve la reponse?