خوب بریم سراغ ادامه موضوع
من قسمت های بالا را بصورت برنامه نویسی توضیح دوباره میدم

Const Ic_w = &HEE
Const Ic_r = &HEF

تعریف دو متغییر که در واقع آدرس سخت افزاری برا نوشتن و دیگری آدرس سخت افزاری برا خوندن هست

I2cstart
I2cwbyte Ic_w
I2cwbyte &HF4
I2cwbyte &B11111111

I2cwbyte &HF5
I2cwbyte &B10011100

I2cstop
Waitms 50

دستورات بالا تنظیمات آدرس f5 و F4 را در سنسور نوشته و باعث راه اندازی میشود که در بالا توضیح داده شد و من یه تغییر کوچولو در f5 دادم و بیت شماره 2,3,4 را یک کردم تا فیلتر فشار فعال باشه
دوستان من تست کردم فعال بودن این فیلتر بسیار در نتیجه خروجی فشار تاثیر داره و نوسانات و نویز را کامل از بین میبره
تغیراتی هم در f4 دادم تا داده هی فشار و دما بصورت 20 بیتی خوانده شود و در بالا به صورت 16 بیتی تنظیم کرده بودم

الان سنسور با دستورات فوق راه اندازی شده و داره از دما و فشار نمونه گیری میکنه حالا دما و فشار رو پشت سر هم میخونیم این پشت سر هم بودن توصیه سازنده هست

I2cstart
I2cwbyte Ic_w
I2cwbyte &HF7
I2cstart
I2cwbyte Ic_r

I2crbyte P1 , Ack
I2crbyte P2 , Ack
I2crbyte P3 , Ack

I2crbyte T1 , Ack
I2crbyte T2 , Ack
I2crbyte T3 , Nack

I2cstop
Waitms 50

با دستورات بالا فشار خونده شده و در سه بایت p1 , p2 , p3 ریخته شده که p1 پرارزشترین بایت و p3 کم ارزشترین بایت از مقدار کل فشار هست
فراموش نکنید که ما در سه بایت یعنی 24 بیت فشار رو خوندیم اما فشار یک عدد 20 بیتی هست که چهار بیت کم ارزش p3 کاربردی نداره مطابق جدول صفحه 24
برای اینکه این مقادیر را به بچسبانیم و عدد فشار را در یک متغییر بریزیم این کار رو انجام میدیم

Dim Adc_p As Long
متغییری از نوع long تعریف میکنیم

Dim Z As Single
متغییر زد هم تعریف کردم برای محاسبات و بعد از محاسبات ارزشی برا ما نخواهد داشت

Adc_p = P1 * 4096
Z = P2 * 16
Adc_p = Z + Adc_p
Adc_p.3 = P3.7
Adc_p.2 = P3.6
Adc_p.1 = P3.5
Adc_p.0 = P3.4

خط اول p1 رو در 4096 ضرب کرده تا بیت های p1 را در بیت 19 تا 10 از متغییر Adc_p ریخته شود
همین کار را برا p2 انجام میدهیم و در متغییر Adc_p میریزیم اما در 16 ضرب میکنیم تا چهار بیت شیفت به چپ کند در متغییر Adc_p که در واقع مقدار خام فشار است
چند خط آخر هم جایگاه هر بیت از pc را در متغییر Adc_p مشخص میکند
من چون مبتدی هستم روش بهتری به ذهنم نرسید اگر شما روش بهتری بلد بودید بگید تا من هم اون روش رو انجام بدم، در هر صورت دستورات فوق کار رو برا ما انجام میده بدون خطا

دقیقا روش فوق رو برای دما هم انجام میدیم

Dim Adc_t As Long
متغییر رو تعریف کرده و طبق دستورات زیر دما هم به صورت 20 بیتی شکل میدیم در متغییر Adc_t

Adc_t = T1 * 4096
Z = T2 * 16
Adc_t = Z + Adc_t
Adc_t.3 = T3.7
Adc_t.2 = T3.6
Adc_t.1 = T3.5
Adc_t.0 = T3.4

همه چیز الان حل شد، شما فشار و دما رو خوندید به صورت خام
در پست بعدی من توضیح میدم چطور مقدار دما رو به مقدار واقعی دما به سانتیگراد تبدیل کنیم که یک فرمول ساده داره
و در پست بعدی +1 هم توضیح میدم چطور فشار رو به مقدار واقعی فشار به پاسکال یا بار یا psi تبدیل کنیم