Zum Hauptinhalt springen

Grundlegende Messwerte

Was dieses Beispiel zeigt​

Es liest beim etwa 50-mal pro Sekunde die Beschleunigung auf allen drei Achsen aus und rechnet sie in g um. Dies ist das einfachste Beispiel der Bibliothek und das, das der Schnellstart verwendet.

Der Beispielcode​

Select Board
basicReadings.ino
/**
**************************************************
*
* @file basicReadings.ino
*
* @brief Example showing how to read X, Y, Z acceleration data
* from the Soldered BMA400 Accelerometer breakout over I2C
*
* @link solde.red/333419 : Soldered BMA400 Accelerometer breakout
*
* @authors SparkFun Electronics, modified by Soldered Electronics
***************************************************/
#include <BMA400-SOLDERED.h>

// Create an instance of the BMA400 sensor
Soldered_BMA400 accelerometer;

void setup()
{
// Initialize serial for output
Serial.begin(115200);
Serial.println("BMA400 Example - Basic Readings");

// Initialize I2C bus
Wire.begin();

// Check if sensor is connected and initialize it.
// Address is optional, defaults to 0x14
while (accelerometer.begin() != BMA400_OK)
{
Serial.println("Error: BMA400 not connected, check wiring and I2C address!");
delay(1000);
}

Serial.println("BMA400 connected!");
}

void loop()
{
// Get new measurements from the sensor. This must be called before
// accessing the acceleration data, otherwise it will never update
accelerometer.getSensorData();

// Print acceleration data in g's
Serial.print("Acceleration in g's");
Serial.print("\t");
Serial.print("X: ");
Serial.print(accelerometer.data.accelX, 3);
Serial.print("\t");
Serial.print("Y: ");
Serial.print(accelerometer.data.accelY, 3);
Serial.print("\t");
Serial.print("Z: ");
Serial.println(accelerometer.data.accelZ, 3);

// Print 50x per second
delay(20);
}

Erwartetes Ergebnis, wenn das Breakout an ein NULA DeepSleep angeschlossen ist (IO8 an SDA, IO9 an SCL) und flach liegt:

Serial MonitorAutoscrollShow timestampNewline115200 baud
Message (Enter to send message to the board)
BMA400 Example - Basic Readings
BMA400 connected!
Acceleration in g's X: 0.007 Y: -0.022 Z: 0.996
Acceleration in g's X: 0.011 Y: -0.025 Z: 1.000
Acceleration in g's X: 0.014 Y: -0.026 Z: 1.004
Acceleration in g's X: 0.016 Y: -0.013 Z: 0.994
Acceleration in g's X: 0.012 Y: -0.015 Z: 1.001

Nach den beiden einleitenden Zeilen folgt pro Messung eine Zeile, etwa 50 pro Sekunde: Acceleration in g's, dann X:, Y: und Z:, jeweils die Achse in g mit drei Nachkommastellen, durch Tabulatoren getrennt. Solange der Sensor nicht antwortet, gibt der Sketch einmal pro Sekunde Error: BMA400 not connected, check wiring and I2C address! aus, anstelle von BMA400 connected!.

Verwendete Funktionen​

Soldered_BMA400()returns none

Konstruktor. Erzeugt das Sensorobjekt; es kommuniziert erst mit dem Sensor, wenn Sie begin() aufrufen.

ReturnsKonstruktor; kein Rückgabewert.

int8_t begin(uint8_t address = BMA400_I2C_ADDRESS_DEFAULT, TwoWire &wirePort = Wire)returns int8_t

Startet den Sensor über I2C: setzt den BMA400 per Soft-Reset zurück, prüft seine Chip-ID und versetzt ihn in den normalen Energiemodus. Rufen Sie zuvor Wire.begin() auf, wie im Beispiel.

ReturnsBMA400_OK (0) bei Erfolg, andernfalls ein negativer Fehlercode. Eine andere Adresse als 0x14 oder 0x15 liefert BMA400_E_INVALID_CONFIG zurück.

Parameter

TypNameBeschreibung
uint8_taddressI2C-Adresse. BMA400_I2C_ADDRESS_DEFAULT (0x14, die Standardadresse) oder BMA400_I2C_ADDRESS_SECONDARY (0x15).
TwoWire &wirePortZu verwendender I2C-Bus. Standardmäßig Wire.
int8_t getSensorData(bool sensorTime = false)returns int8_t

Liest eine neue Messung aus und rechnet sie mit dem aktuellen Messbereich in g um. Die Ergebnisse landen in accelerometer.data: accelX, accelY und accelZ (float, in g). Rufen Sie die Funktion vor dem Lesen von data auf, sonst werden die Werte nie aktualisiert.

ReturnsBMA400_OK (0) bei Erfolg, andernfalls ein negativer Fehlercode.

Parameter

TypNameBeschreibung
boolsensorTimeBei true wird zusätzlich der sensoreigene Zeitzähler in data.sensorTimeMillis ausgelesen, in Millisekunden. Standardmäßig false.

Zusammenspiel​

begin() steht in einer while-Schleife, sodass der Sketch es einmal pro Sekunde erneut versucht, bis der Sensor antwortet. Die Bibliothek ändert beim Start weder den Messbereich noch die Datenrate, daher misst der BMA400 nach seinem Reset mit ±4 g und 200 Hz. Bei jedem Durchlauf von loop() wird getSensorData() aufgerufen und die drei Felder von accelerometer.data werden mit drei Nachkommastellen ausgegeben.

Um die zweite Adresse zu verwenden, ändern Sie den Jumper (siehe Jumper) und rufen Sie accelerometer.begin(BMA400_I2C_ADDRESS_SECONDARY) auf.