สอบถามครับ
อยากเขียนโปรแกรม
โดยที่มี
1. GY 521 อยู่ 2 ตัว
2. Key Pad อยู่ 1 อัน เอาไว้สลับ โหมด
3. UNO Mircro controller อยู่ 1 ตัว
4. LCD
จะให้ทำประมาณว่า ใช้ เซ็นวัดมุม Pitch กับ Row ครับ ทั้งสองตัวเลย
ให้โชว์ขึ้น LCD โดยการกดเปลี่ยนโหมด A B C D อ่าครับ
เช่น โหมด A โชว์ค่ามุม Pitch ของ GY 521 ตัวที่ 1
โหมด B โชว์ค่ามุม Row ของ GY 521 ตัวที่ 1
โหมด C โชว์ค่ามุม Pitch ของ GY 521 ตัวที่ 2
โหมด D โชว์ค่ามุม Row ของ GY 521 ตัวที่ 2
ขอบคุณครับ
ปล. ผมสามารถทำได้แค่ใช้ GY 521 แค่ตัวเดียวจากโปรแแกรมข้างล่างนี้ครับ แต่กำลังหาวิธีที่สามารถใช้ ได้ 2 ตัวอยู่
#include <LiquidCrystal_I2C.h>
#include<Wire.h>
const int MPU=0x68; // I2C address of the MPU-6050
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
const float alpha = 0.5;
double fXg = 0;
double fYg = 0;
double fZg = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup(){
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B); // PWR_MGMT_1 register
Wire.write(0); // set to zero (wakes up the MPU-6050)
Wire.endTransmission(true);
Serial.begin(9600);
lcd.begin();
delay(100);
}
void loop(){
double pitch, roll, Xg, Yg, Zg;
Wire.beginTransmission(MPU);
Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU,14,true); // request a total of 14 registers
AcX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
AcY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
AcZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
fXg = AcX * alpha + (fXg * (1.0 - alpha));
fYg = AcY * alpha + (fYg * (1.0 - alpha));
fZg = AcZ * alpha + (fZg * (1.0 - alpha));
roll = (atan2(-fYg, fZg)*180.0)/M_PI;
pitch = (atan2(-fXg, fZg)*180.0)/M_PI;
Serial.print(pitch);
Serial.print(":");
Serial.println(roll);
lcd.setCursor(0,0);
lcd.print("X=");
lcd.print(pitch);
delay(100);
lcd.setCursor(0,1);
lcd.print("Y=");
lcd.print(roll);
delay(100);
}
ขอบคุณครับ
วิธีใช้ Sensor Arduion 2 ตัวเขียน Code อย่างไรครับ (GY521)..................................------------------
อยากเขียนโปรแกรม
โดยที่มี
1. GY 521 อยู่ 2 ตัว
2. Key Pad อยู่ 1 อัน เอาไว้สลับ โหมด
3. UNO Mircro controller อยู่ 1 ตัว
4. LCD
จะให้ทำประมาณว่า ใช้ เซ็นวัดมุม Pitch กับ Row ครับ ทั้งสองตัวเลย
ให้โชว์ขึ้น LCD โดยการกดเปลี่ยนโหมด A B C D อ่าครับ
เช่น โหมด A โชว์ค่ามุม Pitch ของ GY 521 ตัวที่ 1
โหมด B โชว์ค่ามุม Row ของ GY 521 ตัวที่ 1
โหมด C โชว์ค่ามุม Pitch ของ GY 521 ตัวที่ 2
โหมด D โชว์ค่ามุม Row ของ GY 521 ตัวที่ 2
ขอบคุณครับ
ปล. ผมสามารถทำได้แค่ใช้ GY 521 แค่ตัวเดียวจากโปรแแกรมข้างล่างนี้ครับ แต่กำลังหาวิธีที่สามารถใช้ ได้ 2 ตัวอยู่
#include <LiquidCrystal_I2C.h>
#include<Wire.h>
const int MPU=0x68; // I2C address of the MPU-6050
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
const float alpha = 0.5;
double fXg = 0;
double fYg = 0;
double fZg = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup(){
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B); // PWR_MGMT_1 register
Wire.write(0); // set to zero (wakes up the MPU-6050)
Wire.endTransmission(true);
Serial.begin(9600);
lcd.begin();
delay(100);
}
void loop(){
double pitch, roll, Xg, Yg, Zg;
Wire.beginTransmission(MPU);
Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU,14,true); // request a total of 14 registers
AcX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)
AcY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
AcZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
fXg = AcX * alpha + (fXg * (1.0 - alpha));
fYg = AcY * alpha + (fYg * (1.0 - alpha));
fZg = AcZ * alpha + (fZg * (1.0 - alpha));
roll = (atan2(-fYg, fZg)*180.0)/M_PI;
pitch = (atan2(-fXg, fZg)*180.0)/M_PI;
Serial.print(pitch);
Serial.print(":");
Serial.println(roll);
lcd.setCursor(0,0);
lcd.print("X=");
lcd.print(pitch);
delay(100);
lcd.setCursor(0,1);
lcd.print("Y=");
lcd.print(roll);
delay(100);
}
ขอบคุณครับ