Zum Hauptinhalt springen

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​

Select Board
basicReadings.ino
/**
**************************************************
*
* @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.

Serial MonitorAutoscrollShow timestampNewline115200 baud
Message (Enter to send message to the board)
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_BMM350

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

Initialisiert 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

TypNameBeschreibung
uint8_taddressI2C-Adresse. Standardmäßig 0x14; verwenden Sie 0x15, wenn JP5 umgesetzt wurde.
TwoWire &wirePortZu verwendender I2C-Bus. Standardmäßig Wire.
int8_t getSensorData()returns int8_t

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