Bluetooth+ RX/TX + Arduino Uno


bonjour tout le monde,

je suis en train de travailler sur un projet arduino actuellement.

j'aimerai faire un truc qui semble assez simple mais sur lequel je suis bloquée depuis peu.
je dois commander via une liaison bluetooth un compas digital monté sur le premier arduino, qui à son tour via une liaison rf commande un servomoteur monté sur le 2ème.

la liaison bluetooth se fait correctement, de l'émetteur au récepteur je pense que ça passe aussi vu que je visualise sur le moniteur série toutes les valeurs prises par le compas..... seulement le servomoteur ne bouge pas comme je le souhaite, il réagit juste un peu au début puis rien après.

voici le programme pour l'émetteur:

code: [select]

// reference i2c library
#include <wire.h>
#include <hmc5883l.h>
#include <virtualwire.h>

const int led_pin = 13;
const int transmit_pin = 3;
const int receive_pin = 11;
const int transmit_en_pin = 12;
const int servo_pin=8;
// store our compass variable.
hmc5883l compass;
// record errors may occur in compass.
int error = 0;
char msg[6];

int x;

// out setup routine, here configure microcontroller , compass.
void setup()
{
  // initialize serial port.
  serial.begin(9600);
   
  serial.println("starting i2c interface.");
  wire.begin(); // start i2c interface.

  serial.println("constructing new hmc5883l");
  compass = hmc5883l(); // construct new hmc5883 compass.
   
  serial.println("setting scale +/- 1.3 ga");
  error = compass.setscale(1.3); // set scale of compass.
  if(error != 0) // if there error, print out.
    serial.println(compass.geterrortext(error));
 
  serial.println("setting measurement mode continous.");
  error = compass.setmeasurementmode(measurement_continuous); // set measurement mode continuous
  if(error != 0) // if there error, print out.
    serial.println(compass.geterrortext(error));
   
   
   
   vw_setup(2000);
   vw_set_tx_pin(receive_pin);
   vw_set_tx_pin(transmit_pin);
}

// our main program loop.
void loop()
{
  // retrive raw values compass (not scaled).
  magnetometerraw raw = compass.readrawaxis();
  // retrived scaled values compass (scaled configured scale).
  magnetometerscaled scaled = compass.readscaledaxis();
 
  // values accessed so:
  int milligauss_onthe_xaxis = scaled.xaxis;// (or yaxis, or zaxis)

  // calculate heading when magnetometer level, correct signs of axis.
  float heading = atan2(scaled.yaxis, scaled.xaxis);

  float declinationangle = 0.0457;
  heading += declinationangle;
 
  // correct when signs reversed.
  if(heading < 0)
    heading += 2*pi;
   
  // check wrap due addition of declination.
  if(heading > 2*pi)
    heading -= 2*pi;
   
  // convert radians degrees readability.
  float headingdegrees = heading * 180/m_pi;

  // output data via serial port.
  output(raw, scaled, heading, headingdegrees);

}
// output data down serial port.
void output(magnetometerraw raw, magnetometerscaled scaled, float heading, float headingdegrees)
{
   
   serial.print(headingdegrees);
   serial.println(" degrees   \t");
   
dtostrf(headingdegrees,6, 2, msg);
vw_send((uint8_t *)msg, strlen(msg));
vw_wait_tx();
delay(200);
}


***le programme suivant est celui du receveur:

code: [select]
#include <virtualwire.h>
#include <servotimer2.h>

servotimer2 myservo;

void setup()
{
    serial.begin(9600); // debugging only
    myservo.attach(9);
     serial.println("setup");

    // initialise io , isr
    vw_set_ptt_inverted(true); // required dr3100
    vw_setup(2000); // bits per sec

    vw_rx_start();       // start receiver pll running
}

void loop()
{
    uint8_t buf[vw_max_message_len];
    uint8_t buflen = vw_max_message_len;

    if (vw_get_message(buf, &buflen)) // non-blocking
    {
int i;

       
serial.print("got: ");

for (i = 0; < buflen; i++)
{
        serial.print(buf[i]);
        serial.print(" ");
     
        }
        serial.println(" ");
        serial.println(strtod ((char *) buf, null));
       
        delay(50);
        myservo.write(strtod ((char *) buf, null));
       

}

}


aurais-je fais une erreur dans mes codes?

je dirai pour commencer que strtod ((char *) buf, null) ça devrait plutôt être strtod (buf, null)


Arduino Forum > International > Français (Moderators: jfs, Snootlab) > Bluetooth+ RX/TX + Arduino Uno


arduino

Comments

Popular posts from this blog

Convierte tu Raspberry en un NAS. Firmware fvdw-sl 15.3 - Raspberry Pi Forums

How to format a Get Request

avrdude: verification error, first mismatch at byte 0x0000 0x0c != 0x62