Добрый день! Собрал устройство "СМС розетка" из Iskra Neo, GPRS Shield и Troyka Shield. В данный момент подключено 1 реле в ПИН 5,на плате Troyka, т.к. я новичок с трудом настроил, но все работает. Подскажите пожалуйста как мне добавить ещё 2 реле, чтобы я мог каждым управлять в отдельности. // длина сообщения #define MESSAGE_LENGTH 160 // текст сообщения о включении розетки #define MESSAGE_ON "On" // текст сообщения о выключении розетки #define MESSAGE_OFF "Off" // текст сообщения о состоянии розетки #define MESSAGE_STATE "State" // пин, к которому подключено реле #define RELAY 5
// библиотека для работы с 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!"); } }
Ну и сюда - сделал на два реле - писать просто лень.. не проверял - нет шилда - на ошибки тоже - надо библиотеку искать
поправил и на три реле... код в том же стиле(copy&paste), хотя если нормально написать - то через switch можно написать дох...на команд типа (on 1-30 //включить реле 1 на 30 минут ) и т.п. Прикрепил что есть, мысль к размышлению дал. кому пригодилось ставьте +