在gobot中转换的参数太多了

时间:2017-03-30 09:33:13

标签: go arguments gobot.io

我试图使用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来说是全新的。因此,非常感谢任何有助于解决这一问题的帮助。

提前致谢。

2 个答案:

答案 0 :(得分:0)

gobot here快速浏览一下,在我看来,您无法将aio.NewAnalogSensorDriverraspi.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.AdaptorGo的文档。

答案 1 :(得分:0)

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

  1. 您需要一个模数转换器(ADC),例如MCP3008,ADS1015,ADS1115。
  2. 截至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()
    }
    
    1. 有一种解决方案可以使用没有ADC转换器的传感器,如here
    2. 所述
        

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

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