Здравствуйте. Помогите разобраться.
- Войдите на сайт для отправки комментариев
Пнд, 04/04/2022 - 19:25
Здравствуйте. Помогите разобраться. Был скетч, написанный несколько лет назад -gsm реле с функцией сигнализации и звонком на номер при срабатывании датчика движения. Недавно решил добавить функцию контроля напряжения: при включении, выключении посылает смс On, Off. И реле одно выключает. Вроде все работает. Но происходят периодические срабатывания сигнализации. Заливаю старый скетч. Все работает нормально. Может есть у кого-нибудь какие-нибудь идеи? Буду благодарен за любую помощь.
#include <SoftwareSerial.h> SoftwareSerial gprsSerial(8, 7); // установка контактов 2 и 3 для программного порта (для микроконтроллера ардуино убать букву D) bool rele = HIGH, rele2 = HIGH, rele3 = HIGH, rele4 = HIGH, rele5 = HIGH; #define RELE 9 // (для микроконтроллера ардуино убать букву D) #define RELE2 5 // (для микроконтроллера ардуино убать букву D) #define RELE3 6 // (для микроконтроллера ардуино убать букву D) #define RELE4 3 // (для микроконтроллера ардуино убать букву D) #define RELE5 10 // #define SENSOR 2 // #define SENSOR2 11 // int call = 0; char* adminNumber[] = {"+7918xxxxxxxx", "+7xxxxxxx", "+7xxxxxxxxx" ,"+7"}; int8_t i; String currStr = ""; // если эта строка сообщение, boolean isStringMessage = false; // то ставим флаг на разрешение оброботки SMS bool signale = false; bool signale2 = false; unsigned long t = 0; void setup() { //Serial.begin(9600); gprsSerial.begin(9600); pinMode(RELE, OUTPUT); digitalWrite(RELE, HIGH); pinMode(RELE2, OUTPUT); digitalWrite(RELE2, HIGH); pinMode(RELE3, OUTPUT); digitalWrite(RELE3, HIGH); pinMode(RELE4, OUTPUT); digitalWrite(RELE4, HIGH); pinMode(RELE5, OUTPUT); digitalWrite(RELE5, HIGH); pinMode(SENSOR, INPUT); digitalWrite(SENSOR, HIGH); pinMode(SENSOR2, INPUT); //digitalWrite(SENSOR2, HIGH); // настройка приема сообщений gprsSerial.print("AT+CMGF=1\r"); delay(500); // устанавливаем текстовый режим смс-сообщения gprsSerial.print("AT+IFC=1, 1\r"); delay(500); // устанавливаем программный контроль потоком передачи данных gprsSerial.print("AT+CPBS=\"SM\"\r"); delay(500); // открываем доступ к данным телефонной книги SIM-карты gprsSerial.print("AT+CNMI=1,2,2,1,0\r"); delay(700); // включает оповещение о новых сообщениях, новые сообщения приходят в следующем формате: +CMT: "<номер телефона>", "", "<дата, время>", } void loop() { //Serial.println(signale2); //Serial.println(SENSOR2); //delay(100); while (!gprsSerial.available()) { if (digitalRead(SENSOR) == LOW && signale == false) { signale = true; digitalWrite(RELE5, LOW); gprsSerial.println("ATD+7xxxxxxxx;"); // Здесь должен позвонить.!!!!!!!!!!!!!!!!! t = millis(); // Serial.println(" on"); //Serial.println(signale2); delay(1000); } if(signale == true && millis() - t > 180000) digitalWrite(RELE5, HIGH); if(signale == true && digitalRead(RELE5) == HIGH) signale = false; if (digitalRead(SENSOR2) == HIGH && signale2 == false) { signale2 = true; // digitalWrite(RELE5, LOW); gprsSerial.print("AT+CMGS=\"+7xxxxxxxxxx\"\r"); // Отправка СМС на указанный номер +792100000000" delay(300); gprsSerial.print("220 ON"); // Тест сообщения delay(300); gprsSerial.print((char)26);// (требуется в соответствии с таблицей данных) delay(300); gprsSerial.println(); // Serial.println("220 oN"); // Serial.println(signale2); delay(1000); } if (digitalRead(SENSOR2) == LOW && signale2 == true) { signale2 = false; digitalWrite(RELE2, HIGH); gprsSerial.print("AT+CMGS=\"+7xxxxxxxxx\"\r"); // Отправка СМС на указанный номер +792100000000" delay(300); gprsSerial.print("220 OFF"); // Тест сообщения delay(300); gprsSerial.print((char)26);// (требуется в соответствии с таблицей данных) delay(300); gprsSerial.println(); //Serial.println("220 oFF"); //Serial.println(signale2); // delay(1000); } } char currSymb = gprsSerial.read(); // записываем в переменую символы, которые получили от модуля. if ('\r' == currSymb) { // если получили символ перевода коректи в начало строки, это означает что передача сообщения от модуля завершена. if (isStringMessage) { // если текущая строка – сообщение, то… if (!currStr.compareTo("On2")) { // если текст сообщения совпадает с "on", то включаем низкоуровневое реле. rele = LOW; digitalWrite(RELE, rele); } if (!currStr.compareTo("Off2")) { // если текст сообщения совпадает с "off", то выключаем низкоуровневое реле. rele = HIGH; digitalWrite(RELE, rele); } //isStringMessage = false; } if (isStringMessage) { // если текущая строка – сообщение, то… if (!currStr.compareTo("On")) { // если текст сообщения совпадает с "on", то включаем низкоуровневое реле. rele2 = LOW; digitalWrite(RELE2, rele2); } if (!currStr.compareTo("Off")) { // если текст сообщения совпадает с "off", rele2 = HIGH; // то выключаем низкоуровневое реле. digitalWrite(RELE2, rele2); } if (!currStr.compareTo("On3")) { // если текст сообщения совпадает с "on", rele3 = LOW; // то включаем низкоуровневое реле. digitalWrite(RELE3, rele3); } if (!currStr.compareTo("Off3")) { // если текст сообщения совпадает с "off", rele3 = HIGH; // то выключаем низкоуровневое реле. digitalWrite(RELE3, rele3); } //isStringMessage = false; if (isStringMessage) { // если текущая строка – сообщение, то… if (!currStr.compareTo("On4")) { // если текст сообщения совпадает с "on", rele4 = LOW; // то включаем низкоуровневое реле. digitalWrite(RELE4, rele4); } if (!currStr.compareTo("Off4")) { // если текст сообщения совпадает с "off", rele4 = HIGH; // то выключаем низкоуровневое реле. digitalWrite(RELE4, rele4); } isStringMessage = false; } } else { if (currStr.startsWith("+CMT")) { // если текущая строка начинается с "+CMT", то следующая сообщение for (i = 0; i <= 1; i++) { // число 3 - это количество заданных тел.номеров. if (currStr.indexOf(adminNumber[i])) //сверяем номер с номером прешедним SMS { // Serial.println(adminNumber[i]); isStringMessage = true; break; } } } } currStr = ""; } else if ('\n' != currSymb) { // игнорируем второй символ в последовательности переноса строки: \r\n , и currStr += String(currSymb); //дополняем текущую команду новым сиволом } }http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
c 16го года не осилили ???
Исправил.
Если всё так, как Вы написали, то проблема скорее всего наводная. Как Вы подаёте "220" на 11 пин? Нарисуйте схему всего устройства (с питанием и т.п.). Думаю, что там собака и зарыта.
Через контактор. Он замыкает и размыкает питание 6 в на пин 11. Пин подтянут резистором . Схему пока сложновато будет нарисовать.Еслиивикоде нет явных ошибок буду искать в схеме.
Закрыто.
Так а в чем было дело?
Оставьте информацию для тех у кого будет похожая ситуация.