while(slave.available() < 2);
a = slave.read();
Serial.print(a);
Bien, ici "a" est un int, soit deux octets.
Serial.write() envoi un octet (valeur max 255 donc).
Serial.write() lit un octet.
Tu attends deux octet puis tu en lit un octet avec Serial.read().
Tu vois où est le problème ?
Sinon petite remarque :
a = Wire.read() << 8; //axe Z
a += Wire.read();
Si tu veut "assembler" deux octets pour faire un word (16 bits) préfère les opérations binaire (bitwise) :
a = ((uint16_t) Wire.read() << 8) | Wire.read(); //axe Z
Alors, alors.....
L’emetteur marche impecc, données de l’accelero sur le moniteur – donc Leo1 et ITG OK
Après avoir tenté différents sketch, exemples en bas de code recepteur,
J’ai toujours [-1], c'est-à-dire, je pense, que je n’ai pas de liaison RxTx !!!!!
Déclaration fausse sous SoftwareSerial avec D10 et D11 ?
J"ai meme recroisé les fils Rx-Tx avec D10-D11, rien....
Je commence à sécher sérieusement
emission
#include <Wire.h>
#include <SoftwareSerial.h>
int a = 0;
void setup()
{
Serial.begin(9600);
Wire.begin();
GyroInit();
}
void GyroInit()
{
Wire.beginTransmission(0x68); // address of the gyro
// reset the gyro
Wire.write(0x3E);
Wire.write(0x80);
Wire.endTransmission();
Wire.beginTransmission(0x68); // address of the gyro
// low pass filter 10 Hz
Wire.write(0x16);
Wire.write(0x1D);
Wire.endTransmission();
Wire.beginTransmission(0x68); // address of the gyro
// use internal oscillator
Wire.write(0x3E);
Wire.write(0x01);
Wire.endTransmission();
}
void GyroRead()
{
Wire.beginTransmission(0x68); // address of the gyro
Wire.write(0x1D); // set read pointer
Wire.endTransmission();
Wire.requestFrom(0x68, 6); // read in 3 axis of data, 16 bits each, print to terminal
a = ((uint16_t) Wire.read() << 8) | Wire.read(); //axe X
a = ((uint16_t) Wire.read() << 8) | Wire.read(); //axe Y
a = ((uint16_t) Wire.read() << 8) | Wire.read(); //axe Z
//Serial.println(a);
Serial.write(a);
delay (250);//for debug
}
void loop()
{
GyroRead();
}
Recepteur
#include <SoftwareSerial.h>
#define txPin 10
#define rxPin 11
SoftwareSerial slave(txPin,rxPin); // RX, TX
int a = 0; //horiz move-pointer-itg.
void setup()
{
Serial.begin(9600);
slave.begin(9600);
}
void loop()
{
while(slave.available() > 2);
a = (uint16_t) slave.read() | ((uint16_t) slave.read() << 8);
Serial.println(a);
delay (250); //for debug
}
/*
************************************************************************************
while (Serial.available() >= 3) {
if (Serial.read() == 0xff) {
int val = Serial.read();
int val2 = Serial.read();
int val3 = Serial.read();
Serial.flush();
a=((val3<<16)|(val2<<8)|(val));
Serial.println(a);
******************************************************************************************
while (slave.available() >= 3) {
if (slave.read() == 0xff) { // le premier octet, équivaut depart
a = (slave.read() << 8) | (slave.read());
//Serial.print(0xff);
Serial.println("Data from itg Z: "); //for debug
Serial.println(slave.read(), DEC);
//Serial.println((a >> 8) & 0xFF);
******************************************************************************************
}
}
/* while(slave.available() < 2);
a = slave.read() + (slave.read() << 8); //axe Z
Serial.print(a & 0xFF);
Serial.println((a >> 8) & 0xFF);
************************************************************************************
*/
Mise à jour, pour tenter de comprendre mes pb de transmission.
j'écris 82, donc soit un R ou un 82 suivant 1 ou deux octets,
et j'essaie de recupérer quelque chose de l"autre coté.
En fait, vu mon niveau, je ne sais pas si j'ai une erreur d'écriture de code ou une panne sur la transmission
série entre TxRx et D8-D9 avec SoftwareSerial et comment y remedier.
Sur la leonardo :
Serial -> port série usb --------------- donc ordi: ok
Serial1 -> port série hardware ---------- c'est ce que j'affecte au pin 10 et 11 avec SoftwareSerial
Questions: à part Serial.print() pour valider le départ des données?
Je dois pouvoir lire les données de la liaison serie en les renvoyant sur le pc via l'usb ?(d"après ton lien et celui-là Akafugu Corporation)
ou je dois basculer à la Mega ?
gillianlcr:
Serial1 -> port série hardware ---------- c'est ce que j'affecte au pin 10 et 11 avec SoftwareSerial
erreur de pins: Serial1 est sur les pins 0 (RX) et 1 (TX), avec la librairie Serial car série hardware (donc avec un tampon disponible qui sécurise la réception de data)
"On the Leonardo, the main Serial class refers to the virtual serial driver on the Leonardo for connection to your computer over USB. It's not connected to the physical pins 0 and 1 as it is on the Uno and earlier boards. To use the hardware serial port (pins 0 and 1, RX and TX), use Serial1. (See the Serial reference pages for more information.)" Serial - Arduino Reference
donc recabler et remplacer "slave.read" par "Serial1.read" etc....