05-10-2016, 14:45
Witam
Konstruuje projekt który ma być docelowo systemem monitorowania i bezpieczeństwa układu laboratoryjnego. Mój problem polega na tym że:
Chciałbym aby po wciśnięciu określonego przycisku na klawiaturze numerycznej program na chwile zatrzymał się pozwolił na wpisanie hasła a później wrócił do normalnej pracy(zbierania danych z czujników) oczywiście w zależności czy hasło jest poprawne. Obecnie program działa w pętli czyli po wciśnięciu przycisku wykonuje się milion innych operacji przez co nie jest możliwe wpisanie hasła. Jak to zozwiązać? Przerwaniem ale czym go zainicjować? Macie jakieś pomysły?
Poniżej mój kod :
Z góry dziękuje za każdą pomoc bo zatrzymałem się na tym a jeszcze wiele pracy przedemna a terminy krótkie.
Pozdrawiam
Konstruuje projekt który ma być docelowo systemem monitorowania i bezpieczeństwa układu laboratoryjnego. Mój problem polega na tym że:
Chciałbym aby po wciśnięciu określonego przycisku na klawiaturze numerycznej program na chwile zatrzymał się pozwolił na wpisanie hasła a później wrócił do normalnej pracy(zbierania danych z czujników) oczywiście w zależności czy hasło jest poprawne. Obecnie program działa w pętli czyli po wciśnięciu przycisku wykonuje się milion innych operacji przez co nie jest możliwe wpisanie hasła. Jak to zozwiązać? Przerwaniem ale czym go zainicjować? Macie jakieś pomysły?
Poniżej mój kod :
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);
}
}
Z góry dziękuje za każdą pomoc bo zatrzymałem się na tym a jeszcze wiele pracy przedemna a terminy krótkie.
Pozdrawiam