Слишком много аргументов для конвертации в гобота

Я пытался проверить LDR, используя каркас gobot. Я использовал драйвер устройства 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

Я совершенно новый для Голанга и Гобота. Поэтому любая помощь для решения этой проблемы будет принята с благодарностью.

Заранее спасибо.

2 ответа

С первого взгляда на gobot источник мне кажется, что вы не можете использовать aio.NewAnalogSensorDriver с raspi.Adaptor, Aio.NewAnalogSensorDriver ожидает, что его первый аргумент будет interface типа AnalogReader, в то время как 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")

    // ...
}

Этот пример поможет вам справиться с этой первоначальной ошибкой, если приведенный ниже код вызывает другие проблемы, вам следует обратиться к документации для Go и gobot.

Raspberry Pi не имеет возможности напрямую подключать аналоговые устройства, поэтому, независимо от структуры, вы не можете просто подключить фоторезистор (LDR) непосредственно к плате. В этом случае есть два способа использования фоторезисторов:

  1. Вам нужен аналого-цифровой преобразователь (АЦП), такой как MCP3008, ADS1015, ADS1115.

По состоянию на 30 апреля 2017 года Gobot.io поддерживает ADS1015/ADS1115 в ветке Dev. Если вы подключите свое устройство к ADS1015 по каналу 0, а затем к конвертеру интерфейса I2C Raspberry Pi, код будет выглядеть так:

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. Существует решение использовать такие датчики без АЦП, описанные здесь:

Поскольку фотоэлементы в основном являются резисторами, их можно использовать, даже если на вашем микроконтроллере нет аналоговых контактов (или если вы хотите подключить больше, чем аналоговых входных контактов). То, как мы это делаем, заключается в использовании основных электронных свойств резисторов и конденсаторов. Оказывается, если вы возьмете конденсатор, который изначально не хранит напряжение, а затем подключите его к источнику питания (например, 5 В) через резистор, он будет медленно заряжаться до напряжения питания. Чем больше резистор, тем медленнее.

В интернете можно найти много примеров того, как подключить LDR в таком случае. Я не уверен, что сейчас есть рабочий пример с Gobot.io.

Другие вопросы по тегам