Thermohygrometer med klocka och LCD-display på Arduino UNO (4 / 7 steg)
Steg 4: Kombinera DS3231 och DHT22
Okej, är det dags att kombinera de två enheterna tidigare sett!
Detta förfarande består av att göra ett "lapptäcke" mellan de två koderna tidigare sett.
Öppna både koder och kopiera & förbi koden för DHT22 i ett av DS3231 (ds3231_bis.ino).
Bibliotek, variabler och konstanter
I den ds3231_bis.ino koden lägger du till biblioteket behövs av dht22, definiera vilka stift det kommer att använda och ställa in variabeln för att läsa och skriva värden för temperatur och luftfuktighet upptäcks. Här är hur i början av koden ska se ut:
#include "Wire.h"
#include < dht.h >
#define DHT22_PIN 9
#define DS3231_I2C_ADDRESS 0x68
DHT DHT;
Funktioner
Bara efter två huvudfunktioner (ogiltig loop och ogiltiga inställningar) ska vi sätta "sekundär" de:
- bcdToDec---som sagt tidigare, det som krävs för att konvertera binära tal till decimaler
- readDS3231time---krävs för att läsa data från DS3231
- displayTime---krävs för att skriva ut uppgifter och tid på den seriella monitorn
För att inte röra upp något, gjorde vi en annan funktion som heter dht22. Den innehåller alla rader i setup -funktionen av våra dht22.ino. Tack vare detta ska våra loop och installationen vara rent och snyggt.
Konvertera binary coded decimal till normala decimaltal
byte bcdToDec(byte val)
{
tillbaka ((val/16 * 10) + (val % 16));
}
void readDS3231time (byte * andra,
byte * minut,
byte * timme,
byte * dayOfWeek,
byte * dayOfMonth,
byte * månad,
byte * år)
{
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); Ange DS3231 register pekaren till 00h
Wire.endTransmission();
Wire.requestFrom (DS3231_I2C_ADDRESS, 7);
begära sju byte data från DS3231 start från registret 00h
* andra = bcdToDec(Wire.read() & 0x7f);
* minut = bcdToDec(Wire.read());
* timme = bcdToDec(Wire.read() & 0x3f);
* dayOfWeek = bcdToDec(Wire.read());
* dayOfMonth = bcdToDec(Wire.read());
* månad = bcdToDec(Wire.read());
* år = bcdToDec(Wire.read());
}
LÄSA DATA
void dht22)
{
LÄSA DATA
Serial.Print (DHT22, \t");
int chk = DHT.read22(DHT22_PIN);
Switch (chk)
{
fall DHTLIB_OK:
Serial.Print("OK,\t");
bryta;
fall DHTLIB_ERROR_CHECKSUM:
Serial.Print (Checksum error, \t");
bryta;
fall DHTLIB_ERROR_TIMEOUT:
Serial.Print ("Time out fel, \t");
bryta;
standard:
Serial.Print ("okänt fel, \t");
bryta;
}
Serial.Print (DHT.humidity, 1);
Serial.Print(",\t");
Serial.println (DHT.temperature, 1);
}
void displayTime()
{
byte sekund, minut, timme, dayOfWeek, dayOfMonth, månad, år.
Hämta data från DS3231
readDS3231time (& sekund, minut, timme, & dayOfWeek, & dayOfMonth, & månad,
& år);
Skicka den till den seriella monitorn
Serial.Print (timme, DEC).
konvertera variabeln byte till ett decimaltal när visas
Serial.Print(":");
om (minut < 10)
{
Serial.Print("0");
}
Serial.Print (minut, DEC).
Serial.Print(":");
om (andra < 10)
{
Serial.Print("0");
}
Serial.Print (andra, DEC);
Serial.Print("");
Serial.Print (dayOfMonth, DEC);
Serial.Print("/");
Serial.Print (månad, DEC).
Serial.Print("/");
Serial.Print (år, DEC).
Serial.Print ("dag i veckan:");
Switch(DAYOFWEEK) {
fall 1:
Serial.println("Sunday");
bryta;
fall 2:
Serial.println("Monday");
bryta;
fall 3:
Serial.println("Tuesday");
bryta;
fall 4:
Serial.println("Wednesday");
bryta;
fall 5:
Serial.println("Thursday");
bryta;
fall 6:
Serial.println("Friday");
bryta;
fall 7:
Serial.println("Saturday");
bryta;
}
}
Setup-funktionen
De viktigaste funktionerna är Wire.begin() och Serial.begin(). Initiering av DS3231 och seriell bildskärm, respektive. De övriga raderna skriva ut inte strikt krävs information om DHT22.
void setup()
{
Wire.BEGIN();
Serial.BEGIN(115200);
Serial.println ("DHT TESTPROGRAMMET");
Serial.Print ("bibliotek VERSION:");
Serial.println(DHT_LIB_VERSION);
Serial.println();
Serial.println ("typ, \tstatus, \tHumidity (%),\tTemperature (C)");
}
Loop funktion
Loop funktion är ganska enkelt: det kräver bara två funktioner att fördröja operationen 2 sekunder. Varför två sekunder? Eftersom DHT22s måste två sekunder att göra en upptäckt.
#include "Wire.h"
void loop()
{
displayTime(); Visa realtidsklocka uppgifter på seriell övervaka,
dht22 (); Visa värdet av luftfuktighet och temperatur upptäcks
Delay(2000);
}
Som vanligt fäst vi koden klar för användning.