18-03-2020, 15:59
Dzięki Panowie trochę z każdego kodu wykorzystałem i powstało coś takiego
Coraz bliżej celu
I coraz więcej się ucze
Coraz bliżej celu
I coraz więcej się ucze
Kod:
#define LED_R 4
#define LED_G 5
#define czujnik 12
#include <AltSoftSerial.h>
AltSoftSerial altSerial;
String textMessage; //Zmienna do przechowywania wiadomosci tekstowej
volatile byte stanAlarmu = 0;
bool czySMS = false;
String numer = "xxxxxxxxx";
String message = "";
void setup()
{
Serial.begin(9600);
Serial.println("---------- START SYSTEMU -----------");
altSerial.begin(9600);
altSerial.print(F("AT+CMGF=1\r")); // ustawienie gsm na text mode
delay(100);
altSerial.print(F("AT+CNMI=2,2,0,0,0\r"));
delay(100);
pinMode(LED_R, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(czujnik, INPUT);
digitalWrite(LED_R,LOW);
digitalWrite(LED_G,LOW);
}
void loop()
{
unsigned long ms = millis();
char c;
while (Serial.available()) {
c = Serial.read();
altSerial.write(c);
}
altSerial.flushOutput();
while (altSerial.available()) {
c = altSerial.read();
textMessage = altSerial.readString();
textMessage.toUpperCase();
Serial.print(c);
Serial.print(textMessage);
}
if(textMessage.indexOf(F("ALARM_ON"))>=0){
Serial.println(F("Alarm ON"));
textMessage = "";
stanAlarmu = 1;
}
if(textMessage.indexOf(F("ALARM_OFF"))>=0){
Serial.println(F("Alarm OFF"));
textMessage = "";
stanAlarmu = 0;
}
if(textMessage.indexOf(F("STAN"))>=0){
Serial.println(F("Sprawdzanie stanu alarmu"));
switch (stanAlarmu) {
case 0:
message = "Alarm jest OFF";
break;
case 1:
message = "Alarm jest ON";
break;
}
sendSMS(numer,message);
textMessage = "";
}
switch (stanAlarmu) {
case 0: //czuwanie wylaczone
Serial.println("Alarm wylaczony - brak czuwania");
digitalWrite(LED_G,LOW);
digitalWrite(LED_R,LOW);
czySMS = false;
break;
case 1: //czuwanie wlaczone
Serial.println("Alarm wlaczony - czuwanie");
digitalWrite(LED_G,HIGH);
digitalWrite(LED_R,LOW);
czySMS = false;
if (digitalRead(czujnik) == HIGH) {
stanAlarmu = 2;
}
break;
case 2: // ALARM
Serial.println("ALARM !!!");
digitalWrite(LED_G,LOW);
digitalWrite(LED_R,HIGH);
if (czySMS == false){
sendSMS(numer,"ALARM!!!");
czySMS = true;
}
break;
}
}
void sendSMS(String phone, String message)
{
altSerial.print("AT+CMGF=1\r\n"); // komenda AT do wysyłania SMS
delay(1000);
altSerial.println("AT+CMGS=\"+48" + phone + "\"\r\n"); // numer telefonu w formacie +48xxxxxxxxx
delay(1000);
altSerial.println(message); // wiadomość
delay(1000);
altSerial.println((char)26); // komenda AT z końcem linii a ^Z, ASCII code 26
delay(1000);
altSerial.println();
delay(100);
}