Ультразвуковой измеритель уровня жидкости + 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"));