本帖最后由 lux 于 2015-4-29 21:14 编辑
在网上找了很多关于ADXL345通信的例子,不过都是用IIC编写的,希望能有高手能在空闲之余帮忙用SPI协议编写一下。小弟写了一段代码但是无法读取到器件的ID号,X Y Z的数据也不对,不知哪里有问题,希望路过的大侠能帮忙看看,感激不尽[pre lang="arduino" line="1" file="code"]#include<SPI.h>
#define DEVID 0x00
#define DATAX0 0x32
#define DATAX1 0x33
#define DATAY0 0x34
#define DATAY1 0x35
#define DATAZ0 0x36
#define DATAZ1 0x37
#define DATA_FORMAT 0x31
const int salveSelectPin = 10;
const int dataReadyPin = 8;
volatile int state = LOW;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
pinMode(salveSelectPin, OUTPUT);
pinMode(dataReadyPin, INPUT);
digitalWrite(salveSelectPin, HIGH);
delay(10);
attachInterrupt(8, blind, RISING);
SPI.setBitOrder(LSBFIRST);
SPI.setDataMode(SPI_MODE3);
SPI.begin(10);
}
void loop() {
// put your main code here, to run repeatedly:
byte dataX ;
byte dataY ;
byte dataZ ;
byte dataDEVID ;
digitalWrite(salveSelectPin, state);
if (Serial.available());
dataX = SPI.transfer(10, 0x33, SPI_CONTINUE); //<< 8 + SPI.transfer(10, 0x32);
dataY = SPI.transfer(10, 0x35, SPI_CONTINUE); //<< 8 + SPI.transfer(10, 0x34);
dataZ = SPI.transfer(10, 0x37, SPI_CONTINUE); //<< 8 + SPI.transfer(10, 0x36);
dataDEVID = SPI.transfer(10, 0x00);
{ char a = Serial.read();
if (a == 'K')
Serial.print("dataX=");
Serial.println(dataX);
Serial.print("dataY=");
Serial.println(dataY);
Serial.println(dataDEVID);
Serial.print("dataZ=");
Serial.println(dataZ);
}
}[/code]
另外小弟对寄存器的读写操作不是很清楚,希望有老师能用代码讲解一下,再次谢谢! |