0

我正在尝试使用 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 完全陌生。因此,我们将不胜感激任何解决此问题的帮助。

提前致谢。

4

2 回答 2

1

树莓派无法直接连接模拟设备,因此,无论采用何种框架,您都不能简单地将光敏电阻 (LDR) 直接连接到电路板上。在这种情况下,有两种使用光敏电阻的方法:

  1. 您需要一个模数转换器 (ADC),例如 MCP3008、ADS1015、ADS1115。

截至 2017 年 4 月 30 日,Gobot.io 在 Dev 分支中支持 ADS1015/ADS1115。如果您将设备连接到通道 0 上的 ADS1015,然后将转换器连接到树莓派的 I2C 接口,代码将如下所示

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()
}
  1. 有一种解决方案可以在没有 ADC 转换器的情况下使用此类传感器,如下所述:

因为光电管基本上是电阻器,所以即使您的微控制器上没有任何模拟引脚(或者说您想要连接的数量超过模拟输入引脚),也可以使用它们。我们这样做的方法是利用电阻器和电容器的基本电子特性。事实证明,如果你拿一个最初不存储电压的电容器,然后通过一个电阻将它连接到电源(如 5V),它会慢慢充电到电源电压。电阻越大,速度越慢。

在这种情况下,您可以在 Internet 上找到许多关于如何连接 LDR 的示例。我不确定 Gobot.io 现在是否有一个可行的示例。

于 2017-04-30T13:58:45.293 回答
1

快速浏览一下gobot's source在我看来,你不能aio.NewAnalogSensorDriver使用raspi.Adaptor. aio.NewAnalogSensorDriver期望它的第一个参数是AnalogReaderinterface类型,而raspi.NewAdaptor返回一个raspi.Adaptor,看起来它没有实现它实现接口所需的 AnalogRead方法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方法的值作为其第一个参数,例如beaglebone.Adaptor所做的。

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")

    // ...
}

如果下面的代码导致其他问题,您应该考虑查阅Gogobot的文档,此示例应该可以帮助您克服最初的错误。

于 2017-03-30T10:06:23.337 回答