Ho acquistato online il modulo compass HMC5883L, dopo aver scaricato la relativa libreria, sto provando a calbrarla attraverso il codice esempio presente all'interno della libreria:
#include <Wire.h>
#include <HMC5883L.h>
HMC5883L compass;
void setup()
{
Serial.begin(9600);
// Initialize Initialize HMC5883L
Serial.println("Initialize HMC5883L");
while (!compass.begin())
{
Serial.println("Could not find a valid HMC5883L sensor, check wiring!");
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);
// Set calibration offset. See HMC5883L_calibration.ino
compass.setOffset(0, 0);
}
void loop()
{
Vector norm = compass.readNormalize();
// Calculate heading
float heading = atan2(norm.YAxis, norm.XAxis);
// Set declination angle on your location and fix heading
// You can find your declination on: http://magnetic-declination.com/
// (+) Positive or (-) for negative
// For Bytom / Poland declination angle is 4'26E (positive)
// Formula: (deg + (min / 60.0)) / (180 / M_PI);
float declinationAngle = (4.0 + (26.0 / 60.0)) / (180 / M_PI);
heading += declinationAngle;
// Correct for heading < 0deg and heading > 360deg
if (heading < 0)
{
heading += 2 * PI;
}
if (heading > 2 * PI)
{
heading -= 2 * PI;
}
// Convert to degrees
float headingDegrees = heading * 180/M_PI;
// Output
Serial.print(" Heading = ");
Serial.print(heading);
Serial.print(" Degress = ");
Serial.print(headingDegrees);
Serial.println();
delay(100);
}
ma ottengo il seguente errore:
C:\Users\Silvio\Documents\Arduino\libraries\Arduino-HMC5883L-master\HMC5883L_calibrate\HMC5883L_calibrate.ino: In function 'void setup()':
HMC5883L_calibrate:26:19: error: 'class HMC5883L' has no member named 'begin'
while (!compass.begin())
Vi chiedo cortesemente di aiutarmi a comprendere cosa significa questo errore.
Inoltre, Non so se può essere utile ma avendola comprata da un noto sito cinese mi è venuto il dubbio che fosse un falso e su youtube ho trovato un tutorial per verificare attraverso un semplice codice di scansione di indirizzo I2C se si tratta del prodotto in questione oppure del falso. Sia l'indirizzo I2C (0x1E) che il codice sul chip corrispondo in teoria al prodotto originale.
Metti tutto l'errore completo ... perché quella libreria DEFINISCE il metodo begin() quindi ... o ne hai un'altra con lo stesso nome o c'è qualche altra cosa ...
... piuttosto, guardandola NON mi sembra una libreria Arduino ... io vedo solo un .cpp ed un .h, mancano tutti i files e la struttura affinché Arduino IDE la riconosca come tale. Mi sa che quei due files vanno messi nella stessa cartella del progetto e vanno inclusi da li ... :
Del resto, se vai nel IDE in "Files -> Examples" e cerchi gli esempi mi sa che NON li trovi perché NON sono sicuro che venga riconosciuta come libreria valida... :
Ecco guarda, ho sistemato alcune cose (c'erano anche alcuni stupidi "warning" nel .cpp che ho corretto) ...
... ora, se elimini completamnete quella che hai messo e la sostituisci con questa che ti allego, vedrai che vedi sia gli esempi nel IDE che compili tranquillamente (ho provato).
gpb01:
... piuttosto, guardandola NON mi sembra una libreria Arduino ... io vedo solo un .cpp ed un .h, mancano tutti i files e la struttura affinché Arduino IDE la riconosca come tale. Mi sa che quei due files vanno messi nella stessa cartella del progetto e vanno inclusi da li ... :
Del resto, se vai nel IDE in "Files -> Examples" e cerchi gli esempi mi sa che NON li trovi perché NON sono sicuro che venga riconosciuta come libreria valida... :
Guglielmo
Quel codice era proprio uno degli esempi. Grazie mille Guglielmo per il file, domani mattina provo subito, c'è un metodo per eliminare ogni file associato alla libreria oppure basta cancellare la libreria? Ad ogni modo utilizzo arduino uno, ma in futuro vorrei poter utilizzare questo modulo sul più piccolo arduino che mi permetta di associare anche un modulo gps, uno bluetooth e un ring led. Guglielmo grazie ancora