极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11810|回复: 0

小白初次发帖,请教各位

[复制链接]
发表于 2015-4-29 21:12:31 | 显示全部楼层 |阅读模式
本帖最后由 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]
另外小弟对寄存器的读写操作不是很清楚,希望有老师能用代码讲解一下,再次谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-17 03:01 , Processed in 0.036647 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表