11-12-2015, 18:53
przyjdzie mi programator w poniedziałek bo chyba coś jest z arduino
Ocena wątku:
Alarm powiadomienie sms aktywacja sms
|
#include <SoftwareSerial.h>
#include <String.h>
#include "leOS2.h"
leOS2 threads;
SoftwareSerial modulGSM(7, 8);
//stany czujnikow
byte stan_czujnik_pir = 0;
byte stan_czujnik_odleglosci = 0;
byte wlacz_alarm = 0;
int pir = 10; // pin czujnika PIR HC-SR501
int odleglosc = 5; // pin czujnika E18-D80NK
int dioda = 11; // pin diody
int czas_odczyt_pir = 1000; // czestotliwosc odczytu czujnika pir
int czas_odczyt_odleglosci = 1000; // czestotliwosc odczytu czujnika odleglowsci
int czas_sprawdzenie_statusu = 10000; // dlugosc trwania sygnalizacji swietlnej
int czas_alarm_dioda = 1000; // czestotliwosc swiecenia diody
int czas_odbierz_wiadomosc = 20000; // czestotliwosc sprawdzania wiadomosci
int czas_wyslij_tekst = 500;
int czas_powerUp = 2000; // czas uruchomienia modulu
byte stan_powerUp = 1;
String msg = String("");
char stan_sms = 0;
void setup() {
modulGSM.begin(19200);
Serial.begin(19200);
pinMode(9, OUTPUT); // pin odpowiadajacy za uruchomienie modulu GMS
pinMode(dioda, OUTPUT); // alarm swietlny - czerwona dioda
pinMode(pir, INPUT); // czujnik PIR HC-SR501
digitalWrite(pir, LOW); // ustawienie na stan niski
//pinMode(odleglosc, INPUT);
pinMode(odleglosc, INPUT_PULLUP); // czujnik E18-D80NK
powerUp(); // uruchamiamy nasz modul GSM
threads.begin(threads.convertMs(15000));
threads.addTask(powerUp, threads.convertMs(czas_powerUp), ONETIME); // dodanie watku, ktory uruchamia modul GSM
threads.addTask(odczyt_pir, threads.convertMs(czas_odczyt_pir), PAUSED); // dodanie watku, ktory odczytuje czujnik PIR, od razu się rozpoczyna
threads.addTask(odczyt_odleglosc, threads.convertMs(czas_odczyt_odleglosci), SCHEDULED_IMMEDIATESTART); // dodanie watku, ktory odczytuje czujnik odleglosci, od razu się rozpoczyna
threads.addTask(alarm_dioda, threads.convertMs(czas_alarm_dioda), PAUSED); // dodanie watku, ktory uruchamia sygnalizacje swietlna, rozpocznie się po wywolaniu go w kodzie programu
threads.addTask(odbierz_wiadomosc, threads.convertMs(czas_odbierz_wiadomosc), SCHEDULED_IMMEDIATESTART);
}
void powerUp() {
digitalWrite(9, stan_powerUp);
stan_powerUp ^= 1;
threads.removeTask(powerUp);
}
void odczyt_pir() {
int pir_odczyt = digitalRead(pir);
if(pir_odczyt == HIGH && stan_czujnik_pir == 0) {
Serial.println("Wykryto ruch czujnikiem PIR!");
stan_czujnik_pir = 1;
byte taskStatus = threads.getTaskStatus(alarm_dioda);
Serial.println(taskStatus);
if (taskStatus == 0)
{
threads.restartTask(alarm_dioda);
threads.pauseTask(odbierz_wiadomosc);
threads.addTask(wyslij_tekst, threads.convertMs(czas_wyslij_tekst), ONETIME);
threads.addTask(wylaczenie_diody, threads.convertMs(czas_sprawdzenie_statusu), SCHEDULED);
}
}
else {
Serial.println("Brak ruchu - czujnik PIR");
}
Serial.println(stan_czujnik_pir);
}
void odczyt_odleglosc() {
int odleglosc_odczyt = digitalRead(odleglosc);
if(odleglosc_odczyt == LOW && stan_czujnik_odleglosci == 0) {
//Serial.println("Wykryto ruch czujnikiem odleglosci!");
stan_czujnik_odleglosci = 1;
byte taskStatus = threads.getTaskStatus(alarm_dioda);
//Serial.println(taskStatus);
if (taskStatus == 0)
{
threads.restartTask(alarm_dioda);
threads.pauseTask(odbierz_wiadomosc);
threads.addTask(wyslij_tekst, threads.convertMs(czas_wyslij_tekst), ONETIME);
threads.addTask(wylaczenie_diody, threads.convertMs(czas_sprawdzenie_statusu), SCHEDULED);
}
}
else {
//Serial.println("Brak ruchu - czujnik odleglosci");
}
//Serial.println(stan_czujnik_odleglosci);
}
void alarm_dioda() {
wlacz_alarm ^= 1;
digitalWrite(dioda, wlacz_alarm);
Serial.println("Sygnal swietlny!");
}
void wylaczenie_diody(){
byte taskStatus = threads.getTaskStatus(alarm_dioda);
if (taskStatus != 0){
//threads.pauseTask(alarm_dioda);
digitalWrite(dioda, LOW);
stan_czujnik_pir = 0;
stan_czujnik_odleglosci = 0;
threads.removeTask(wyslij_tekst);
threads.removeTask(wylaczenie_diody);
threads.pauseTask(alarm_dioda);
threads.restartTask(odbierz_wiadomosc);
}
}
void wyslij_tekst() {
if (stan_czujnik_pir == 1){
wyslij_wiadomosc("PIR");
}
if (stan_czujnik_odleglosci == 1) {
wyslij_wiadomosc("odleglosci");
}
}
void wyslij_wiadomosc(String informacja){
String tekst = "Alarm z czujnika " + informacja + "!";
//Serial.println(tekst);
modulGSM.print("AT+CMGF=1\r"); //Because we want to send the SMS in text mode
delay(500);
modulGSM.println("AT + CMGS = \"+48numer tel "); //send sms message, be careful need to add a country code before the cellphone number
delay(500);
modulGSM.println(tekst); //the content of the message
delay(500);
modulGSM.println((char)26); //the ASCII code of the ctrl+z is 26
delay(500);
modulGSM.println();
//threads.removeTask(wyslij_tekst);*/
}
void odbierz_wiadomosc() {
threads.removeTask(wyslij_tekst);
Serial.println("odbieranie wiadomosci");
modulGSM.print("AT+CMGF=1\r");
delay(500);
modulGSM.print("AT+CNMI=2,2,0,0,0\r");
delay(500);
modulGSM.print("AT+CLIP=0\r");
delay(500);
modulGSM.print("AT+CMGR=1\r");
delay(500);
while (modulGSM.available()) {
msg = modulGSM.readString();
delay(100);
if (msg.indexOf("off") >= 0) {
threads.pauseTask(odczyt_pir);
threads.pauseTask(odczyt_odleglosc);
Serial.println("wylaczone czujnik");
//digitalWrite(dioda, HIGH);
stan_sms = 1;
}
else if (msg.indexOf("on") >= 1) {
threads.restartTask(odczyt_pir);
threads.restartTask(odczyt_odleglosc);
Serial.println("start czujnik");
//digitalWrite(dioda, LOW);
stan_sms = 1;
}
if (stan_sms == 1){
Serial.println("***kasowanie***");
modulGSM.println("AT + CMGD = 1,4");
delay(100);
threads.restartTask(odbierz_wiadomosc);
stan_sms = 0;
}
}
}
void loop() {
}