我试图使用gobot框架测试LDR。我使用 AnalogSensorDriver 设备驱动程序,我的代码是
package main
import (
"time"
"gobot.io/x/gobot"
"gobot.io/x/gobot/drivers/aio"
"gobot.io/x/gobot/platforms/raspi"
)
func main() {
r := raspi.NewAdaptor()
ldr := aio.AnalogSensorDriver(r, "7")
work := func() {
gobot.Every(1*time.Second, func() {
ldr.Read()
})
}
robot := gobot.NewRobot("getBot",
[]gobot.Connection{r},
[]gobot.Device{ldr},
work,
)
robot.Start()
}
当我执行此操作时,我收到此错误。
./ ldrtest.go:13:转换为aio.AnalogSensorDriver的过多论据:aio.AnalogSensorDriver(w," 7") ./ldrtest.go:22:undefined,w
我对golang和gobot来说是全新的。因此,非常感谢任何有助于解决这一问题的帮助。
提前致谢。
答案 0 :(得分:0)
从gobot
here快速浏览一下,在我看来,您无法将aio.NewAnalogSensorDriver
与raspi.Adaptor
一起使用。 source期望它的第一个参数为interface
类型aio.NewAnalogSensorDriver,而AnalogReader返回raspi.NewAdaptor,似乎没有实现它需要raspi.Adaptor方法来实现AnalogReader
接口。
这就是您收到错误./ldrtest.go:13: cannot use r (type *raspi.Adaptor) as type aio.AnalogReader in argument to aio.NewAnalogSensorDriver: *raspi.Adaptor does not implement aio.AnalogReader (missing AnalogRead method)
的原因。
<强>更新强>:
使代码工作取决于您想要做什么。如果您要使用raspi.Adaptor
,则无法使用aio.NewAnalogSensorDriver
,因为raspi.Adaptor
没有模拟功能。如果您想使用aio.NewAnalogSensorDriver
,您需要使用其类型实现AnalogRead
方法的值作为其第一个参数,例如AnalogRead。< / p>
package main
import (
"time"
"gobot.io/x/gobot"
"gobot.io/x/gobot/drivers/aio"
"gobot.io/x/gobot/platforms/beaglebone"
)
func main() {
r := beaglebone.NewAdaptor()
ldr := aio.NewAnalogSensorDriver(r, "7")
// ...
}
此示例应该让您超过该初始错误,如果下面的代码导致其他问题,您应该考虑参考beaglebone.Adaptor和Go的文档。
答案 1 :(得分:0)
raspberry pi无法直接连接模拟设备,因此,无论采用何种框架,您都不能简单地将光敏电阻(LDR)直接连接到电路板上。在这种情况下,有两种方法可以使用光敏电阻:
截至2017年4月30日,Gobot.io支持Dev分支中的ADS1015 / ADS1115。如果将设备连接到通道0上的ADS1015,然后将转换器连接到覆盆子pi的I2C接口,则代码看起来像that:
package main
import (
"fmt"
"time"
"gobot.io/x/gobot"
"gobot.io/x/gobot/drivers/i2c"
"gobot.io/x/gobot/platforms/raspi"
)
func main() {
a := raspi.NewAdaptor()
ads1015 := i2c.NewADS1015Driver(a)
// Adjust the gain to be able to read values of at least 5V
ads1015.DefaultGain, _ = ads1015.BestGainForVoltage(5.0)
work := func() {
gobot.Every(100*time.Millisecond, func() {
v, _ := ads1015.ReadWithDefaults(0)
fmt.Println("A0", v)
})
}
robot := gobot.NewRobot("ads1015bot",
[]gobot.Connection{a},
[]gobot.Device{ads1015},
work,
)
robot.Start()
}
因为光电池基本上是电阻器,所以即使您的微控制器上没有任何模拟引脚也可以使用它们(或者说,如果你想要连接比模拟输入引脚更多的话)。我们这样做的方法是利用电阻器和电容器的基本电子特性。事实证明,如果你拿一个最初不存储电压的电容器,然后通过一个电阻将它连接到电源(如5V),它将缓慢充电到电源电压。电阻越大,它就越慢。
在这种情况下,您可以在互联网上找到许多关于如何连接LDR的示例。我不确定Gobot.io现在有一个有效的例子。