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:
***le programme suivant est celui du receveur:
aurais-je fais une erreur dans mes codes?
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
Post a Comment