• ตอบกระทู้
  • ตั้งกระทู้ใหม่
QUOTE 

Accelerometer ADXL345 ค่าไม่ออกครับ ช่วยด้วยครับผม

paesasa010 3 ปีที่ผ่านมา

ผมใช้ ADXL345 Accelerometer กับบอร์ด Arduino mega 2560 

เกิดปัญหาเขียนโคทเเล้วลองรันดูค่าออกมาเป็นเเค่ -1,-1,-1 เเทนที่มันจะเป็นค่าอื่น

 

ใช้โคทตามนี้ครับ

//Add the SPI library so we can communicate with the ADXL345 sensor

#include <SPI.h>

 

//Assign the Chip Select signal to pin 10.

int CS=10;

 

//This is a list of some of the registers available on the ADXL345.

//To learn more about these and the rest of the registers on the ADXL345, read the datasheet!

char POWER_CTL = 0x2D;//Power Control Register

char DATA_FORMAT = 0x31;

char DATAX0 = 0x32;//X-Axis Data 0

char DATAX1 = 0x33;//X-Axis Data 1

char DATAY0 = 0x34;//Y-Axis Data 0

char DATAY1 = 0x35;//Y-Axis Data 1

char DATAZ0 = 0x36;//Z-Axis Data 0

char DATAZ1 = 0x37;//Z-Axis Data 1

 

//This buffer will hold values read from the ADXL345 registers.

char values[10];

//These variables will be used to hold the x,y and z axis accelerometer values.

int x,y,z;

 

void setup(){ 

  //Initiate an SPI communication instance.

  SPI.begin();

  //Configure the SPI connection for the ADXL345.

  SPI.setDataMode(SPI_MODE3);

  //Create a serial connection to display the data on the terminal.

  Serial.begin(9600);

  

  //Set up the Chip Select pin to be an output from the Arduino.

  pinMode(CS, OUTPUT);

  //Before communication starts, the Chip Select pin needs to be set high.

  digitalWrite(CS, HIGH);

  

  //Put the ADXL345 into +/- 4G range by writing the value 0x01 to the DATA_FORMAT register.

  writeRegister(DATA_FORMAT, 0x00);

  //Put the ADXL345 into Measurement Mode by writing 0x08 to the POWER_CTL register.

  writeRegister(POWER_CTL, 0x08);  //Measurement mode  

}

 

void loop(){

  //Reading 6 bytes of data starting at register DATAX0 will retrieve the x,y and z acceleration values from the ADXL345.

  //The results of the read operation will get stored to the values[] buffer.

  readRegister(DATAX0, 6, values);

 

  //The ADXL345 gives 10-bit acceleration values, but they are stored as bytes (8-bits). To get the full value, two bytes must be combined for each axis.

  //The X value is stored in values[0] and values[1].

  x = ((int)values[1]<<8)|(int)values[0];

  //The Y value is stored in values[2] and values[3].

  y = ((int)values[3]<<8)|(int)values[2];

  //The Z value is stored in values[4] and values[5].

  z = ((int)values[5]<<8)|(int)values[4];

  

  //Print the results to the terminal.

  

  Serial.print(x, DEC);

  Serial.print(',');

  Serial.print(y, DEC);

  Serial.print(',');

  Serial.println(z, DEC);      

  delay(500); 

}

 

//This function will write a value to a register on the ADXL345.

//Parameters:

//  char registerAddress - The register to write a value to

//  char value - The value to be written to the specified register.

void writeRegister(char registerAddress, char value){

  //Set Chip Select pin low to signal the beginning of an SPI packet.

  digitalWrite(CS, LOW);

  //Transfer the register address over SPI.

  SPI.transfer(registerAddress);

  //Transfer the desired register value over SPI.

  SPI.transfer(value);

  //Set the Chip Select pin high to signal the end of an SPI packet.

  digitalWrite(CS, HIGH);

}

 

//This function will read a certain number of registers starting from a specified address and store their values in a buffer.

//Parameters:

//  char registerAddress - The register addresse to start the read sequence from.

//  int numBytes - The number of registers that should be read.

//  char * values - A pointer to a buffer where the results of the operation should be stored.

