Ви не увійшли.
В принципе для этого можно и несколько кнопок добавить... Или вообще сделать второй экран для "передатчика".
Можно еще добавить отправку управляющих кодов из андроид в МК для исполнительных устройств. Будет как стартовая платформа для разработчиков умного дома.
Не судите строго (особенно за грамматические ошибки в программе) слепил это все сегодня за день. просто пришла в голову мыслЯ и я её реализовал...
Смысл идеи в том, что иногда возникает необходимость дистанционно контролировать несколько каналов информации, несколько датчиков. По моему наиболее часто встречаются различные погодные, огородные, инкубаторные и тому подобные конструкции. Поэтому я выбрал для реализации три вида датчиков температура, давление, влажность. Естественно в программе каждый может прописать свои функции для своих датчиков это не сложно. Эти виды датчиков я выбрал просто для удобства описания функционала. Собственно сама программа для МК выглядит так.
// ****************************************************
#include <SoftwareSerial.h>
SoftwareSerial btSerial(10, 11); // RX, TX
byte DatCn[6]={0, 0, 0, 0, 0, 0}; // массив типа датчиков для каждого канала, обнулён при старте
byte datTyp; // переменная выбранного датчика для отображения информации
String stringSENS = "";
String stringCHNL = "";
String string0 = ""; byte chen = 0;
String string1 = ""; byte sens_1 = 0;
String string2 = ""; byte sens_2 = 0;
String string3 = ""; byte sens_3 = 0;
String string4 = ""; byte sens_4 = 0;
String string5 = ""; byte sens_5 = 0;
String string6 = ""; byte sens_6 = 0;
// ****************************************************
// ****************************************************
void setup() {
Serial.begin(57600);
btSerial.begin(9600);
}
// ****************************************************
// ****************************************************
void loop() {
if ((sens_1 + sens_2 + sens_3 + sens_4 + sens_5 + sens_6) == 0) { clabel:
byte l_str = 0; stringSENS = "";
stringSENS = btSerial.readString();
// stringSENS = Serial.readString();
l_str = stringSENS.length();
if (l_str == 0) { goto clabel; }
Serial.println( stringSENS );
string1 = stringSENS.substring(2, 4); sens_1 = string1.toInt(); DatCn[0] = sens_1;
string2 = stringSENS.substring(5, 7); sens_2 = string2.toInt(); DatCn[1] = sens_2;
string3 = stringSENS.substring(8, 10); sens_3 = string3.toInt(); DatCn[2] = sens_3;
string4 = stringSENS.substring(11, 13); sens_4 = string4.toInt(); DatCn[3] = sens_4;
string5 = stringSENS.substring(14, 16); sens_5 = string5.toInt(); DatCn[4] = sens_5;
string6 = stringSENS.substring(17, 19); sens_6 = string6.toInt(); DatCn[5] = sens_6;
}
if ((sens_1 + sens_2 + sens_3 + sens_4 + sens_5 + sens_6) != 0) { slabel:
byte l_str = 0; stringCHNL = "";
stringCHNL = btSerial.readString();
// stringCHNL = Serial.readString();
l_str = stringCHNL.length();
if (l_str == 0) { goto slabel; }
string0 = stringCHNL.substring(2, 3);
chen = string0.toInt();
datTyp = DatCn[chen-1];
if(chen < 7 && datTyp == 1) tempr();
if(chen < 7 && datTyp == 2) press();
if(chen < 7 && datTyp == 3) humid();
if(chen < 7 && datTyp == 0) nodat();
if(chen < 7 && datTyp > 3) nochn(); }
}
// ****************************************************
// ****************************************************
void nochn() { // сообщение в случае не корректного номера канала
btSerial.print("channel "); btSerial.print(chen); btSerial.println(" this channel is not available");
delay(1000);
//Serial.print("channel "); Serial.print(chen); Serial.println(" this channel is not available");
}
// ****************************************************
void nodat() { // сообщение в случае отсутствия датчика в канале
btSerial.print("sensor in channel "); btSerial.print(chen); btSerial.println(" is not installed ");
delay(1000);
//Serial.print("sensor in channel "); Serial.print(chen); Serial.println(" is not installed ");
}
// ****************************************************
void tempr() { // сообщение для датчика температуры
double Dtemp = ((analogRead(chen-1)/204.9)*36.09)/9.79; // формула расчёта для датчика температуры (сейчас вольтметр)
btSerial.print("temperature sensor in channel "); btSerial.print(chen); btSerial.print(" information "); btSerial.print(Dtemp, 2); btSerial.println(" grC");
delay(1000);
//Serial.print("temperature sensor in channel "); Serial.print(chen); Serial.print(" information "); Serial.print(Dtemp, 2); Serial.println(" grC");
}
// ****************************************************
void press() { // сообщение для датчика давления
double Dpres = analogRead(chen-1)/4.25; // формула расчёта для датчика давления
btSerial.print("pressure sensor in channel "); btSerial.print(chen); btSerial.print(" information "); btSerial.print(Dpres, 2); btSerial.println(" mm Hg");
delay(1000);
//Serial.print("pressure sensor in channel "); Serial.print(chen); Serial.print(" information "); Serial.print(Dpres, 2); Serial.println(" mm Hg");
}
// ****************************************************
void humid() { // сообщение для датчика влажности
double Dhumd = analogRead(chen-1)/211.85; // формула расчёта для датчика влажности
btSerial.print("humidity sensor in channel "); btSerial.print(chen); btSerial.print(" information "); btSerial.print(Dhumd, 2); btSerial.println(" RH");
delay(1000);
//Serial.print("humidity sensor in channel "); Serial.print(chen); Serial.print(" information "); Serial.print(Dhumd, 2); Serial.println(" RH");
}
// ****************************************************
// ****************************************************
Останавливаться на ней я не буду так как там все без заморочек и разбито по блокам.
В конце поста будет ссылка на программы и там вариант будет с комментариями.
Контроль работы датчиков выполняет андроид программа на смартфоне. В этой программе можно сконфигурировать шесть каналов присвоив каждому свой тип датчика. Выглядит это так
Это стартовое окно при запуске программы. Здесь уже произошло соединение с блютуз модулем автоматически. а в самый первый раз при запуске нужно будет "тапнуть" верхнее окошко и выбрать модуль с которым будете работать.
Теперь присваиваем каждому каналу свой тип датчика. Для этого "тапаем" на строку и появляется клавиатура, с её помощью создаем необходимую конфигурацию и "тапаем" на строку ниже для отправки данных в МК.
Вот теперь система сконфигурирована. Я намерено оставил некоторые каналы не определенными и один канал назначил ошибочным кодом.
Теперь "тапая" на экранные обозначения номера канала мы получаем соответствующие данные.
В данном варианте датчиков я не подключал, просто получал наводки на аналоговых входах, поэтому на значения не обращайте внимания.
Вот собственно и все, осталась ссылка на программы для МК и для смартфона.