Ультразвуковой измеритель уровня жидкости + SIM800L + СМС (требуется доработка)
- Войдите на сайт для отправки комментариев
Сб, 11/11/2017 - 20:39
Доброго времени суток. Друзья, кому интересно, помогите решить задачу: имеется ультразвуковой датчик HC-SR04, Arduino NANO, GSM модуль SIM800L. Необходимо по входящему звонку на GSM модуль заставить Arduino отбиться, произвести замер уровня воды в емкости и ответить по СМС на звонивший номер.
По коммутации модулей у меня вопросов нет. Сложность вызывает программная часть. Немного собрал из примеров сырой код, необходимо его проверить и скорректировать.
#include <SoftwareSerial.h> SoftwareSerial SIM800(2, 3); // RX, TX int ch = 0; String val = ""; //переменная для приема данных от GSM-модуля #define Trig 9 #define Echo 8 void setup() { pinMode(Trig, OUTPUT); //инициируем как выход pinMode(Echo, INPUT); //инициируем как вход Serial.begin(9600); //Скорость порта для связи Arduino с компьютером SIM800.begin(9600); //Скорость порта для связи Arduino с GSM модулем SIM800.println("AT"); } unsigned int impulseTime=0; unsigned int distance_cm=0; int incomingByte = 0; void sms(String text, String phone) { Serial.println("SMS send started"); SIM800.println("AT+CMGS=\"" + phone + "\""); delay(1000); SIM800.print(text); delay(300); SIM800.print((char)26); delay(300); Serial.println("SMS send finish"); delay(3000); } void loop() { if (SIM800.available()) // Ожидаем прихода данных (ответа) от модема... Serial.write(SIM800.read()); // ...и выводим их в Serial if (Serial.available()) // Ожидаем команды по Serial... SIM800.write(Serial.read()); // ...и отправляем полученную команду модему if (SIM800.available()){ //если GSM модуль что-то послал нам, while (SIM800.available()) //сохраняем входную строку в переменную val ch = SIM800.read(); val += char(ch); delay(10); } if (val.indexOf("RING") > -1) Serial.println("Level meter starting"); SIM800.println("ATH"); // Сбрасываем вызов и начинаем измерение уровня digitalWrite(Trig, HIGH); delayMicroseconds(10); // Отсылаем импульс на эхолот digitalWrite(Trig, LOW); impulseTime=pulseIn(Echo, HIGH); distance_cm=impulseTime/58; // Преобразовываем расстояние в сантиметры Serial.print ("yPOBEHb "); Serial.print (distance_cm); // Выводим расстояние в порт Serial.println("CM"); delay(200); sms(String("yPOBEHb Здесь должен быть уровень CM"),String("+791212345678")); val = ""; //обнуляем переменную val }
Буду благодарен всем отозвавшимся.
Чтобы без стеба - давайте сделаем так. Вы код соберете, скомпилируете и попробуйте. Если возникнут проблемы - тогда милости просим с конкретными вопросами.
Как вставить в текст сообщения переменную? sms(String(
"yPOBEHb <strong>Здесь должен быть уровень</strong> CM"
),String(
"+791212345678"
));