СМС розетка
- Войдите на сайт для отправки комментариев
Ср, 14/09/2016 - 10:58
Добрый день!
Я совсем новичок, собрал устройство "СМС розетка" из Iskra Neo, GPRS Shield и Troyka Shield. В данный момент подключено 1 реле в ПИН 5,на плате Troyka, т.к. я новичок с трудом настроил, но все работает. Подскажите пожалуйста как мне добавить ещё 2 реле, чтобы я мог каждым управлять в отдельности.
// библиотека для работы с GPRS устройством
#include <GPRS_Shield_Arduino.h>
// библиотека для эмуляции Serial порта
// она нужна для работы библиотеки GPRS_Shield_Arduino
#include <SoftwareSerial.h>
// длина сообщения
#define MESSAGE_LENGTH 160
// текст сообщения о включении розетки
#define MESSAGE_ON "On"
// текст сообщения о выключении розетки
#define MESSAGE_OFF "Off"
// текст сообщения о состоянии розетки
#define MESSAGE_STATE "State"
// пин, к которому подключено реле
#define RELAY 5
// текст сообщения
char message[MESSAGE_LENGTH];
// номер, с которого пришло сообщение
char phone[16];
// дата отправки сообщения
char datetime[24];
bool stateRelay = false;
// создаём объект класса GPRS и передаём ему скорость 9600 бод;
// с помощью него будем давать команды GPRS шилду
GPRS gprs(9600);
void setup()
{
// настраиваем пин реле в режим выхода,
pinMode(RELAY, OUTPUT);
// подаём на пин реле «низкий уровень» (размыкаем реле)
digitalWrite(RELAY, LOW);
// включаем GPRS-шилд
gprs.powerUpDown();
// открываем последовательный порт для мониторинга действий в программе
Serial.begin(9600);
while (!Serial) {
// ждём, пока не откроется монитор последовательного порта
// для того, чтобы отследить все события в программе
}
// проверяем, есть ли связь с GPRS-устройством
while (!gprs.init()) {
// если связи нет, ждём 1 секунду
// и выводим сообщение об ошибке;
// процесс повторяется в цикле,
// пока не появится ответ от GPRS устройства
delay(1000);
Serial.print("Init error\r\n");
}
// вывод об удачной инициализации GPRS Shield
Serial.println("GPRS init success");
// digitalWrite(RELAY, HIGH);
}
void loop()
{
// если пришло новое сообщение
if (gprs.ifSMSNow()) {
// читаем его
// если есть хотя бы одно непрочитанное сообщение,
// читаем его
gprs.readSMS(message, phone, datetime);
// выводим номер, с которого пришло смс
Serial.print("From number: ");
Serial.println(phone);
// выводим дату, когда пришло смс
Serial.print("Datetime: ");
Serial.println(datetime);
// выводим текст сообщения
Serial.print("Recieved Message: ");
Serial.println(message);
// вызываем функцию изменения состояния реле
// в зависимости от текста сообщения
setRelay(phone, message);
}
}
void setRelay(char f_phone[], char f_message[])
{
if (strcmp(f_message, MESSAGE_ON) == 0) {
// если сообщение — с текстом «On»,
// выводим сообщение в Serial
// и подаём на замыкаем реле
Serial.println("OK! Power is On");
digitalWrite(RELAY, HIGH);
stateRelay = true;
// на номер, с которого пришёл запрос,
// отправляем смс с текстом о включении питания
gprs.sendSMS(f_phone, "Power is On");
} else if (strcmp(f_message, MESSAGE_OFF) == 0) {
// если пришло сообщение с текстом «Off»,
// выводим сообщение в Serial
// и размыкаем реле
Serial.println("OK! Power is Off");
digitalWrite(RELAY, LOW);
stateRelay = false;
// на номер, с которого пришёл запрос
// отправляем смс с текстом о выключении питания
gprs.sendSMS(f_phone, "Power is Off");
} else if (strcmp(f_message, MESSAGE_STATE) == 0) {
// если пришло сообщение с текстом «State»,
// отправляем сообщение с состоянием реле
if (stateRelay) {
Serial.println("State: Power is On");
gprs.sendSMS(f_phone, "Power is On");
} else {
Serial.println("State: Power is Off");
gprs.sendSMS(f_phone, "Power is Off");
}
} else {
// если сообщение содержит неизвестный текст,
// отправляем сообщение с текстом об ошибке
Serial.println("Error... unknown command!");
gprs.sendSMS(f_phone, "Error...unknown command!");
}
}