void readRegister(char registerAddress, int numBytes, char * values){

  //Since we're performing a read operation, the most significant bit of the register address should be set.

  char address = 0x80 | registerAddress;

  //If we're doing a multi-byte read, bit 6 needs to be set as well.

  if(numBytes > 1)address = address | 0x40;

  

  //Set the Chip select pin low to start an SPI packet.

  digitalWrite(CS, LOW);

  //Transfer the starting register address that needs to be read.

  SPI.transfer(address);

  //Continue to read registers until we've read the number specified, storing the results to the input buffer.

    for(int i=0; i<numBytes; i++){

    values[i] = SPI.transfer(0x00);

  }

  //Set the Chips Select pin high to end the SPI packet.

  digitalWrite(CS, HIGH);

}

ใครทราบรบกวนด้วยครับ ผมเดือนร้อนจริงๆ 

ใครทราบวิธีเเก้ไขรบกวนตอบกระทู้ หรือว่าจะส่งข้อความมาที่ out_dd@hotmail.com

หรือยิงมาเบอร์0816485442 เดี่ยวผมโทรกลับครับ

QUOTE 
ความคิดเห็นที่ #1
paesasa010 3 ปีที่ผ่านมา

ได้เเล้วครับผม เทียบขา กับUno กับmega หาขา 10(SI)  11(MOSI)  12(MISO)  13(SCK) ส่วนของMEGA 53(SI)  51(MOSI)  50(MISO)  52(SCK)

QUOTE 
ความคิดเห็นที่ #2
เจ้าของร้าน
เจ้าของร้าน
3 ปีที่ผ่านมา

กำลังจะตอบว่าให้ไปดูตัวอย่างที่นี่พอดีครับ

https://github.com/Anilm3/ADXL345-Accelerometer/tree/master/Arduino

1
แสดงความคิดเห็นที่ 1-2 จากทั้งหมด 2 ความคิดเห็น
ชื่อ
อีเมล
ข้อความ
  • ตอบกระทู้

CATEGORIES

CONTACT US

มือถือ0887823467 แฟกซ์02-0153201
facebook

SALE

รหัสสินค้า SA00003
250.00 บาท
60.00 บาท
  • สั่งซื้อ
รหัสสินค้า AG00125
2,300.00 บาท
850.00 บาท
  • สั่งซื้อ
รหัสสินค้า BR00017
400.00 บาท
150.00 บาท
เลิกจำหน่าย
รหัสสินค้า SG00027
200.00 บาท
80.00 บาท
  • สั่งซื้อ

NEW PRODUCTS

รหัสสินค้า AS00078
300.00 บาท
  • สั่งซื้อ
รหัสสินค้า
285.00 บาท
  • สั่งซื้อ
รหัสสินค้า AG00148
890.00 บาท
860.00 บาท
  • สั่งซื้อ
รหัสสินค้า
75.00 บาท
  • สั่งซื้อ
รหัสสินค้า BBB-0001
2,950.00 บาท
2,650.00 บาท
  • สั่งซื้อ
รหัสสินค้า BR00100
1,200.00 บาท
สินค้าหมด
รหัสสินค้า BR00079
290.00 บาท
190.00 บาท
  • สั่งซื้อ
รหัสสินค้า
950.00 บาท
  • สั่งซื้อ
รหัสสินค้า
300.00 บาท
  • สั่งซื้อ
รหัสสินค้า
370.00 บาท
  • สั่งซื้อ

เข้าร่วมร้านค้า

ร้านArduitronics
ร้านArduitronics
/www.arduitronics.com/
สมัครสมาชิกร้านนี้ เพื่อรับสิทธิพิเศษ

STATISTICS

หน้าที่เข้าชม4,670,642 ครั้ง
ผู้ชมทั้งหมด1,427,380 ครั้ง
เปิดร้าน21 พ.ค. 2556
ร้านค้าอัพเดท25 มี.ค. 2560

MEMBER

เข้าสู่ระบบด้วย
เข้าสู่ระบบ
สมัครสมาชิก

ยังไม่มีบัญชีเทพ สร้างบัญชีใหม่ ไม่เกิน 5 นาที
สมัครสมาชิก (ฟรี)

TRACKCODE

  • ค้นหา
*ใส่ order id หรือ email ที่ใช้ในการสั่งซื้อ
ดูรหัสพัสดุทั้งหมด »
Go to Top