Bonjour,
C'est mon deuxième module HMC5883L, pensant que le premier était défaillant.
VCC---> 3.3V
GND---> GND
SCL---> A5
SDA---> A4
Jen'obtiens rien sans le moniteur série ! J'ai essayé dans mon jardin à l'abris des éventuels champs magnétiques. Le code est le suivant:
#include <Wire.h>
#include <HMC5883L.h>
HMC5883L compass;
int minX = 0;
int maxX = 0;
int minY = 0;
int maxY = 0;
int offX = 0;
int offY = 0;
void setup()
{
Serial.begin(9600);
// Initialize Initialize HMC5883L
while (!compass.begin())
{
delay(500);
}
// Set measurement range
compass.setRange(HMC5883L_RANGE_1_3GA);
// Set measurement mode
compass.setMeasurementMode(HMC5883L_CONTINOUS);
// Set data rate
compass.setDataRate(HMC5883L_DATARATE_30HZ);
// Set number of samples averaged
compass.setSamples(HMC5883L_SAMPLES_8);
}
void loop()
{
Vector mag = compass.readRaw();
// Determine Min / Max values
if (mag.XAxis < minX) minX = mag.XAxis;
if (mag.XAxis > maxX) maxX = mag.XAxis;
if (mag.YAxis < minY) minY = mag.YAxis;
if (mag.YAxis > maxY) maxY = mag.YAxis;
// Calculate offsets
offX = (maxX + minX)/2;
offY = (maxY + minY)/2;
Serial.print(mag.XAxis);
Serial.print(":");
Serial.print(mag.YAxis);
Serial.print(":");
Serial.print(minX);
Serial.print(":");
Serial.print(maxX);
Serial.print(":");
Serial.print(minY);
Serial.print(":");
Serial.print(maxY);
Serial.print(":");
Serial.print(offX);
Serial.print(":");
Serial.print(offY);
Serial.print("\n");
}
Merci encore une fois,
Franck
Peut-être que ton code n'arrive pas dans loop()
Dans le setup(), tu as ça
// Initialize Initialize HMC5883L
while (!compass.begin())
{
delay(500);
}
Ce serait bien de mettre un Serial.print() avant et apprès pour voir si le programme ne reste pas bloqué dans cette boucle.
Est-ce que le magnétomètre est bien détecté sur le bus I2C avec un scanner de bus ?
Ce serait bien de mettre un Serial.print() avant et apprès pour voir si le programme ne reste pas bloqué dans cette boucle.
Je sais pas où écrire Serial.print() , désolé, je suis complètement novice.
Amicalement
Franck
avec le sketch de scan de bus, j'ai ça:
I2C slave scanner
reserved adress
. no slave detected
X slave detected
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 . . . . . X . .
1 . . . . . . . . . . . . . . . .
2 . . . . . . . . . . . . . . . .
3 . . . . . . . . . . . . . . . .
4 . . . . . . . . . . . . . . . .
5 . . . . . . . . . . . . . . . .
6 . . . . . . . . . . . . . . . .
7 . . . . . . . . . . . .
1 device found on the bus
Bonjour
Pour i2c il ne faut pas initialiser wire?
Wire.begin();
J'ai maintenantune tonne de messages d'erreurs:
In file included from C:\Users\franck\Desktop\SketchesArduinoVol2\08 Sketches and Libraries\sketches\_7_NeoPixel_Compass\_7_NeoPixel_Compass.ino:5:0:
C:\Users\franck\Documents\Arduino\libraries\FastLED-master/FastLED.h:11:2: warning: #warning FastLED version 3.000.002 (Not really a warning, just telling you here.) [-Wcpp]
#warning FastLED version 3.000.002 (Not really a warning, just telling you here.)
^
In file included from C:\Users\franck\Documents\Arduino\libraries\FastLED-master/controller.h:5:0,
from C:\Users\franck\Documents\Arduino\libraries\FastLED-master/FastLED.h:29,
from C:\Users\franck\Desktop\SketchesArduinoVol2\08 Sketches and Libraries\sketches\_7_NeoPixel_Compass\_7_NeoPixel_Compass.ino:5:
C:\Users\franck\Documents\Arduino\libraries\FastLED-master/pixeltypes.h:261:33: warning: unused parameter 'DUMMY_ARG' [-Wunused-parameter]
inline CRGB operator-- (int DUMMY_ARG) __attribute__((always_inline))
^
C:\Users\franck\Documents\Arduino\libraries\FastLED-master/pixeltypes.h:276:33: warning: unused parameter 'DUMMY_ARG' [-Wunused-parameter]
inline CRGB operator++ (int DUMMY_ARG) __attribute__((always_inline))
^
In file included from C:\Users\franck\Documents\Arduino\libraries\FastLED-master/FastLED.h:30:0,
from C:\Users\franck\Desktop\SketchesArduinoVol2\08 Sketches and Libraries\sketches\_7_NeoPixel_Compass\_7_NeoPixel_Compass.ino:5:
C:\Users\franck\Documents\Arduino\libraries\FastLED-master/fastpin.h:53:47: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
port_t hival() __attribute__ ((always_inline)) { return *mPort | mPinMask; }
^
C:\Users\franck\Documents\Arduino\libraries\FastLED-master/fastpin.h:54:47: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
port_t loval() __attribute__ ((always_inline)) { return *mPort & ~mPinMask; }
^
C:\Users\franck\Documents\Arduino\libraries\FastLED-master/fastpin.h:56:46: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
port_t mask() __attribute__ ((always_inline)) { return mPinMask; }
^
C:\Users\franck\Documents\Arduino\libraries\FastLED-master/fastpin.h:116:54: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
static port_t hival() __attribute__ ((always_inline)) { return *sPort | sPinMask; }
^
C:\Users\franck\Documents\Arduino\libraries\FastLED-master/fastpin.h:117:54: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
static port_t loval() __attribute__ ((always_inline)) { return *sPort & ~sPinMask; }
^
C:\Users\franck\Documents\Arduino\libraries\FastLED-master/fastpin.h:119:53: warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
static port_t mask() __attribute__ ((always_inline)) { return sPinMask; }
^
In file included from C:\Users\franck\Documents\Arduino\libraries\FastLED-master/FastLED.h:31:0,
from C:\Users\franck\Desktop\SketchesArduinoVol2\08 Sketches and Libraries\sketches\_7_NeoPixel_Compass\_7_NeoPixel_Compass.ino:5:
C:\Users\franck\Documents\Arduino\libraries\FastLED-master/fastspi.h:24:66: warning: unused parameter 'len' [-Wunused-parameter]
static __attribute__((always_inline)) inline void postBlock(int len) {}
^
In file included from C:\Users\franck\Documents\Arduino\libraries\FastLED-master/clockless.h:22:0,
from C:\Users\franck\Documents\Arduino\libraries\FastLED-master/FastLED.h:32,
from C:\Users\franck\Desktop\SketchesArduinoVol2\08 Sketches and Libraries\sketches\_7_NeoPixel_Compass\_7_NeoPixel_Compass.ino:5:
C:\Users\franck\Documents\Arduino\libraries\FastLED-master/clockless_trinket.h:35:82: warning: unused parameter 'loopvar' [-Wunused-parameter]
template<> __attribute__((always_inline)) inline void _dc<-6>(register uint8_t & loopvar) {}
^
C:\Users\franck\Documents\Arduino\libraries\FastLED-master/clockless_trinket.h:36:82: warning: unused parameter 'loopvar' [-Wunused-parameter]
template<> __attribute__((always_inline)) inline void _dc<-5>(register uint8_t & loopvar) {}
^
C:\Users\franck\Documents\Arduino\libraries\FastLED-master/clockless_trinket.h:37:82: warning: unused parameter 'loopvar' [-Wunused-parameter]
template<> __attribute__((always_inline)) inline void _dc<-4>(register uint8_t & loopvar) {}
^
C:\Users\franck\Documents\Arduino\libraries\FastLED-master/clockless_trinket.h:38:82: warning: unused parameter 'loopvar' [-Wunused-parameter]
template<> __attribute__((always_inline)) inline void _dc<-3>(register uint8_t & loopvar) {}
^
C:\Users\franck\Documents\Arduino\libraries\FastLED-master/clockless_trinket.h:39:82: warning: unused parameter 'loopvar' [-Wunused-parameter]
template<> __attribute__((always_inline)) inline void _dc<-2>(register uint8_t & loopvar) {}
^
C:\Users\franck\Documents\Arduino\libraries\FastLED-master/clockless_trinket.h:40:82: warning: unused parameter 'loopvar' [-Wunused-parameter]
template<> __attribute__((always_inline)) inline void _dc<-1>(register uint8_t & loopvar) {}
^
C:\Users\franck\Documents\Arduino\libraries\FastLED-master/clockless_trinket.h:41:81: warning: unused parameter 'loopvar' [-Wunused-parameter]
template<> __attribute__((always_inline)) inline void _dc<0>(register uint8_t & loopvar) {}
^
C:\Users\franck\Documents\Arduino\libraries\FastLED-master/clockless_trinket.h:42:81: warning: unused parameter 'loopvar' [-Wunused-parameter]
template<> __attribute__((always_inline)) inline void _dc<1>(register uint8_t & loopvar) {asm __volatile__("mov r0,r0":::);}
^
C:\Users\franck\Documents\Arduino\libraries\FastLED-master/clockless_trinket.h:43:81: warning: unused parameter 'loopvar' [-Wunused-parameter]
template<> __attribute__((always_inline)) inline void _dc<2>(register uint8_t & loopvar) {asm __volatile__("rjmp .+0":::);}
^
C:\Users\franck\Desktop\SketchesArduinoVol2\08 Sketches and Libraries\sketches\_7_NeoPixel_Compass\_7_NeoPixel_Compass.ino: In function 'void loop()':
C:\Users\franck\Desktop\SketchesArduinoVol2\08 Sketches and Libraries\sketches\_7_NeoPixel_Compass\_7_NeoPixel_Compass.ino:76:71: warning: integer overflow in expression [-Woverflow]
fixedHeadingDegrees = map (headingDegrees * 100, 240 * 100, 360 * 100, 180 * 100, 360 * 100) / 100.00;
^
C:\Users\franck\Desktop\SketchesArduinoVol2\08 Sketches and Libraries\sketches\_7_NeoPixel_Compass\_7_NeoPixel_Compass.ino:76:93: warning: integer overflow in expression [-Woverflow]
fixedHeadingDegrees = map (headingDegrees * 100, 240 * 100, 360 * 100, 180 * 100, 360 * 100) / 100.00;
J'ai une bonne et une mauvaise nouvelle :
La bonne c'est que tu n'as aucun message d'erreurs, que des warnings
La mauvaise c'est qu'un warning ignoré est pire qu'un message d'erreur !
Un message d'erreur empêche la production d'un exécutable foireux. Un warning non, ton programme est compilé et téléversé malgré des avertissements plus ou moins important/grave :
Exemple d'un warning pas grave, sans grande incidence :
C:\Users\franck\Documents\Arduino\libraries\FastLED-master/clockless_trinket.h:43:81: warning: unused parameter 'loopvar' [-Wunused-parameter]
traduction à la volée : Le paramètre loopvar n'est pas utilisé (le compilateur le fait remarquer, pour lui c'est louche).
Exemple plus grave (produisant des résultats faux) :
C:\Users\franck\Desktop\SketchesArduinoVol2\08 Sketches and Libraries\sketches\_7_NeoPixel_Compass\_7_NeoPixel_Compass.ino:76:93: warning: integer overflow in expression [-Woverflow]
fixedHeadingDegrees = map (headingDegrees * 100, 240 * 100, 360 * 100, 180 * 100, 360 * 100) / 100.00;
Traduction : dépassement des capacités d'un int dans l'expression. Là il y a perte d'information, il faut envisager de faire les calculs avec des long :
fixedHeadingDegrees = map (headingDegrees * 100L, 240 * 100L, 360 * 100L, 180 * 100L, 360 * 100L) / 100.00;
merci,
Y'en a t-il d'autres?
Amicalement
Franck
D'autres warnings "graves", non pas vu !
neodali
November 20, 2019, 3:01pm
10
Bonjour,
J'ai fini par trouver le bug.
Les chips que j'achetais, croyant qu'il s'agissait d'HMC5883L étaient en fait des fakes bas de gamme étiquetés (code spécial) QMC5883L.
voir: http://qqtrading.com.my/3-axis-magnetic-field-sensor-module-gy-271-hmc5883l
A MON AVIS A DIFFUSER SI PAS CONNU.
Happy Black Friday
Franck
al1fch
November 21, 2019, 7:59am
12
Bonjour
les différences entre HMC et QMC ont déjà été abordées à plusieurs reprises sur ce forum
par exemple içi : Boussole HMC5883 (GY-271) - Français - Arduino Forum