0

我正在尝试制作一个简单的 C++ 循环程序来通过 SPI 从 MCP3004 读取模拟值。我正在使用wiringPi 库来使代码超级清晰。函数工作正常,我得到正确的数字但不是循环。我只有 3 次第一次读取,之后只有 0 次。我查看了 WiringPi 引用、库,但没有发现任何对我有帮助的东西。我试图改变延迟时间,但仍然只得到 3 个第一个正确的值。也许有人遇到过这种问题并且知道答案?非常感谢任何帮助。

#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <mcp3004.h>

int main()
{
    int wart;
    wiringPiSetupGpio();
    mcp3004Setup (100,0);
    while(true)
    {
        for(int i=0;i<4;i++)
        {
            wart=analogRead(100);
            printf("Value: %d\n", wart);
            delay(1000);
        }
    delay(5000);
    }
}

这段代码给了我例如:值:1004,值:1003,值:500,而不仅仅是值:0

4

1 回答 1

1

我一直使用 mcp3008,它是 Windows SPI 中的 8 ADC 版本,我没有任何问题。

首先,您是否真的从 mcp3008 读取端口 100。

wart=analogRead(100);

您需要提供来自 mcp3004.cpp 的代码

这是从 MCP3008 读取值的 C# 代码

private List<int> _channelInSingleMode = new List<int>() {
            0x08,
            0x09,
            0x0A,
            0x0B,
            0x0C,
            0x0D,
            0x0E,
            0x0F
        };

        public int Read(int port)
        {
            if ((port > 7) || (port < 0))
                throw new ArgumentException(string.Format("Invalid analog port {0}", port));

            const byte junk = (byte)0;
            var port2       = (byte)((_channelInSingleMode[port] << 4));
            var r1          = this._spiEngine.Transfer(new List<Byte>() { 0x1, port2, junk });

            return ValidateOperation(r1);
        }
于 2016-12-18T03:03:13.830 回答