Pages: [1]   Go Down
Author Topic: Demande d'aide pour ce code (Voiture téléguidée)  (Read 775 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Du nouveau : http://arduino.cc/forum/index.php/topic,125332.msg942532.html#msg942532

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
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 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
« Last Edit: October 04, 2012, 01:22:42 pm by adrien4607 » Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Tu confond char (= un caractère) et String (= chaine de caractères) smiley-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.
« Last Edit: October 02, 2012, 11:39:03 am by skywodd » Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Newbie
*
Karma: 0
Posts: 21
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci skywodd *.*
Effectivement je fait beaucou(trop) de faute orthographique et de faute de frape  smiley-red mais j'essaye de m'améliorer :p 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 :
Code:
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
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-grin


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 ?
« Last Edit: October 02, 2012, 03:28:25 pm by adrien4607 » Logged

Pages: [1]   Go Up
Jump to: