• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Alarm powiadomienie sms aktywacja sms
#31
przyjdzie mi programator w poniedziałek bo chyba coś jest z arduinoSmile
 
Odpowiedź
#32
Witam mam mniej więcej napisany kod tylko nie zawsze działa aktywacja i dezaktywacja sms czujnika(pir) . Chciałbym też aby,czujnik działał bez pętli jednorazowo ten podczerwieni (dojścia działka deszczowni)
Z góry dziękuję za pomoc, ponieważ się uczę, a kod napisał mi znajomy
[Obrazek: file.php?id=2675&mode=view]

Kod:

Kod:
#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() {
}
 
Odpowiedź
#33
Można prosić o pomoc :/
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości