06-03-2016, 01:58
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ś:
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
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);
}