Przerwania, z opóźnieniem jak ogarnąć
-
alankedzior
- Posts: 114
- Joined: Mon Jun 18, 2018 5:38 pm
Jesteś w stanie o to okomemtowac żeby dotarło do mnie jak to funkcjonuje
-
pzygmunt
- Posts: 20302
- Joined: Tue Jan 19, 2016 9:26 am
- Location: Paczków
- Been thanked: 59 times
Code: Select all
#define PIN_BUTTON 21
#define PIN_LIGHT 28
#define PIN_ALARM 34
#define PIN_PIR 24
#define PIN_LED 13
#define ARM_DELAY 5000 // Opóźnienie uzbrojenia alarmu w ms.
#define ALARM_DELAY 5000 // Opóźnienie załączenia alarmu w ms.
#define LED_BLINK_PERIOD 500 // Okres migania diody w ms.
#define ALARM_ON LOW // definicja określająca stan pinu dla alarmu włączonego
#define ALARM_OFF HIGH // definicja określająca stan pinu dla alarmu wyłączonego
unsigned long alarm_delay_timer = 0; // Licznik czasu opóźnienia załączenia alarmu
unsigned long arm_disarm_timer = 0; // Licznik czasu opóźnienia uzbrojenia alarmu
bool waiting_for_arm = false; // Zmienna określająca czy czekamy na uzbrojenie alarmu
unsigned long alarm_armed = 0; // Zmienna określająca czy alarm jest uzbrojony
unsigned long led_blink_time = 0; // Locznik czasu migania diody podczas uzbrajania
unsigned long btn_next_check = 0; // Czas kolejnego sprawdzania stanu przycisku
char btn_pressed = false; // Zmienna określająca czy przucisk podczas ostatniego sprawdzania był wciśnięty czy też nie
// Funkajca zwraca prawdję jeżeli przycisk jest wciśnięty
bool isBtnPressed() {
return digitalRead(PIN_BUTTON) == LOW;
}
// Funkajca zwraca prawdję jeżeli wykryto ruch
bool motionDetected() {
return digitalRead(PIN_PIR) == HIGH;
}
// Funkajca zwraca prawdję jeżeli alarm jest załączony
bool isArmed() {
return alarm_armed != 0;
}
void setup() {
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_LIGHT, OUTPUT);
digitalWrite(PIN_LIGHT, HIGH);
pinMode(PIN_ALARM, OUTPUT);
digitalWrite(PIN_ALARM, ALARM_OFF);
pinMode(PIN_PIR, INPUT);
pinMode(PIN_BUTTON, INPUT_PULLUP);
btn_pressed = isBtnPressed(); // Zapamiętujemy stan przycisku przy inicjalizacji
}
// Detekcja intruzów / uruchamianie alarmu
void intruders_detection(unsigned long now) {
if (!isArmed()) return; // Jeżeli alarm nie jest uzbrojony to wyjdź z funkcji
if (alarm_delay_timer == 0 ) { // Jeżeli odliczanie nie zostało zainicjowane
if ( motionDetected() ) // Jeżeli wykryto ruch
{
alarm_delay_timer = now + ALARM_DELAY; // zainicjuj odliczanie poprzez określenie czasu po którym nastąpi załączenie alarmu
}
} else if (alarm_delay_timer < now) { // Jezeli odliczanie zostalo zainicjowane (wynika to z else) i upłynął zadany czas
digitalWrite(PIN_ALARM, ALARM_ON); // Włącz alarm
}
}
// Miganie diody podczas uzbrajania
void led_blinking(unsigned long now) {
if (waiting_for_arm && led_blink_time < now) { // Jeżeli czekamy na uzbrojenie i upłynął czas do nastepnej zmiany stanu pinu do którego pdołaczona jest dioda
led_blink_time = now + LED_BLINK_PERIOD; // Ustaw opóźnienie dla kolejnego "mignięcia"
digitalWrite(PIN_LED, digitalRead(PIN_LED) == HIGH ? LOW : HIGH); // Odwóróc stan pin-u jeżeli HIGH to ustaw LOW. Jeżeli LOW do ustaw HIGH
}
}
// Włącz oświetlenie
void turn_lights_on() {
digitalWrite(PIN_LIGHT, motionDetected() ? HIGH : LOW); // Włącz jeżeli wykryto ruch. Wyłącz jeżeli brak ruchu.
}
// Osbługa przycisku
void button_check(unsigned long now) {
if (now < btn_next_check // Jeżeli upłynął zadany czas do kolejnego sprawdzania (pozwala to wyeliminować drgania przycisku)
|| btn_pressed == isBtnPressed() ) return; // i zmienił się stan przycisku to przechodzi dalej. Jeżeli nie to wychodzi z funkcji
btn_pressed = isBtnPressed(); // Zapamiętaj stan przycisku
btn_next_check = now + 50; // Ustaw opóźnienie do kolejnego sprawdzania (50ms.)
if (btn_pressed) { // Jeżeli przycisk wciśnięty
waiting_for_arm = !waiting_for_arm && !isArmed(); // Czekamy na uzbrajanie jeżeli obecnie nie czekamy na uzbrojenie i alarm jest nieuzbrojony
arm_disarm_timer = now + ( waiting_for_arm ? ARM_DELAY : 0 ); // Ustawo opóźnienie jeżeli uzbrajamy. Jeżeli rozbrajamy to nie czekaj
}
}
// Uzbrajanie i rozbrajanie alarmu
void armdisarm(unsigned long now) {
if (arm_disarm_timer == 0
|| arm_disarm_timer > now ) return; // Jeżeli licznik czasu nie jest ustawiony lub jeszcze nie nadszedł czas uzbrojenia/rozbrojenia to wyjdź
arm_disarm_timer = 0; // Deaktywuj lincznik odliczania
alarm_armed = waiting_for_arm ? now : 0; // Jeżeli czekaliśmy na uzbrojenie to uzbrój określając moment uzbrojenia. Jeżeli nie to rozbrój
waiting_for_arm = false; // Nie czekamy już na uzbrojenie
digitalWrite(PIN_LED, isArmed() ? HIGH : LOW); // Ustawiamy diodę odpowiednio w zależności czy alarm jest uzbrojony czy też nie
if (!isArmed()) { // Jeżeli alarm rozbrojony
alarm_delay_timer = 0; // Anulujemy odliczanie do alarmu
digitalWrite(PIN_ALARM, ALARM_OFF); // Wyłaczamy alarm (mógł być włączony)
}
}
void loop() {
unsigned long now = millis();
intruders_detection(now);
led_blinking(now);
button_check(now);
armdisarm(now);
turn_lights_on();
}SUPLA.... Nareszcie w domu.
-
alankedzior
- Posts: 114
- Joined: Mon Jun 18, 2018 5:38 pm
Jesteś WIELKI jak HIGH w moim nowym programie
jak całość zacznie funkcjonować postaram się przedstawić wam projekt mojego alarmu.dzięki Bardzo
-
alankedzior
- Posts: 114
- Joined: Mon Jun 18, 2018 5:38 pm
@pzygmunt
Dodałem do twojego programu opcję wysyłania sms, wszystko działa Sms wysyła lecz nie mogę wyłączyć alarmu gdy dodam linijkę sendsms, czy spowodowane jest to brakiem przerwania na przycisku ? czy możesz coś poradzić jeszcze w tym temacie.
Dodałem do twojego programu opcję wysyłania sms, wszystko działa Sms wysyła lecz nie mogę wyłączyć alarmu gdy dodam linijkę sendsms, czy spowodowane jest to brakiem przerwania na przycisku ? czy możesz coś poradzić jeszcze w tym temacie.
Code: Select all
#include "agsm_SMS_lbr.h"
#include <SoftwareSerial.h>
#define powerPIN 7
#define resetPIN 6
#define statusPIN 5
#define BUFFDSIZE 1024
const char *numer = "0123456789";
const char *wiadomosc = "Uwaga! Wykryto ruch!";
int state = 0, i = 0, powerState = 0;
char ch, buffd[1024], readBuffer[BUFFDSIZE];
SoftwareSerial agsmSerial(10, 3);
#define PIN_BUTTON 21
#define STREFA1 28
#define STREFA2 29
#define STREFA3 30
#define STREFA4 31
#define PIN_ALARM 34
#define PIN_PIR_KORYTARZ 26
#define PIN_PIR_LAZIENKA 22
#define PIN_PIR_AKWARIUM 23
#define PIN_PIR_SALON1 24
#define PIN_PIR_SALON2 25
#define PIN_PIR_GARAZ 27
#define PIN_LED 49
#define ARM_DELAY 5000 // Opóźnienie uzbrojenia alarmu w ms.
#define ALARM_DELAY 10000 // Opóźnienie załączenia alarmu w ms.
#define LED_BLINK_PERIOD 500 // Okres migania diody w ms.
#define ALARM_ON LOW // definicja określająca stan pinu dla alarmu włączonego
#define ALARM_OFF HIGH // definicja określająca stan pinu dla alarmu wyłączonego
unsigned long alarm_delay_timer = 0; // Licznik czasu opóźnienia załączenia alarmu
unsigned long arm_disarm_timer = 0; // Licznik czasu opóźnienia uzbrojenia alarmu
bool waiting_for_arm = false; // Zmienna określająca czy czekamy na uzbrojenie alarmu
unsigned long alarm_armed = 0; // Zmienna określająca czy alarm jest uzbrojony
unsigned long led_blink_time = 0; // Licznik czasu migania diody podczas uzbrajania
unsigned long btn_next_check = 0; // Czas kolejnego sprawdzania stanu przycisku
char btn_pressed = false; // Zmienna określająca czy przycisk podczas ostatniego sprawdzania był wciśnięty czy też nie
// Funkajca zwraca prawdję jeżeli przycisk jest wciśnięty
bool isBtnPressed() {
return digitalRead(PIN_BUTTON) == LOW;
}
// Funkajca zwraca prawdję jeżeli wykryto ruch
bool motionDetected() {
return digitalRead(PIN_PIR_KORYTARZ) == HIGH;
return digitalRead(PIN_PIR_LAZIENKA) == HIGH;
return digitalRead(PIN_PIR_AKWARIUM) == HIGH;
return digitalRead(PIN_PIR_SALON1) == HIGH;
return digitalRead(PIN_PIR_SALON2) == HIGH;
return digitalRead(PIN_PIR_GARAZ) == HIGH;
}
// Funkajca zwraca prawdję jeżeli alarm jest załączony
bool isArmed() {
return alarm_armed != 0;
}
void setup() {
agsmSerial.begin(9600);
clearagsmSerial();
clearSerial();
pinMode(PIN_LED, OUTPUT);
pinMode(STREFA1, OUTPUT);
digitalWrite(STREFA1, LOW);
pinMode(STREFA2, OUTPUT);
digitalWrite(STREFA2, LOW);
pinMode(STREFA3, OUTPUT);
digitalWrite(STREFA3, LOW);
pinMode(STREFA4, OUTPUT);
digitalWrite(STREFA4, LOW);
pinMode(PIN_ALARM, OUTPUT);
digitalWrite(PIN_ALARM, ALARM_OFF);
pinMode(PIN_PIR_KORYTARZ, INPUT);
pinMode(PIN_PIR_LAZIENKA, INPUT);
pinMode(PIN_PIR_AKWARIUM, INPUT);
pinMode(PIN_PIR_SALON1, INPUT);
pinMode(PIN_PIR_SALON2, INPUT);
pinMode(PIN_PIR_GARAZ, INPUT);
pinMode(PIN_BUTTON, INPUT_PULLUP);
btn_pressed = isBtnPressed(); // Zapamiętujemy stan przycisku przy inicjalizacji
}
// Detekcja intruzów / uruchamianie alarmu
void intruders_detection(unsigned long now) {
if (!isArmed()) return; // Jeżeli alarm nie jest uzbrojony to wyjdź z funkcji
if (alarm_delay_timer == 0 ) { // Jeżeli odliczanie nie zostało zainicjowane
if ( digitalRead(PIN_PIR_KORYTARZ )) // Jeżeli wykryto ruch
{
alarm_delay_timer = now + ALARM_DELAY; // zainicjuj odliczanie poprzez określenie czasu po którym nastąpi załączenie alarmu
}
} else if (alarm_delay_timer < now) { // Jezeli odliczanie zostalo zainicjowane (wynika to z else) i upłynął zadany czas
digitalWrite(PIN_ALARM, ALARM_ON); // Włącz alarm
// sendSMS(numer, wiadomosc);
}
if (digitalRead(PIN_PIR_AKWARIUM)|| digitalRead(PIN_PIR_SALON1) || digitalRead(PIN_PIR_SALON2) || digitalRead(PIN_PIR_GARAZ) || digitalRead(PIN_PIR_LAZIENKA))
{
digitalWrite(PIN_ALARM, ALARM_ON); // Włącz alarm
// sendSMS(numer, wiadomosc); // nie można wyłączyć alarmu gdy dodam wysyłanie smsa, czy spowodowane jest to brakiem przerwań ? jak to ominąć ?
}
}
// Miganie diody podczas uzbrajania
void led_blinking(unsigned long now) {
if (waiting_for_arm && led_blink_time < now) { // Jeżeli czekamy na uzbrojenie i upłynął czas do nastepnej zmiany stanu pinu do którego pdołaczona jest dioda
led_blink_time = now + LED_BLINK_PERIOD; // Ustaw opóźnienie dla kolejnego "mignięcia"
digitalWrite(PIN_LED, digitalRead(PIN_LED) == HIGH ? LOW : HIGH); // Odwóróc stan pin-u jeżeli HIGH to ustaw LOW. Jeżeli LOW do ustaw HIGH
}
}
//Włącz oświetlenie
void turn_lights_on() {
if (digitalRead(PIN_PIR_KORYTARZ))
{
(digitalWrite(STREFA3, HIGH));
}
else
{
(digitalWrite(STREFA3, LOW));
}
if (digitalRead(PIN_PIR_LAZIENKA))
{
(digitalWrite(STREFA1, HIGH));
}
else
{
(digitalWrite(STREFA1, LOW));
}
if (digitalRead(PIN_PIR_AKWARIUM))
{
(digitalWrite(STREFA1, HIGH));
(digitalWrite(STREFA2, HIGH));
}
else
{
(digitalWrite(STREFA1, LOW));
(digitalWrite(STREFA2, LOW));
}
if (digitalRead(PIN_PIR_SALON2))
{
(digitalWrite(STREFA2, HIGH));
}
else
{
(digitalWrite(STREFA2, LOW));
}
if (digitalRead(PIN_PIR_GARAZ))
{
(digitalWrite(STREFA4, HIGH));
}
else
{
(digitalWrite(STREFA4, LOW));
}
}
// Osbługa przycisku
void button_check(unsigned long now) {
if (now < btn_next_check // Jeżeli upłynął zadany czas do kolejnego sprawdzania (pozwala to wyeliminować drgania przycisku)
|| btn_pressed == isBtnPressed() ) return; // i zmienił się stan przycisku to przechodzi dalej. Jeżeli nie to wychodzi z funkcji
btn_pressed = isBtnPressed(); // Zapamiętaj stan przycisku
btn_next_check = now + 50; // Ustaw opóźnienie do kolejnego sprawdzania (50ms.)
if (btn_pressed) { // Jeżeli przycisk wciśnięty
waiting_for_arm = !waiting_for_arm && !isArmed(); // Czekamy na uzbrajanie jeżeli obecnie nie czekamy na uzbrojenie i alarm jest nieuzbrojony
arm_disarm_timer = now + ( waiting_for_arm ? ARM_DELAY : 0 ); // Ustawo opóźnienie jeżeli uzbrajamy. Jeżeli rozbrajamy to nie czekaj
}
}
// Uzbrajanie i rozbrajanie alarmu
void armdisarm(unsigned long now) {
if (arm_disarm_timer == 0
|| arm_disarm_timer > now ) return; // Jeżeli licznik czasu nie jest ustawiony lub jeszcze nie nadszedł czas uzbrojenia/rozbrojenia to wyjdź
arm_disarm_timer = 0; // Deaktywuj lincznik odliczania
alarm_armed = waiting_for_arm ? now : 0; // Jeżeli czekaliśmy na uzbrojenie to uzbrój określając moment uzbrojenia. Jeżeli nie to rozbrój
waiting_for_arm = false; // Nie czekamy już na uzbrojenie
digitalWrite(PIN_LED, isArmed() ? HIGH : LOW); // Ustawiamy diodę odpowiednio w zależności czy alarm jest uzbrojony czy też nie
if (!isArmed()) { // Jeżeli alarm rozbrojony
alarm_delay_timer = 0; // Anulujemy odliczanie do alarmu
digitalWrite(PIN_ALARM, ALARM_OFF); // Wyłaczamy alarm (mógł być włączony)
}
}
void loop() {
unsigned long now = millis();
intruders_detection(now);
led_blinking(now);
button_check(now);
armdisarm(now);
turn_lights_on();
}
-
alankedzior
- Posts: 114
- Joined: Mon Jun 18, 2018 5:38 pm
Na pewno się zatrzymuje , probowalem tworzyć nowa pętle która wysyła SMS gdy alarm jest załączony ale nic z tego, masz może jakiś pomysł jak to obejść
-
Espablo
- Posts: 1754
- Joined: Wed Jun 29, 2016 5:04 pm
- Location: Oświęcim
Możesz pokazać jak wygląda ta funkcja sendSMS?
Każde urządzenie elektryczne działa o wiele lepiej jeśli podłączysz je do prądu.

