Stap 3: Code:
De code van de arduino voor HTS221 kan worden gedownload van onze github archief-ControlEverythingCommunity
Hier is de link voor hetzelfde:
https://github.com/ControlEverythingCommunity/HTS2...
Het gegevensblad van HTS221 kan hier worden gevonden:
https://S3.amazonaws.com/controleverything.Media/c...
We nemen de bibliotheek Wire.h om de I2c communicatie van de sensor met de Arduino board.
U kunt ook de code kopiëren vanaf hier, het wordt als volgt gegeven:
Gedistribueerd met een licentie van de vrije wil.
Gebruik het elke manier wilt u, op de winst of het gratis, mits het past in de licenties van de bijbehorende werken.
HTS221
Deze code is ontworpen om te werken met de HTS221_I2CS I2C Mini Module beschikbaar vanaf ControlEverything.com.
https://www.controleverything.com/content/Humidit...
#include < Wire.h >
HTS221 I2C adres is 0x5F
#define Addr 0x5F
VOID Setup
{
I2C communicatie als MASTER initialiseren
Wire.begin();
Initialiseren van seriële communicatie, set baud-rate = 9600
Serial.begin(9600);
I2C-overdracht starten
Wire.beginTransmission(Addr);
Gemiddelde upconfiguratie selecteren register
Wire.write(0x10);
Gemiddelde monsters van de temperatuur = 256, vochtigheid gemiddelde monsters = 512
Wire.write(0x1B);
Stoppen met I2C transmissie
Wire.endTransmission();
I2C-overdracht starten
Wire.beginTransmission(Addr);
Besturingselement SELECT register1
Wire.write(0x20);
Power ON, continue update, gegevenssnelheid uitgang = 1 Hz
Wire.write(0x85);
Stoppen met I2C transmissie
Wire.endTransmission();
delay(300);
}
void loop
{
unsigned int gegevens [2];
unsigned int val [4];
unsigned int H0, H1, H2, H3, T0, T1, T2, T3, ruwe;
Vochtigheid calliberation waarden
for (int i = 0; ik < 2; i ++)
{
I2C-overdracht starten
Wire.beginTransmission(Addr);
Verzenden van gegevens registreren
Wire.write ((48 + i));
Stoppen met I2C transmissie
Wire.endTransmission();
Aanvraag 1 byte van de gegevens
Wire.requestFrom (Addr, 1);
Lees 1 byte van de gegevens
if(Wire.available() == 1)
{
gegevens [i] = Wire.read();
}
}
Vochtigheid gegevens converteren
H0 = data [0] / 2;
H1 = data [1] / 2;
for (int i = 0; ik < 2; i ++)
{
I2C-overdracht starten
Wire.beginTransmission(Addr);
Verzenden van gegevens registreren
Wire.write ((54 + i));
Stoppen met I2C transmissie
Wire.endTransmission();
Aanvraag 1 byte van de gegevens
Wire.requestFrom(Addr,1);
Lees 1 byte van de gegevens
if(Wire.available() == 1)
{
gegevens [i] = Wire.read();
}
}
Vochtigheid gegevens converteren
H2 = (gegevens [1] * 256.0) + data [0];
for (int i = 0; ik < 2; i ++)
{
I2C-overdracht starten
Wire.beginTransmission(Addr);
Verzenden van gegevens registreren
Wire.write ((58 + i));
Stoppen met I2C transmissie
Wire.endTransmission();
Aanvraag 1 byte van de gegevens
Wire.requestFrom(Addr,1);
Lees 1 byte van de gegevens
if(Wire.available() == 1)
{
gegevens [i] = Wire.read();
}
}
Vochtigheid gegevens converteren
H3 = (gegevens [1] * 256.0) + data [0];
Temperatuur calliberation waarden
I2C-overdracht starten
Wire.beginTransmission(Addr);
Verzenden van gegevens registreren
Wire.write(0x32);
Stoppen met I2C transmissie
Wire.endTransmission();
Aanvraag 1 byte van de gegevens
Wire.requestFrom(Addr,1);
Lees 1 byte van de gegevens
if(Wire.available() == 1)
{
T0 = Wire.read();
}
I2C-overdracht starten
Wire.beginTransmission(Addr);
Verzenden van gegevens registreren
Wire.write(0x33);
Stoppen met I2C transmissie
Wire.endTransmission();
Aanvraag 1 byte van de gegevens
Wire.requestFrom(Addr,1);
Lees 1 byte van de gegevens
if(Wire.available() == 1)
{
T1 = Wire.read();
}
I2C-overdracht starten
Wire.beginTransmission(Addr);
Verzenden van gegevens registreren
Wire.write(0x35);
Stoppen met I2C transmissie
Wire.endTransmission();
Aanvraag 1 byte van de gegevens
Wire.requestFrom (Addr, 1);
Lees 1 byte van de gegevens
if(Wire.available() == 1)
{
ruwe = Wire.read();
}
ruwe = raw & 0x0F;
De temperatuur calliberation waarden omzetten in 10-bits
T0 = ((raw & 0x03) * 256) + T0;
T1 = ((raw & 0x0C) * 64) + T1;
for (int i = 0; ik < 2; i ++)
{
I2C-overdracht starten
Wire.beginTransmission(Addr);
Verzenden van gegevens registreren
Wire.write ((60 + i));
Stoppen met I2C transmissie
Wire.endTransmission();
Aanvraag 1 byte van de gegevens
Wire.requestFrom(Addr,1);
Lees 1 byte van de gegevens
if(Wire.available() == 1)
{
gegevens [i] = Wire.read();
}
}
De gegevens converteren
T2 = (gegevens [1] * 256.0) + data [0];
for (int i = 0; ik < 2; i ++)
{
I2C-overdracht starten
Wire.beginTransmission(Addr);
Verzenden van gegevens registreren
Wire.write ((62 + i));
Stoppen met I2C transmissie
Wire.endTransmission();
Aanvraag 1 byte van de gegevens
Wire.requestFrom(Addr,1);
Lees 1 byte van de gegevens
if(Wire.available() == 1)
{
gegevens [i] = Wire.read();
}
}
De gegevens converteren
T3 = (gegevens [1] * 256.0) + data [0];
I2C-overdracht starten
Wire.beginTransmission(Addr);
Verzenden van gegevens registreren
Wire.write(0x28 | 0x80);
Stoppen met I2C transmissie
Wire.endTransmission();
4 bytes aan gegevens aanvragen
Wire.requestFrom(Addr,4);
Lees 4 bytes aan gegevens
vochtigheid msb vochtigheid lsb, msb temp, temp lsb
if(Wire.available() == 4)
{
Val [0] = Wire.read();
Val [1] = Wire.read();
Val [2] = Wire.read();
Val [3] = Wire.read();
}
De gegevens converteren
zweven vochtigheid = (val [1] * 256.0) + val [0];
vochtigheid = ((1.0 * H1)-(1.0 * H0)) * (1.0 * vochtigheid - 1.0 * H2) / (1,0 * H3 - 1.0 * H2) + (1.0 * H0);
int. temp = (val [3] * 256) + val [2];
zweven cTemp = (((T1-T0) / 8.0) * (temp - T2)) / (T3 - T2) + (T0 / 8.0);
zweven fTemp = (cTemp * 1.8) + 32;
Uitvoergegevens naar seriële monitor
Serial.Print ("relatieve vochtigheid:");
Serial.Print(Humidity);
Serial.println ("RH %");
Serial.Print ("temperatuur in Celsius:");
Serial.Print(cTemp); Serial.println ("C");
Serial.Print ("temperatuur in Fahrenheit:");
Serial.Print(fTemp);
Serial.println ("F");
delay(500);
}