#include <SoftwareSerial.h>
// GMS //
SoftwareSerial serialGSM(19, 21); // RX, TX
String comandoGSM = "";
String ultimoGSM = "";
#define numeroCall "984154837"
bool callStatus = false;
void leGSM();
void enviaSMS(String telefone, String mensagem);
void configuraGSM();
// LED //
const byte leds[] = {27, 26, 25};
// Vibração //
const byte sensorVibracao = 13; // simula sensor analógico piezoelétrico
const byte valorThreshold = 14;
// Nºs cadastrados //
const unsigned long cadastrados[] = {993505469, 993505470, 993505471};
// Protótipos de função
void configuraGSM(), leGSM(), enviaSMS();
void setup()
{
Serial.begin(9600);
serialGSM.begin(9600);
configuraGSM();
pinMode(13, INPUT_PULLDOWN);
pinMode(14, INPUT_PULLDOWN);
for (byte pino_led : leds) pinMode(pino_led, OUTPUT);
}
void loop()
{
leGSM();
if (comandoGSM != "") {
Serial.println(comandoGSM);
ultimoGSM = comandoGSM;
comandoGSM = "";
}
unsigned int vibracao = analogRead(sensorVibracao), threshold = analogRead(valorThreshold);
for (byte pino_led : leds) digitalWrite(pino_led, LOW);
if (vibracao >= threshold)
{
digitalWrite(leds[0], HIGH);
for (unsigned int numero : cadastrados) enviaSMS(String(numero), "!!! LIMITE DE TOLERÂNCIA DE TERREMOTO ATINGIDO, PROCURE UM LUGAR SEGURO !!!");
}
else
{
digitalWrite(leds[1],HIGH);
}
Serial.println(vibracao);
}
void leGSM()
{
static String textoRec = "";
static unsigned long delay1 = 0;
static int count=0;
static unsigned char buffer[64];
if (serialGSM.available())
{
while(serialGSM.available())
{
buffer[count++] = serialGSM.read();
if (count == 64) break;
}
textoRec += (char*)buffer;
delay1 = millis();
for (int i=0; i < count; i++)
{
buffer[i]=NULL;
}
count = 0;
}
if ( ((millis() - delay1) > 100) && textoRec != "" )
{
comandoGSM = textoRec;
}
}
void enviaSMS(String telefone, String mensagem)
{
serialGSM.print("AT+CMGS=\"" + telefone + "\"\n");
serialGSM.print(mensagem + "\n");
serialGSM.print((char)26);
//# Sinalizar envio de dados
digitalWrite(leds[2], HIGH);
digitalWrite(leds[2], LOW);
}
void configuraGSM()
{
serialGSM.print("AT+CMGF=1\n;AT+CNMI=2,2,0,0,0\n;ATX4\n;AT+COLP=1\n");
}