2016-03-26 62 views
0

我打算做一个简单的C++循环程序来通过SPI从MCP3004读取模拟值。我正在使用wiringPi库来使代码超级清晰。函数工作正常,我得到正确的数字,但不是在一个循环中。我只获得3次第一次读取,之后只有0次。我查看了wiringPi参考文献,libs和我找不到任何可以帮助我的东西。我试图改变延迟时间,但仍然只获得3个第一合适的值。也许有人有这样的问题,并知道答案?非常感谢任何帮助。MCP3004 -spi analogread wiringPi-只有三个正确的读数

#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

回答

1

我使用mcp3008所有这些是8 ADC版本的时间在SPI从Windows和我没有任何问题。

首先你是从mcp3008读取端口100。

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); 
     } 
读取值