mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-08-04 06:57:48 +00:00
lsmXXX: unified, error handling, memory management
This commit is contained in:
@@ -13,7 +13,13 @@ func main() {
|
||||
machine.I2C0.Configure(machine.I2CConfig{})
|
||||
|
||||
sensor := lsm303agr.New(machine.I2C0)
|
||||
sensor.Configure(lsm303agr.Configuration{}) //default settings
|
||||
err := sensor.Configure(lsm303agr.Configuration{}) //default settings
|
||||
if err != nil {
|
||||
for {
|
||||
println("Failed to configure", err.Error())
|
||||
time.Sleep(time.Second)
|
||||
}
|
||||
}
|
||||
|
||||
// you can specify the following options to adjust accuracy, sensor range or save power.
|
||||
// see https://github.com/tinygo-org/drivers/blob/release/lsm303agr/registers.go for details:
|
||||
@@ -28,22 +34,24 @@ func main() {
|
||||
})
|
||||
*/
|
||||
|
||||
if !sensor.Connected() {
|
||||
println("LSM303AGR/MAG not connected!")
|
||||
return
|
||||
}
|
||||
|
||||
for {
|
||||
|
||||
if !sensor.Connected() {
|
||||
println("LSM303AGR/MAG not connected!")
|
||||
time.Sleep(time.Second)
|
||||
continue
|
||||
}
|
||||
|
||||
// accel_x, accel_y, accel_z := sensor.ReadAcceleration()
|
||||
// println("ACCEL_X:", accel_x/100000, " ACCEL_Y:", accel_y/100000, " ACCEL_Z:", accel_z/100000)
|
||||
|
||||
// mag_x, mag_y, mag_z := sensor.ReadMagneticField()
|
||||
// println("MAG_X:", mag_x/100000, " MAG_Y:", mag_y/100000, " MAG_Z:", mag_z/100000)
|
||||
|
||||
pitch, roll := sensor.ReadPitchRoll()
|
||||
pitch, roll, _ := sensor.ReadPitchRoll()
|
||||
println("Pitch:", float32(pitch)/100000, " Roll:", float32(roll)/100000)
|
||||
|
||||
heading := sensor.ReadCompass()
|
||||
heading, _ := sensor.ReadCompass()
|
||||
println("Heading:", float32(heading)/100000, "degrees")
|
||||
|
||||
temp, _ := sensor.ReadTemperature()
|
||||
|
||||
@@ -12,16 +12,23 @@ func main() {
|
||||
machine.I2C0.Configure(machine.I2CConfig{})
|
||||
|
||||
accel := lsm6ds3.New(machine.I2C0)
|
||||
accel.Configure(lsm6ds3.Configuration{})
|
||||
if !accel.Connected() {
|
||||
println("LSM6DS3 not connected")
|
||||
return
|
||||
err := accel.Configure(lsm6ds3.Configuration{})
|
||||
if err != nil {
|
||||
for {
|
||||
println("Failed to configure", err.Error())
|
||||
time.Sleep(time.Second)
|
||||
}
|
||||
}
|
||||
|
||||
for {
|
||||
x, y, z := accel.ReadAcceleration()
|
||||
if !accel.Connected() {
|
||||
println("LSM6DS3 not connected")
|
||||
time.Sleep(time.Second)
|
||||
continue
|
||||
}
|
||||
x, y, z, _ := accel.ReadAcceleration()
|
||||
println("Acceleration:", float32(x)/1000000, float32(y)/1000000, float32(z)/1000000)
|
||||
x, y, z = accel.ReadRotation()
|
||||
x, y, z, _ = accel.ReadRotation()
|
||||
println("Gyroscope:", float32(x)/1000000, float32(y)/1000000, float32(z)/1000000)
|
||||
x, _ = accel.ReadTemperature()
|
||||
println("Degrees C", float32(x)/1000, "\n\n")
|
||||
|
||||
@@ -26,12 +26,18 @@ func main() {
|
||||
machine.I2C0.Configure(machine.I2CConfig{})
|
||||
|
||||
device := lsm6dsox.New(machine.I2C0)
|
||||
device.Configure(lsm6dsox.Configuration{
|
||||
err := device.Configure(lsm6dsox.Configuration{
|
||||
AccelRange: lsm6dsox.ACCEL_2G,
|
||||
AccelSampleRate: lsm6dsox.ACCEL_SR_104,
|
||||
GyroRange: lsm6dsox.GYRO_250DPS,
|
||||
GyroSampleRate: lsm6dsox.GYRO_SR_104,
|
||||
})
|
||||
if err != nil {
|
||||
for {
|
||||
println("Failed to configure", err.Error())
|
||||
time.Sleep(time.Second)
|
||||
}
|
||||
}
|
||||
|
||||
for {
|
||||
|
||||
@@ -46,8 +52,8 @@ func main() {
|
||||
calibrateGyro(device)
|
||||
}
|
||||
|
||||
ax, ay, az := device.ReadAcceleration()
|
||||
gx, gy, gz := device.ReadRotation()
|
||||
ax, ay, az, _ := device.ReadAcceleration()
|
||||
gx, gy, gz, _ := device.ReadRotation()
|
||||
t, _ := device.ReadTemperature()
|
||||
|
||||
if PLOTTER {
|
||||
@@ -64,7 +70,7 @@ func main() {
|
||||
|
||||
func calibrateGyro(device *lsm6dsox.Device) {
|
||||
for i := 0; i < 100; i++ {
|
||||
gx, gy, gz := device.ReadRotation()
|
||||
gx, gy, gz, _ := device.ReadRotation()
|
||||
cal[0] += float32(gx) / 1000000
|
||||
cal[1] += float32(gy) / 1000000
|
||||
cal[2] += float32(gz) / 1000000
|
||||
|
||||
@@ -41,7 +41,7 @@ func main() {
|
||||
|
||||
for {
|
||||
|
||||
if con, err := device.Connected(); !con || err != nil {
|
||||
if !device.Connected() {
|
||||
println("LSM9DS1 not connected")
|
||||
time.Sleep(time.Second)
|
||||
continue
|
||||
|
||||
Reference in New Issue
Block a user