Einfache Messwerte
Was dieses Beispiel zeigt
Das Beispiel liest das kompensierte Magnetfeld auf allen drei Achsen in µT sowie die Temperatur des Sensors in °C und wiederholt das in einer Schleife etwa 10-mal pro Sekunde. Es ist das einfachste Beispiel der Bibliothek und dasjenige, das die Kurzanleitung verwendet.
Der Beispielcode
/**
**************************************************
*
* @file basicReadings.ino
*
* @brief Example showing how to read compensated magnetometer and
* temperature data from the Soldered BMM350 Geomagnetic
* Sensor breakout over I2C
*
* @link solde.red/333359 : Soldered BMM350 Geomagnetic Sensor breakout
*
* @authors Soldered Electronics
***************************************************/
#include <BMM350-SOLDERED.h>
// Create an instance of the BMM350 sensor
Soldered_BMM350 magSensor;
void setup()
{
// Initialize serial for output
Serial.begin(115200);
Serial.println("BMM350 Example - Basic Readings");
// Initialize I2C bus
Wire.begin();
// Check if sensor is connected and initialize it.
// Address is optional, defaults to 0x14 (ADSEL tied low on this breakout)
while (magSensor.begin() != BMM350_OK)
{
Serial.println("Error: BMM350 not connected, check wiring and I2C address!");
delay(1000);
}
Serial.println("BMM350 connected!");
}
void loop()
{
// Get new measurements from the sensor. This must be called before
// accessing the magX/magY/magZ/temperature data, otherwise it will never update
if (magSensor.getSensorData() == BMM350_OK)
{
Serial.print("X: ");
Serial.print(magSensor.magX, 2);
Serial.print(" uT\t");
Serial.print("Y: ");
Serial.print(magSensor.magY, 2);
Serial.print(" uT\t");
Serial.print("Z: ");
Serial.print(magSensor.magZ, 2);
Serial.print(" uT\t");
Serial.print("Temperature: ");
Serial.print(magSensor.temperature, 2);
Serial.println(" degC");
}
// Print 10x per second
delay(100);
}
Dieses Beispiel verwendet außerdem Wire, Serial und delay(). Sie gehören zum Arduino-Core und nicht zur BMM350-Bibliothek. delay() hält den Sketch für die angegebene Anzahl Millisekunden an: delay(1000) wartet eine Sekunde zwischen den Verbindungsversuchen, und delay(100) gibt den Takt von etwa 10 Messungen pro Sekunde vor.
Erwartetes Ergebnis bei 115200 Baud: die beiden Startzeilen, danach eine Zeile pro Messung, etwa alle 100 ms: X:, Y: und Z:, jeweils in uT mit zwei Nachkommastellen, dann Temperature: in degC, durch Tabulatoren getrennt.
BMM350 Example - Basic Readings
BMM350 connected!
X: 12.84 uT Y: -21.37 uT Z: -38.52 uT Temperature: 24.61 degC
X: 12.91 uT Y: -21.30 uT Z: -38.47 uT Temperature: 24.62 degC
X: 12.79 uT Y: -21.42 uT Z: -38.55 uT Temperature: 24.61 degC
X: 12.88 uT Y: -21.35 uT Z: -38.49 uT Temperature: 24.63 degC
Antwortet der Sensor nicht, gibt der Sketch einmal pro Sekunde
Error: BMM350 not connected, check wiring and I2C address! aus.
Verwendete Funktionen
Soldered_BMM350()returns Soldered_BMM350Konstruktor. Erstellt das Sensorobjekt; bis begin() aufgerufen wird, wird nichts an den Sensor gesendet.
ReturnsDas Sensorobjekt.
int8_t begin(uint8_t address = 0x14, TwoWire &wirePort = Wire)returns int8_tInitialisiert den Sensor über I2C, stellt dann eine Ausgabedatenrate von 100 Hz mit 4-fachem Mittelwert ein, aktiviert die X-, Y- und Z-Achse und startet den Normalmodus.
ReturnsBMM350_OK (0) bei Erfolg, andernfalls ein Fehlercode.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
uint8_t | address | I2C-Adresse. Standardmäßig 0x14; verwenden Sie 0x15, wenn JP5 umgesetzt wurde. |
TwoWire & | wirePort | Zu verwendender I2C-Bus. Standardmäßig Wire. |
int8_t getSensorData()returns int8_tLiest kompensierte Magnetometer- und Temperaturdaten und speichert sie in den Membern magX, magY und magZ (µT) sowie im Member temperature (°C). Rufen Sie die Funktion auf, bevor Sie diese Member lesen, sonst werden sie nie aktualisiert.
ReturnsBMM350_OK (0) bei Erfolg, andernfalls ein Fehlercode.
Zusammenspiel
begin() gibt BMM350_OK zurück, sobald der Sensor eingerichtet ist. Deshalb versucht die while-Schleife in setup() es jede Sekunde erneut, bis der Sensor antwortet. Jeder Durchlauf von loop() ruft getSensorData() auf und gibt magX, magY, magZ und temperature nur dann aus, wenn die Funktion BMM350_OK zurückgibt.
Bei einem Board, bei dem JP5 auf 0x15 umgesetzt wurde, starten Sie den Sensor mit
magSensor.begin(0x15).