Feuchtigkeits- & Temeratursensor über I2C

Hallo zusammen, Ich habe einen "ChipCap2 a Fully Calibrated Humidity and Temperature Sensor" und möchte diesen gerne mit dem "Arduino Uno" über das I2C-Interface verbinden. Da ich noch Blutiger Anfänger bin brauche ich dabei bitte Hilfe. Ich habe schon in die Datenblätter gesehen und versucht diese zu übersetzen. Leider sind meine Englischkenntnisse eher mager :( Die Hardware kann ich verbinden, Probleme bereitet mir die Kommunikation mit dem Sensor. Wie lese ich die Daten aus?

Gruß File

Das scheint mir so eher ein selten verwendetes Bauteil. Ich hab so auch nix brauchbares in Bezug auf Arduinos gefunden. Das Datenblatt mit dem Kommunikationsprotokoll kann man dort ja laden: http://www.ge-mcs.com/download/moisture-humidity/916-127B.pdf ab Seite 19. I2C ist eigentlich nicht sooo schwer, aber .... Gebräuchlich sind für deine avisierte Anwendung sicher eher funktionsgleiche Teile wie DHT11 oder besser DHT22 (fast gleiche Spezifikation). Vielleicht solltest du einfach mal versuchen, die dafür gebräuchlichen Libs zu probieren - vielleicht klappts ja ?! Falls nicht, könnte/müsste man sich halt die Mühe machen und schauen, wo die Unterschiede liegen und eine DHT-Lib dann anpassen. Das hier so was jemand schon gemacht hat .... ich glaube eher nicht. Oder einfach einen DHT22 kaufen ?! 8)

Die I2C Kommunikation sieht in den Datenblättern immer so furchtbar kompliziert aus. Aber den ganzen Kram mit Start- und Stop-Conditions, Acknowledge und Read/Write Bits kannst du ignorieren. Das erledigt die Wire-Lib für dich. Wire.beginTransmission() machst z.B. das "Master must send the slave adresss"

Ganz allgemein, geht Schreiben so:

void write(byte adr, byte data)
{
      Wire.beginTransmission(DEVICE_ADR);
      Wire.write(adr);
      Wire.write(data);
      Wire.endTransmission();
}

Hier können beliebig viele Daten geschrieben werden, nicht nur 1 Byte auf einmal.

Und lesen so:

byte read(byte adr)
{
      Wire.beginTransmission(DEVICE_ADR);
      Wire.write(adr);
      Wire.endTransmission();

      Wire.requestFrom(DEVICE_ADR, 1);      //hier kann man auch mehr Daten als 1 anfordern und dann mehrmals lesen
      return Wire.read(); 
}

Wenn du da mehr als ein Byte zurückgeben willst, musst du das allerdings anders machen. z.B. Pointer auf die return-Werte oder ein Array als Parameter übergeben.

Du musst das aber immer noch auf deinen Sensor anpassen. Wenn du das Datenblatt nicht verstehst, nützt dir das auch nichts.