Помогите с вводом переменной через Bluetooth
- Войдите на сайт для отправки комментариев
Ср, 03/09/2014 - 23:51
Уважаемые форумчане, нужна ваша помощь!
Хочу задавать контролируемую температуру и влажность через андройд устройство(блютуз)...
Написал код в котором от переменной зависит включение нагрева и вентиляции. Соединение через блютуз сделал, а вот с назначением переменной проблемы...с блютуз терминала ввожу 25 через монитор порта смотрю значение, а там переменная меняется на 25 на 1 сек и снова 0...
1. Почему переменной возвращается значение нуля?
2. Как добавить 2-ую переменную для задания значения влажности?
3. Может для кого не составит труда написать програмку для андройд такого типа и скетч к ней на ардуино?
#include "DHT.h" #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); int Heating_Pin = 9; //пин 9 будет подключен к подогреву int Cooling_Pin = 10; //пин 10 будет подключен к охлаждению int Optimal_Temp_Pin = 11; //пин 11 включается при оптимальной температуре int at; int Hum; //к вопросу номер 2 void setup() { Serial.begin(9600); pinMode(Optimal_Temp_Pin, OUTPUT); pinMode(Heating_Pin, OUTPUT); pinMode(Cooling_Pin, OUTPUT); dht.begin(); } void loop() { float h = dht.readHumidity(); //переменная h это значение влажности с датчика float t = dht.readTemperature(); //переменная t это значение температуры с датчика if (Serial.available() > 0) { at = Serial.parseInt(); //задаем температуру с андройда ???? } if (t < at) { digitalWrite (Heating_Pin, HIGH); } else { digitalWrite (Heating_Pin, LOW); } if (t == at) { digitalWrite (Optimal_Temp_Pin, HIGH); } else { digitalWrite (Optimal_Temp_Pin, LOW); } if (t > at) { digitalWrite (Cooling_Pin, HIGH); } else { digitalWrite (Cooling_Pin, LOW); } Serial.println (at); delay(1000); }
А что ты ожидаешь?
Андроид пихает в сериальный порт 25. Потом пихает туда 0, 0, 0 . Это нормально и правильно.
И твоя программа честно это читает. и присваевает 0 переменной.
Решение: переделать систему команд так, что бы андроид пихал в порт что-то в духе: settemp:25 .
Если пришла ЭТА команда, то загоняешь ее в переменную. Если пришла другая команда, то игнорируешь.
Полностью поддерживаю преыдущего оратора.
Сначала читаешь из порта идентификатор команды. Лучше сделать его не больше одного символа. Потом читаешь значение. Перед чтением значения хороши бы сделать проверку, что в буфере оно целиком лежит, если длиннее одного байта.
Ввел значение - создал соединение - послал значение - прервал соединение
Это если предидущий вариант не устраивает.
Просто я уже сталкивался, когда в буфере был не весь пакет, вот и предупреждаю.
Пришлось городить ожидание и таймаут.