Halo Khabrovit terkasih, nah, sekarang saya membantu Anda.
Dalam proses mengembangkan perangkat yang menarik, saya mengalami masalah, perlu dengan cepat menghubungkan beberapa sensor htu 21 ke arduinka dan merekam bacaan. Sensor senang dengan kehadiran bus i2c, tetapi kemudian ada kekecewaan, karena alamat mereka statis. Seorang jenius arduino internal datang dengan cara yang cerdas dengan pergantian alternatif dan polling sensor, menggosok telapak tangan saya, saya melihat pengontrol terkadang membeku, karena semuanya tidak sesederhana itu. Googling, saya hanya menemukan ini , jenius yang sama, tetapi dia tampaknya tidak menguji bundel, karena tidak beroperasi selama lebih dari beberapa menit karena arus melalui dioda pelindung port.
Dalam komentar, orang pintar menyarankan cara yang berbeda, dan oh ya, cara paling sederhana dan termurah ternyata menggunakan multiplexer analog cd4051be. Saya mengutip komentar:
"Ya, itu lebih mudah. ββDan ada lebih sedikit kaki, dan perangkat keras I2C (kita tidak berbicara tentang pengontrol di mana SCL dapat dibawa keluar dengan kaki apa pun?) - multiplexer analog bahkan seperti CD4051 prasejarah, SDA diinstal langsung pada semua chip, SCL melalui multiplexer. Tiga kaki tambahan, 8 saluran tambahan. Jangan lupa pasang SCL pull-up ke catu daya setelah multiplexer, dan bukan sebelumnya.
Saya menghubungkannya sesuai dengan skema dari sini , hanya output dari multiplexer tidak ke A0, tetapi ke A5. 3 sensor SCL terhubung ke kaki 15, 13 dan 1, SDA umum.
Kode India paling sederhana, berdasarkan tabel negara bagian
bus alamat diaktifkan melalui digitalWrite () (tolong jangan tekan, saya tidak menggeledah)
int temp1;
int hum1;
int temp2;
int hum2;
int temp3;
int hum3;
#include <HTU21D.h>
HTU21D myHTU21D(HTU21D_RES_RH12_TEMP14);
void setup() {
pinMode(8, OUTPUT); // CD4051 pin 11 (A)
pinMode(9, OUTPUT); // CD4051 pin 10 (B)
pinMode(10, OUTPUT); // CD4051 pin 9 (C)
Serial.begin(9600);
while (myHTU21D.begin() != true)
{
Serial.println(F("Sensor is faild or not connected")); //(F()) saves string to flash & keeps dynamic memory free
delay (200);
// 9600 .
}
}
void loop() {
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
myHTU21D.begin();
delay (150);
temp1 = myHTU21D.readTemperature();
hum1 = myHTU21D.readCompensatedHumidity();
digitalWrite(8, LOW);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
myHTU21D.begin();
delay (150);
temp2 = myHTU21D.readTemperature();
hum2 = myHTU21D.readCompensatedHumidity();
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
digitalWrite(10, LOW);
myHTU21D.begin();
delay (150);
temp3 = myHTU21D.readTemperature();
hum3 = myHTU21D.readCompensatedHumidity();
Serial.print(" T1: "); Serial.print(temp1 );
Serial.print(" H1: "); Serial.print(hum1 );
Serial.print(" T2: "); Serial.print(temp2 );
Serial.print(" 2: "); Serial.print(hum2 );
Serial.print(" 3: "); Serial.print(temp3 );
Serial.print(" 3: "); Serial.print(hum3 );