Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 5863|回復: 3
打印 上一主題 下一主題

運用加速度傳感器adxl345補正伺服馬達

[複製鏈接]
跳轉到指定樓層
1#
發表於 2014-4-15 23:21:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位大大好 我專題想運用adxl345做伺服馬達的補正讓他永遠維持在我要的位子這是我的code(我是用arduino uno版)現在遇到的問題是我可以燒到我的arduino裡面,comiling有沒有問題但讀出來的Xg值一直為3.91
伺服馬達也不會因我移動ADXL345而改變


#include <Wire.h>
#include <Servo.h>
#define Register_ID 0
#define Register_2D 0x2D
#define Register_X0 0x32
#define Register_X1 0x33
#define Register_Y0 0x34
#define Register_Y1 0x35
int sensorValue0 = 0;        
int s1pwm = 93;
Servo s1;
int ADXAddress = 0xA7>>1;  
int reading = 0;
int val = 0;
int X0,X1,X_out;
double Xg;
void setup()
{
Serial.begin(9600);
s1.attach(6);  
Wire.begin();  //初始化I2C
delay(100);
Wire.beginTransmission(ADXAddress);
Wire.send(Register_2D);
Wire.endTransmission();
}
void loop()
{
Wire.beginTransmission(ADXAddress);
Wire.send(Register_X0);
Wire.send(Register_X1);
Wire.endTransmission();
Wire.requestFrom(ADXAddress,2);
sensorValue0=Xg;
sensorValue0 = map(sensorValue0, -70,70 ,0 ,179 );     
s1.write(sensorValue0);
if(Wire.available()<=2);
{
X0 = Wire.receive();
X1 = Wire.receive();
X1 = X1<<8;
X_out = X0+X1;
}
delay(100);
  Serial.print("Xg =   " );                       
  Serial.println(Xg);
  delay(100);
Xg = (X_out-14.4)/3.68;
}
2#
發表於 2014-4-16 03:28:59 | 只看該作者
通常,目前用加速度傳感器adxl345的,
code裡有這行:
#include <ADXL345.h>
3#
發表於 2016-12-25 18:18:33 | 只看該作者
可是我加了
"#include <ADXL345.h>"
之後卻顯示
"板子Arduino/Genuino Uno編譯錯誤"
但我刪除這行之後就可以燒入了
所以這行是不需要的嗎?
4#
發表於 2016-12-27 08:08:13 | 只看該作者
可能是多加了一行 Wire.send(Register_X1);
改成以下程式試看看
Wire.beginTransmission(ADXAddress);
Wire.send(Register_X0);
Wire.endTransmission();
Wire.requestFrom(ADXAddress,2);
手上沒東西可試...自己試看看是不是這樣
至於 #include <ADXL345.h>. 是不用加的
因為程式是直接用 Wire 去寫
當然也可以自己去找 ADXL345 的 library
程式就會比較簡單些
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-11-21 17:57 , Processed in 0.118552 second(s), 6 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表