-
alankedzior
- Posts: 114
- Joined: Mon Jun 18, 2018 5:38 pm
Z góry zaznaczam, że nie używam tego Arduino do Supli, jest to niezależny moduł który będzie odpowiadał za alarm, światło awaryjne i oświetlenie na schodach.
Biblioteka obsługi sms wygląda tak:
+
podprogram
Biblioteka obsługi sms wygląda tak:
Code: Select all
/*
agsm_SMS_lbr.ino v 0.97/20151118 - a-gsm 2.064 LIBRARY SUPPORT
COPYRIGHT (c) 2015 Dragos Iosub / R&D Software Solutions srl
You are legaly entitled to use this SOFTWARE ONLY IN CONJUNCTION WITH a-gsm DEVICES USAGE. Modifications, derivates and redistribution
of this software must include unmodified this COPYRIGHT NOTICE. You can redistribute this SOFTWARE and/or modify it under the terms
of this COPYRIGHT NOTICE. Any other usage may be permited only after written notice of Dragos Iosub / R&D Software Solutions srl.
This SOFTWARE is distributed is provide "AS IS" in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Dragos Iosub, Bucharest 2015.
http://itbrainpower.net
***************************************************************************************
SOFTWARE:
This file MUST be present, toghether with other files, inside a folder named
like your main sketch!
***************************************************************************************
HARDWARE:
Read the readme file(s) inside the arhive/folder.
***************************************************************************************
HEALTH AND SAFETY WARNING!!!!!!!!!!!!!!!!!!!!
High power audio (around 700mW RMS)! You can damage your years!
Use it with care when headset is connected. USE IT AT YOUR OWN RISK!
We recomend to set the volume at maximum level 20!
***************************************************************************************
*/
/*
send "message" to "phno".
Returns 1 for success, 0 for failure
phtype:
129 (default)
145
161
*/
int sendSMS(char* phno, char* message, char* phtype){
if(ready4SMS != 1)
setupMODEMforSMSusage();
int res=0;
clearBUFFD();
sprintf(buffd,"AT+CMGS=\"%s\",%s\r", phno, phtype);
sprintf(buffd,"AT+CMGS=\"%s\"\r", phno);
agsmSerial.print(buffd);
res = recUARTDATA(">","ERROR",12);
if(res==1) {
clearBUFFD();
sprintf(message,"%s%c",message,0x1A);
aGsmCMD(message,2);
res = recUARTDATA("OK","ERROR",30);
delay(150);
#if defined(SMSLibDebug)
if(res==1 && strstr(buffd,"+CMGS:")) {
Serial.println(F("SMS succeed"));
}else{
Serial.println(F("SMS error"));
}
Serial.flush();
delay(150);
#endif
}
else{
#if defined(SMSLibDebug)
Serial.println(F("SMS rejected"));
Serial.flush();
#endif
}
return res;
}
/*
int sendSMS(char* phno, char* message, char* phtype){
if(ready4SMS != 1)
setupMODEMforSMSusage();
int res=0;
clearBUFFD();
sprintf(buffd,"AT+CMGS=\"%s\",%s\r", phno, phtype);
agsmSerial.print(buffd);
res = recUARTDATA(">","ERROR",12);
if(res==1) {
clearBUFFD();
sprintf(message,"%s%c",message,0x1A);
aGsmCMD(message,2);
res = recUARTDATA("OK","ERROR",30);
delay(150);
if(res==1 && strstr(buffd,"+CMGS:")) Serial.println(F("SMS succeed"));
else Serial.println(F("SMS error"));
Serial.flush();
delay(150);
}
return res;
}
*/
/*
read SMS at SMSindex location
SMS content loaded in buffd
you can check...if strlen(buffd)<1 => no SMS at that location
SMSindex between 1 and noSMS (last used SMS location)
*/
void readSMS(int SMSindex){
clearBUFFD();
if(ready4SMS != 1) setupMODEMforSMSusage();
if(totSMS<1) listSMS();
if(SMSindex > noSMS || SMSindex < 1) return;
int cnt=0;
int j=0;
int run=1;
char c;
unsigned long startTime = 0;
clearagsmSerial();
agsmSerial.print("AT+CMGR=");//send command to modem
agsmSerial.print(SMSindex);//send command to modem
agsmSerial.println(",0");//send command to modem
delay(1);
readline();//just 2 remove modem cmd echo
readline();//just 2 remove second line ==> (containing OK / +CMS ERROR / SMS header)
//her buffd contains the SMS header (sender number, date+time)
if(strlen(buffd)<20)
if(strstr(buffd,"OK")||strstr(buffd,"ERROR:")) {//check empty message location or beyond interval SMS location
clearBUFFD();
clearagsmSerial();
#if defined(SMSLibDebug)
Serial.println(F("noSMS at this location"));
#endif
return;
}
startTime = millis();
while(run){//here
if(TXavailable()){
c = agsmSerial.read();
if(c == '\r') {//look for CR char(end of SMS message)
buffd[cnt]=0x00;
break;
}
if(cnt < BUFFDSIZE-1) {
buffd[cnt] = c;
} else {//buffer overflow here (avoided)
break;
}
cnt++;
}
else if(millis() - startTime > (unsigned long) 2000) //unblocking procedure
break;
}
buffd[cnt]=0x00;//add string terminator
clearagsmSerial();//clear remaining serial chars
}
/*just print all SMSs to the debug console...*/
void readAllSMS(){
listSMS();
clearagsmSerial();
int cnt;
cnt = noSMS;
while (cnt>0){
Serial.print(F("SMS "));//noSMS
Serial.println(cnt);
readSMS(cnt);
Serial.println(buffd);delay(50);
clearBUFFD();
clearagsmSerial();
cnt--;
}
}
/*
delete SMS at SMSindex location...
to make some space, delete from bigges to smalles(desired) SMSindex
you can try something like:
listSMS();//update noSMS(last used SMS location)
int cnt;
cnt = noSMS;
//while (cnt > 0){//to delete all
while (cnt > DesiredIndex){//to delete until DesiredIndex
deleteSMS(cnt--);
}
*/
void deleteSMS(int SMSindex){
if(ready4SMS != 1)
setupMODEMforSMSusage();
char tmpChar[20];//40
memset(tmpChar,0x00, sizeof(tmpChar));
clearBUFFD();
sprintf(tmpChar,"+CMGD=%i\r",SMSindex);//format the delete command
sendATcommand(tmpChar,"OK","ERROR",3);//send command to modem
}
/*
read SMS storage capacity,
total SMS locations(capacity) ==> noSMS(global var),
last used SMS location ==> noSMS(global var)
*/
void listSMS(){
if(ready4SMS != 1)
setupMODEMforSMSusage();
int res=0;
int j=0;
char * pch;
while(res!=1)
res = fATcmd(F("+CPMS?"),10, "OK","+CMS ERROR:");//+CPMS: "SM",8,50,"SM",8,50,"SM",8,50// +CMS ERROR:
j=0;
pch = strtok (buffd,",");
while (pch != NULL){//parsing for SMS SIMM entries
if(j==1){// used SMS
noSMS=atoi(pch);
}else if(j==2){//total SMS
totSMS=atoi(pch);
}
pch = strtok (NULL, ",");
j++;
}
}podprogram
Code: Select all
/*
agsm_SMS_lbr.h v 0.9711/20160707 - a-gsm 2.064 LIBRARY SUPPORT
COPYRIGHT (c) 2016 Dragos Iosub / R&D Software Solutions srl
You are legaly entitled to use this SOFTWARE ONLY IN CONJUNCTION WITH a-gsm DEVICES USAGE. Modifications, derivates and redistribution
of this software must include unmodified this COPYRIGHT NOTICE. You can redistribute this SOFTWARE and/or modify it under the terms
of this COPYRIGHT NOTICE. Any other usage may be permited only after written notice of Dragos Iosub / R&D Software Solutions srl.
This SOFTWARE is distributed is provide "AS IS" in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Dragos Iosub, Bucharest 2016.
http://itbrainpower.net
***************************************************************************************
SOFTWARE:
This file MUST be present, toghether with other files, inside a folder named
like your main sketch!
***************************************************************************************
HARDWARE:
Read the readme file(s) inside the arhive/folder.
***************************************************************************************
HEALTH AND SAFETY WARNING!!!!!!!!!!!!!!!!!!!!
High power audio (around 700mW RMS)! You can damage your years!
Use it with care when headset is connected. USE IT AT YOUR OWN RISK!
We recomend to set the volume at maximum level 20!
***************************************************************************************
*/
int noSMS=0, totSMS=0;
#define agsm_SMS
#if !defined (agsm_BASIC)
#include "agsm_basic_lbr.h"
#endif
int ready4SMS = 0, ready4Voice = 0;
int sendSMS(char* phno, char* message, char* phtype = "129");
void readSMS(int SMSindex);
void readAllSMS(void);
void deleteSMS(int SMSindex);
void listSMS(void);
-
Espablo
- Posts: 1754
- Joined: Wed Jun 29, 2016 5:04 pm
- Location: Oświęcim
Spróbuj zamienić miejscami i dać
Masz tam 2 wywołania sendSMS. Sprawdź na razie z jedynym potem dodaj następne.
Dodaj sobie jeszcze blokadę żeby nie wysyłał SMS za każdym razem jak wejdzie w loopie w tą funkcję
Code: Select all
sendSMS(numer, wiadomosc);
digitalWrite(PIN_ALARM, ALARM_ON);
Dodaj sobie jeszcze blokadę żeby nie wysyłał SMS za każdym razem jak wejdzie w loopie w tą funkcję
Każde urządzenie elektryczne działa o wiele lepiej jeśli podłączysz je do prądu.

-
alankedzior
- Posts: 114
- Joined: Mon Jun 18, 2018 5:38 pm
Miejscami już zmieniałem wcześniej i nic, probowalem też tylko w jedej funkcji używać i też nic. Co masz na myśli blokować ten warunek w loopie? Dodać if czy co?
