11 لایک
-
4
Post By parsd
-
1
Post By magmagmary
-
1
Post By shobeir90
-
1
Post By parsdc
-
2
Post By parsdc
-
2
Post By parsdc
-
همه مطالب بالا با آردوینو
#include <Wire.h>
const byte Ic_r = 0x77;
const byte Ic_w = 0x78;
uint16_t Dig_t1;
int16_t Dig_t2, Dig_t3;
uint16_t Dig_p1;
int16_t Dig_p2, Dig_p3, Dig_p4, Dig_p5, Dig_p6, Dig_p7, Dig_p8, Dig_p9;
float T_fine;
float Var1, Var2, T, P, Z, Y;
long Adc_p;
long AdcT;
byte P1,P2,P3,T1,T2,T3;
void setup() {
//Wire.setClock(100000);
Wire.begin();
Serial.begin(115200);
while (!Serial); // Wait for Serial to be ready
delay(2000);
Serial.println("-----------");
/*
Wire.beginTransmission(Ic_r);
Wire.write(0xF4); // آدرس رجیستر F4
Wire.write(0x27); // مقدار برای نوشتن (مثال: 0x27 برای تنظیم حالت نرمال)
Wire.endTransmission();
// نوشتن مقدار در آدرس F5
Wire.beginTransmission(Ic_r);
Wire.write(0xF5); // آدرس رجیستر F5
Wire.write(0xA0); // مقدار برای نوشتن (مثال: 0xA0 برای تنظیم زمان انتظار)
Wire.endTransmission();
*/
Wire.beginTransmission(Ic_r);
Wire.write(0xF4); // آدرس رجیستر F4
Wire.write(0xFF); // مقدار برای نوشتن (مثال: 0x27 برای تنظیم حالت نرمال)
Wire.endTransmission();
// نوشتن مقدار در آدرس F5
Wire.beginTransmission(Ic_r);
Wire.write(0xF5); // آدرس رجیستر F5
Wire.write(0x9C); // مقدار برای نوشتن (مثال: 0xA0 برای تنظیم زمان انتظار)
Wire.endTransmission();
delay(100);
/////////////////////////////////
Serial.println();
readCalibrationData(0x88, Dig_t1, Dig_t2, Dig_t3);
readCalibrationData(0x8E, Dig_p1, Dig_p2, Dig_p3);
readCalibrationData(0x94, Dig_p4, Dig_p5, Dig_p6);
readCalibrationData(0x9A, Dig_p7, Dig_p8, Dig_p9);
Serial.println();
Wire.beginTransmission(Ic_r);
Wire.write(0xF4);
Wire.endTransmission();
Wire.requestFrom(Ic_r, (byte)2);
if (Wire.available() == 2) {
P1 = Wire.read();
P2 = Wire.read();
Serial.print(P1);
Serial.print(" ");
Serial.println(P2);
Serial.println("---------A-------");
}
}
/////////////////////////////////////////////////
void readCalibrationData(byte startAddress, uint16_t &dig1, int16_t &dig2, int16_t &dig3) {
Wire.beginTransmission(Ic_r);
Wire.write(startAddress);
Wire.endTransmission();
Wire.requestFrom(Ic_r, (byte)6);
if (Wire.available() == 6) {
dig1 = (Wire.read() | (Wire.read() << 8));
dig2 = (Wire.read() | (Wire.read() << 8));
dig3 = (Wire.read() | (Wire.read() << 8));
}
}
////////////////////////////////////////////////////////////////
void readCalibrationData(byte startAddress, int16_t &dig1, int16_t &dig2, int16_t &dig3) {
Wire.beginTransmission(Ic_r);
Wire.write(startAddress);
Wire.endTransmission();
Wire.requestFrom(Ic_r, (byte)6);
if (Wire.available() == 6) {
dig1 = (Wire.read() | (Wire.read() << 8));
dig2 = (Wire.read() | (Wire.read() << 8));
dig3 = (Wire.read() | (Wire.read() << 8));
}
}
////////////////////////////////////////////////////////////////
void loop() {
Wire.beginTransmission(Ic_r);
Wire.write(0xF7);
Wire.endTransmission();
Wire.requestFrom(Ic_r, (byte)6);
if (Wire.available()==6) {
P1 = Wire.read();
P2 = Wire.read();
P3 = Wire.read();
T1 = Wire.read();
T2 = Wire.read();
T3 = Wire.read();
}
Adc_p = P1 * 4096;
Z = P2 * 16;
Adc_p = Z + Adc_p;
bitWrite(Adc_p, 3, bitRead(P3, 7));
bitWrite(Adc_p, 2, bitRead(P3, 6));
bitWrite(Adc_p, 1, bitRead(P3, 5));
bitWrite(Adc_p, 0, bitRead(P3, 4));
AdcT = T1 * 4096;
Z = T2 * 16;
AdcT = Z + AdcT;
bitWrite(AdcT, 3, bitRead(T3, 7));
bitWrite(AdcT, 2, bitRead(T3, 6));
bitWrite(AdcT, 1, bitRead(T3, 5));
bitWrite(AdcT, 0, bitRead(T3, 4));
Var1 = AdcT / 16384.0;
Z = Dig_t1 / 1024.0;
Var1 = Var1 - Z;
Var1 = Var1 * Dig_t2;
Var2 = AdcT / 131072.0;
Z = Dig_t1 / 8192.0;
Var2 = Var2 - Z;
Var2 = Var2 * Var2;
Var2 = Var2 * Dig_t3;
T = Var1 + Var2;
T_fine = T;
T = T / 5120.0;
/////////////////////////////////////
Y = T_fine / 2.0;
Y = Var1 - 64000.0;
Var2 = Y * Y;
Var2 = Var2 * Dig_p6;
Var2 = Var2 / 32768.0;
Var2 = Var2 + Y;
Var2 = Var2 * Dig_p5;
Var2 = Var2 * 2.0;
Var2 = Var2 / 4.0;
Z = Dig_p4 * 65536.0;
Var2 = Var2 + Z;
Var1 = Dig_p3 * Y;
Var1 = Var1 * Y;
Var1 = Var1 / 524288.0;
Z = Dig_p2 * Y;
Var1 = Var1 + Z;
Var1 = Var1 / 524288.0;
Var1 = Var1 / 32768.0;
Var1 = Var1 + 1.0;
Var1 = Var1 * Dig_p1;
if (Var1 == 0) {
P = 0;
} else {
P = 1048576.0 - Adc_p;
Z = Var2 / 4096.0;
P = P - Z;
P = P * 6250.0;
P = P / Var1;
Var1 = Dig_p9 * P;
Var1 = Var1 * P;
Var1 = Var1 / 2147483648.0;
Var2 = P * Dig_p8;
Var2 = Var2 / 32768.0;
Z = Var1 + Var2;
Z = Z + Dig_p7;
Z = Z / 16.0;
P = P + Z;
}
Serial.print(T);
Serial.print(" ");
Serial.println(P);
delay(1000);
}
مجوز های ارسال و ویرایش
- شما نمیتوانید موضوع جدیدی ارسال کنید
- شما امکان ارسال پاسخ را ندارید
- شما نمیتوانید فایل پیوست کنید.
- شما نمیتوانید پست های خود را ویرایش کنید
-
مشاهده قوانین انجمن
SEO by vBSEO