gpt4 book ai didi

c++ - MCP3004 -spi analogread wiringPi- 只有三个好读

转载 作者:行者123 更新时间:2023-11-28 05:45:50 27 4
gpt4 key购买 nike

我正在尝试制作一个简单的 C++ 循环程序,以通过 SPI 从 MCP3004 读取模拟值。我正在使用 wiringPi 库使代码 super 清晰。函数工作正常,我得到正确的数字但不是在循环中。我只有 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

最佳答案

我一直使用 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);
}

关于c++ - MCP3004 -spi analogread wiringPi- 只有三个好读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36234735/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com