• 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
Arduino + GSM powiadomienie o zdarzeniu
#1
Witam wszystkich

Chciałbym skonstruować moduł który powiadamia o różnych zdarzeniach składający się z mikrokontrolera Arduino Leonardo + GSM Simcom sim900A (moduł po wgranym nowym flashu, działa!)

Jak na razie skleiłem takie coś:

Kod:
#include <SoftwareSerial.h>
SoftwareSerial GSM(7, 8);
int sms = 0 ;
void setup()
{
 GSM.begin(9600);
 delay(1000);
 pinMode(2, INPUT_PULLUP);
 pinMode(3, INPUT_PULLUP);
 pinMode(4, INPUT_PULLUP);  
}
void loop()
{
 if ( digitalRead(2) == LOW ){sms = 1;sendSMS();} // LOW / HIGH -zmiana stanu wejścia
 if ( digitalRead(3) == LOW ){sms = 3;sendSMS();} // LOW / HIGH -zmiana stanu wejścia
 if ( digitalRead(4) == LOW ){sms = 5;sendSMS();} // LOW / HIGH -zmiana stanu wejścia
}
void sendSMS()
{
 GSM.print("AT+CMGF=1\r");  
 delay(500);
 GSM.println("AT + CMGS = \"+48XXXXXXXXX\""); // X = nr. telefonu
 delay(500);
if (sms == 1)GSM.println("XX1"); // XX1 = treść wiadomości dla PinMode 2
if (sms == 3)GSM.println("XX2"); // XX2 = treść wiadomości dla PinMode 3
if (sms == 5)GSM.println("XX3"); // XX3 = treść wiadomości dla PinMode 4
if (sms == 7)GSM.println("XX4"); // XX4 = treść wiadomości dla PinMode 5
 delay(500);
GSM.println((char)26);
 delay(500);
GSM.println();
 delay(1000);
}

Problem polega na tym że stan wejścia (wiadomość sms) jest transmitowany tylko po zamknięciu, brak informacji sms o otwarciu wejścia.

Znalazłem jeden dobrze działający przykład z tym że nie mam pojęcia jak sklonować pinMode i wysyłać różne wiadomości np. z kilku czujników temperatury
Kod:
#include <SoftwareSerial.h>

SoftwareSerial GPRS(7, 8);
boolean state, lastState;

void setup()
{
 pinMode(2, INPUT_PULLUP);
 state = digitalRead(2);
 lastState = state;
 
 GPRS.begin(9600);
 Serial.begin(9600);
 
 GPRS.println("AT+CMGF=1");
 
 delay(1000);
}

void loop()
{
 while(GPRS.available()) {
   Serial.write(GPRS.read());
 }

 lastState = state;
 state = digitalRead(2);
 
 if ( state != lastState ) {
   sendSMS();
 }
 
 delay(500);
}

void sendSMS() {
 Serial.print("Switch was turned ");
 Serial.println(state ? "on" : "off");
 
 GPRS.println("AT+CMGS=\"+64123456789\"");
 
 delay(500);
 
 GPRS.print("Switch was turned ");
 GPRS.println(state ? "on" : "off");
 GPRS.write( 0x1a ); // ctrl+Z character
 
 delay(500);
}
 
Odpowiedź
  


Wiadomości w tym wątku
Arduino + GSM powiadomienie o zdarzeniu - przez śruba - 06-03-2016, 01:58

Skocz do:


Przeglądający: 1 gości