Hallo liebes Forum,
ich habe gerade so meine liebe Not mit dem HYT 221 und den Arduino
(Leonardo)
Hier das Datenblatt vom Sensor:
http://www.hygrochip.com/fileadmin/user_upload/Produkte/Sensorelemente/Digitale_Feuchtesensoren/HYT_221/IST_221/EN_HYT221_201109.pdf
Ich habe den Sensor mit 5,6K Pullups an SDA und SCL (an 5V)
angeschlossen und den Sensor mit den passenden Pins am Leonardo
verbunden: 2 (SDA), 3 (SCL)
Nun das Problem:
Ich kann den Sensor über die Wire.h lib nicht ansprechen. Ich bekomme
einfach keine Daten.
mein Code sieht so aus:
1 | #include <Wire.h> // include Wire library for I2C
|
2 | #define HYT221_ADDR 0x28
|
3 |
|
4 | void setup() {
|
5 | Wire.begin(); // start Wire library as I2C-Bus Master
|
6 | Serial.begin(9600);
|
7 | }
|
8 |
|
9 | void loop() {
|
10 | double Humidity;
|
11 | double Temperature;
|
12 | Wire.beginTransmission(HYT221_ADDR);
|
13 | Wire.write(0);
|
14 | int av1 = Wire.available();
|
15 | int Ack = Wire.read(); // receive a byte
|
16 | Serial.print("ack: ");
|
17 | Serial.println(Ack);
|
18 | Serial.print("available preinit: ");
|
19 | Serial.println(av1);
|
20 | byte firstStatus = Wire.endTransmission();
|
21 | Serial.print("status preinit: ");
|
22 | Serial.println(firstStatus);
|
23 | delay(100);
|
24 |
|
25 | // READ DATA from here on
|
26 | Wire.beginTransmission(1);
|
27 | Wire.requestFrom(HYT221_ADDR, 4); //Reade 1 byte
|
28 | Wire.available();
|
29 | unsigned int b1 = Wire.read(); // receive a byte
|
30 | unsigned int b2 = Wire.read(); // receive a byte
|
31 | unsigned int b3 = Wire.read(); // receive a byte
|
32 | unsigned int b4 = Wire.read(); // receive a byte
|
33 | Wire.write(0); //NACK
|
34 |
|
35 | Serial.print("b1: ");
|
36 | Serial.println(b1);
|
37 | Serial.print("b2: ");
|
38 | Serial.println(b2);
|
39 | Serial.print("b3: ");
|
40 | Serial.println(b3);
|
41 | Serial.print("b4: ");
|
42 | Serial.println(b4);
|
43 |
|
44 | int RawHumidBin = b1 << 8 | b2;
|
45 | // compound bitwise to get 14 bit measurement first two bits
|
46 | // are status/stall bit (see intro text)
|
47 | RawHumidBin = (RawHumidBin &= 0x3FFF);
|
48 | Humidity = 100.0/pow(2,14)*RawHumidBin;
|
49 |
|
50 | b4 = (b4 &= 0x3F); //Mask away 2 least sign. bits see HYT 221 doc
|
51 | int RawTempBin = b3 << 6 | b4;
|
52 | Temperature = 165.0/pow(2,14)*RawTempBin-40;
|
53 | Wire.endTransmission();
|
54 | delay(1000); // wait for a second
|
55 | Serial.print(Humidity);
|
56 | Serial.print("% - temp: ");
|
57 | Serial.println(Temperature);
|
58 | }
|
Die Serielle ausgabe liefert das hier:
1 | ack: -1
|
2 | available preinit: 0
|
3 | status preinit: 2
|
4 | b1: 65535
|
5 | b2: 65535
|
6 | b3: 65535
|
7 | b4: 65535
|
8 | 99.99% - temp: -40.01
|
So wie ich das sehe akzeptiert der Sensor die Adresse nicht, da ein NACK
bei der übermittlung der Adresse kommt.
Ich hab schon mittels eines anderen Sample codes am Bus nach den
verfügbaren adressen gesucht und der Sensor wird an 0x28 gemeldet. Jetzt
bin ich mir nur nicht sicher, ob ich den Sensor wirklich richtig
adressiere. Ich habe schon versucht die adresse um 1 Bit nach rechts
oder nach links zu schieben, hat aber beides keinen Erfolg gebracht.
Nun frage ich in meiner Ideenlosigkeit euch, ob Ihr mir hier vielleicht
helfen könnt.
Für Eure Unterstützung danke ich auf jeden Fall schon jetzt einmal.