mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-07-26 10:38:41 +00:00
c00cb3abdd
* Add support for the QMI8658C sensor * qmi8656c: update ReadTemperature signature * Update README devices count
67 lines
1.9 KiB
Go
67 lines
1.9 KiB
Go
// Connects to an QMI8658C I2C accelerometer/gyroscope and print the read data.
|
|
// This example was made with the "WaveShare RP2040 Round LCD 1.28in" in mind.
|
|
// For more infor about this development board:
|
|
// https://www.waveshare.com/wiki/RP2040-LCD-1.28
|
|
package main
|
|
|
|
import (
|
|
"machine"
|
|
"time"
|
|
|
|
imu "tinygo.org/x/drivers/qmi8658c"
|
|
)
|
|
|
|
func main() {
|
|
i2c := machine.I2C1
|
|
// This is the default pinout for the "WaveShare RP2040 Round LCD 1.28in"
|
|
err := i2c.Configure(machine.I2CConfig{
|
|
SDA: machine.GP6,
|
|
SCL: machine.GP7,
|
|
Frequency: 100000,
|
|
})
|
|
if err != nil {
|
|
println("unable to configure I2C:", err)
|
|
return
|
|
}
|
|
// Create a new device
|
|
d := imu.New(i2c)
|
|
|
|
// Check if the device is connected
|
|
if !d.Connected() {
|
|
println("unable to connect to sensor")
|
|
return
|
|
}
|
|
|
|
// This IMU has multiple configurations like output data rate, multiple
|
|
// measurements scales, low pass filters, low power modes, all the vailable
|
|
// values can be found in the datasheet and were defined at registers file.
|
|
// This is the default configuration which will be used if the `nil` value
|
|
// is passed do the `Configure` method.
|
|
config := imu.Config{
|
|
SPIMode: imu.SPI_4_WIRE,
|
|
SPIEndian: imu.SPI_BIG_ENDIAN,
|
|
SPIAutoInc: imu.SPI_AUTO_INC,
|
|
AccEnable: imu.ACC_ENABLE,
|
|
AccScale: imu.ACC_8G,
|
|
AccRate: imu.ACC_NORMAL_1000HZ,
|
|
AccLowPass: imu.ACC_LOW_PASS_2_62,
|
|
GyroEnable: imu.GYRO_FULL_ENABLE,
|
|
GyroScale: imu.GYRO_512DPS,
|
|
GyroRate: imu.GYRO_1000HZ,
|
|
GyroLowPass: imu.GYRO_LOW_PASS_2_62,
|
|
}
|
|
d.Configure(config)
|
|
|
|
// Read the accelation, rotation and temperature data and print them.
|
|
for {
|
|
acc_x, acc_y, acc_z := d.ReadAcceleration()
|
|
gyro_x, gyro_y, gyro_z := d.ReadRotation()
|
|
temp, _ := d.ReadTemperature()
|
|
println("-------------------------------")
|
|
println("acc:", acc_x, acc_y, acc_z)
|
|
println("gyro:", gyro_x, gyro_y, gyro_z)
|
|
println("temp:", temp)
|
|
time.Sleep(time.Millisecond * 100)
|
|
}
|
|
}
|