/
TinyGSM.cpp
95 lines (80 loc) · 2.16 KB
/
TinyGSM.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include "TinyGSM.h"
const unsigned short TINYGSM_BAUD_RATE = 19200;
const unsigned short CONNECTION_TIMEOUT = 20000;
TinyGSM::TinyGSM(){}
boolean TinyGSM::begin(SoftwareSerial *serial){
_serial = serial;
_serial->begin(TINYGSM_BAUD_RATE);
unsigned long startTime = millis();
while (!isConnected() && !timeOut(startTime, CONNECTION_TIMEOUT)); //wait until it's connected or the connection attempts get timed out
if (timeOut(startTime, CONNECTION_TIMEOUT)) return false; //if the connection has been timed out
disableEcho();
delay(100);
enableSMSNotification();
delay(100);
flush();
return true; //has been succesfully connected
}
boolean TinyGSM::timeOut(unsigned long startTime, unsigned long timeout){
return (millis() > startTime + timeout) ? true:false; //if the current time is larger than the timeout moment return true, else false
}
boolean TinyGSM::isConnected(){
print("AT+CREG?\r");
delay(100);
while(_serial->available()){
String input = _serial->readStringUntil('\n');
input.trim();
if (input.equals("+CREG: 0,1") || input.equals("+CREG: 0,5")) return true;
}
return false;
}
void TinyGSM::flush(){
while (_serial->read() != -1);
}
void TinyGSM::disableEcho(){
print("ATE0\r");
}
void TinyGSM::print(String input){
_serial->print(input);
}
void TinyGSM::print(char inChar){
_serial->print(inChar);
}
void TinyGSM::print(char *input){
_serial->print(input);
}
void TinyGSM::sendSMS(String recipient, String text){
print("AT+CMGF=1\r");
delay(100);
print("AT+CMGS=\"");
print(recipient);
print("\"");
print('\r');
delay(100);
print(text);
delay(100);
print((char)26); //ctrl+z
delay(100);
}
void TinyGSM::enableSMSNotification(){
print("AT+CNMI=1,2,0,0,0\r");
}
boolean TinyGSM::SMSreceived(){
if (_serial->available()){
_serial->setTimeout(200);
String input = _serial->readStringUntil('"');
input.trim();
if (input.startsWith("+CMT:")) return true;
}
return false;
}
String TinyGSM::getSMS(){
if (_serial->available()){
_serial->setTimeout(200);
String input = _serial->readStringUntil('\n'); //read first line
input += '\n';
input += _serial->readStringUntil('\n'); //read second line
return input;
}
return "error";
}