Calibrazione HMC5883L

Buonasera,

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.

Vi ringrazio anticipatamente per la pazienza!

ciao.
l'errore dice che non esiste il metodo begin().
metti il link dove hai scaricato la libreria.

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 ...

bool HMC5883L::begin()
{
    Wire.begin();

    if ((fastRegister8(HMC5883L_REG_IDENT_A) != 0x48)
    || (fastRegister8(HMC5883L_REG_IDENT_B) != 0x34)
    || (fastRegister8(HMC5883L_REG_IDENT_C) != 0x33))
    {
	return false;
    }

    setRange(HMC5883L_RANGE_1_3GA);
    setMeasurementMode(HMC5883L_CONTINOUS);
    setDataRate(HMC5883L_DATARATE_15HZ);
    setSamples(HMC5883L_SAMPLES_1);

    mgPerDigit = 0.92f;

    return true;
}

Guglielmo

... 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 ... ::slight_smile:

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... ::slight_smile:

Guglielmo

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). :slight_smile:

Guglielmo

Arduino-HMC5883L.zip (529 KB)

Ah ... ma per quale scheda Arduino stai compilando ? ? ? Perché non so la compatibilità con tutte le varie schede ... ::slight_smile:

Guglielmo

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 ... ::slight_smile:

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... ::slight_smile:

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

perfetto, provato, funziona!

Grazie ancora!

Ottimo :slight_smile:

Guglielmo

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.