Kod:
// Urzywane biblioteki
#include "DHT.h" // Biblioteka DHT22
#include <OneWire.h> // Biblioteka komunikacji portu szeregowego
#include <DallasTemperature.h> // Biblioteka dla DS18B20
#include <Wire.h> // Biblioteki dla BMP085
#include "Adafruit_BMP085.h"
#include <LiquidCrystal_I2C.h> // Biblioteka dla wyswietlacza
#include <BH1750.h> // Biblioteka swiatlo
#include <DS3231.h>
#include <SPI.h> // Otwiera port SPI do komunikacji z ethernet shield
#include <SD.h> // Biblioteka karty
#include <Password.h>// Biblioteka dotycząca chasła
#include <Keypad.h> // Klawiatura
// Definicje portow dla DHT22
#define DHTPIN 3 // pin sygnałowy z DHT22
#define DHTTYPE DHT22 // Wybranie typy detektora DHT22/DHT11
DHT dht(DHTPIN, DHTTYPE); // Złożenie w jedną zmienna tych dwuch zmiennych
// Definicje portow i komunikacji dla DS18B20
#define ONE_WIRE_BUS 2 // Wejscie pinu sygnałowego jako pin 2
OneWire oneWire(ONE_WIRE_BUS); // Ustalenie komunikacji z czujnikiem
DallasTemperature sensors(&oneWire); // definicje portu dotyczące czujnika
//int tc;
// Definicje zmiennych dla BMP 180
int P;
Adafruit_BMP085 bmp;
// Definicje komunikacji dla BH1750
BH1750 lightMeter;
// Definicje zmiennych czasu
DS3231 clock;
RTCDateTime dt;
// Definicje komunikacji i miennych dla LCD
#define BACKLIGHT_PIN 3 // pin regulujący podswietlenie ustawiony jako pin 3
LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7);// adres magistrali 12c wyswietlaca / lub 20
// definicje Pinów i zapoczątkowanie działania klawiatury
int ledz = 52;
int pir=53;
Password password = Password( "1234" ); // Hasło
const byte ROWS = 4; // Wiersze
const byte COLS = 4; // Kolumny
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = { 23,25,27,29};// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte colPins[COLS] = { 31,33,35,37 };// Connect keypad COL0, COL1 and COL2 to these Arduino pins.
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup() {
Serial.begin(9600);// Dwfinicja odbioru danych daną prędkoscia
sensors.begin(); // Rozpoczęcie biblioteki DS18b20 // moliwe ustawienie bitów z jakimi ma pracować detektor
dht.begin(); // Rozpoczęcie działąnia DHT22
bmp.begin(); // Rozpoczęcie działania BMP180
lightMeter.begin(); // Rozpoczęcie odczytu z BH1750
clock.begin();// Rozpoczecie odczytu z zegara
clock.setDateTime(__DATE__, __TIME__); // Format casowy
SD.begin(4); // Ropoczęcie komunikacji z modułem sd
lcd.begin(20,4); // Romiar wyswietlacza
lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE); // Ustawienie podswietlenia
lcd.setBacklight(HIGH);// Wlaczenie podswietlenia
pinMode(52, OUTPUT);
pinMode(53,OUTPUT);
keypad.addEventListener(keypadEvent); //Inicjalizacja
}
void loop() {
//Klawiatura
keypad.getKey(); // Pobieranie klucza}
// DHT22
float h = dht.readHumidity();// Odczyt wilgotnosci
float t = dht.readTemperature();// Odczyt temperatury
//DS18b20
sensors.requestTemperatures(); // Ustabilizuj DS18b20
sensors.getTempCByIndex(0); // odczyt wartossci z DS18b20
//BMP 180
P = bmp.readPressure()/100; // odczyt cisnienia i wyswietlanie w hPa
//BH1750
uint16_t l = lightMeter.readLightLevel(); // Odczyt oswietlenia BH1750
// CZas DS3231
dt = clock.getDateTime(); // przypisanie zmienenj do czasu
// Wyswietlanie danych w serial monitoże
Serial.println("");
Serial.print(dt.month); Serial.print("_");
Serial.print(dt.day); Serial.print(" ");
Serial.print(dt.hour); Serial.print(":");
Serial.print(dt.minute); Serial.print(":");
Serial.print(dt.second); Serial.println("");
Serial.print("H=");
Serial.print(h);
Serial.print("% ");
Serial.print("Tw=");
Serial.print(t);
Serial.print("*C ");
Serial.print("Tz=");
Serial.print(sensors.getTempCByIndex(0));
Serial.print("*C ");
Serial.print("P=");
Serial.print(P);
Serial.print("hPa ");
Serial.print("E=");
Serial.print(l/10);
Serial.print("lux ");
// Wyswietlanie danych na lcd
lcd.home();
lcd.print(dt.year); lcd.print("_");
lcd.print(dt.month); lcd.print("_");
lcd.print(dt.day); lcd.print(" ");
lcd.print(dt.hour); lcd.print(":");
lcd.print(dt.minute); lcd.print(":");
lcd.print(dt.second);
lcd.setCursor(0,1);
lcd.print("Tw="); lcd.print(t); lcd.print("C");
lcd.setCursor(10,1);
lcd.print("Tz="); lcd.print(sensors.getTempCByIndex(0)); lcd.print("C");
lcd.setCursor(0,2);
lcd.print("P="); lcd.print(P); lcd.print("hPa");
lcd.setCursor(10,2);
lcd.print("E="); lcd.print(l); lcd.print(" lux");
lcd.setCursor(0,3);
lcd.print("H="); lcd.print(h); lcd.print("%");
delay(1000);
// Zapis danych na karte SD
File plik = SD.open("Czyjniki.txt", FILE_WRITE); //otwarcie pliku do zapisu
if (plik) {
plik.print("");
plik.print(dt.year); plik.print("_");
plik.print(dt.month); plik.print("_");
plik.print(dt.day); plik.print(" ");
plik.print(dt.hour); plik.print(":");
plik.print(dt.minute); plik.print(":");
plik.print(dt.second);
plik.print(" Tz= "); plik.print(sensors.getTempCByIndex(0)); plik.print("*C");
plik.print(" Tw= "); plik.print(t); plik.print("*C");
plik.print(" H= "); plik.print(h); plik.print("%");
plik.print(" P= "); plik.print(P); plik.print("hPa");
plik.print(" E= "); plik.print(l); plik.print("lux");
plik.close();
}
else {
Serial.println("Blad przy otwieraniu pliku.");
}
}
void keypadEvent(KeypadEvent eKey){
switch (keypad.getState()){
case PRESSED:
Serial.print("Wprowadz haslo: ");
Serial.println(eKey);
switch (eKey){
case '*': checkPassword(); break;
case '#': password.reset(); break;
default: password.append(eKey);
}}}
//Jesli haslo jest poprawne
void checkPassword(){
if (password.evaluate()){
Serial.println("Poprawne");
digitalWrite(52,HIGH);
digitalWrite(53,LOW);}
// Jesli nie
else{
Serial.println("Niepoprawne");
digitalWrite(52,LOW);
digitalWrite(53, HIGH);
}
}