Я пытаюсь сделать простую программу цикла C ++ для чтения аналоговых значений из MCP3004 через SPI. Я использую библиотеки 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
Я все время использую mcp3008, который является версией 8 ADC в SPI от Windows, и у меня нет никаких проблем.
Во-первых, вы действительно читаете порт 100 с mcp3008.
wart=analogRead(100);
Вы должны предоставить код из mcp3004.cpp
Код C # для чтения значения из MCP3008
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);
}
Других решений пока нет …