Помогите с вводом переменной через Bluetooth

8898778
Offline
Зарегистрирован: 03.09.2014

Уважаемые форумчане, нужна ваша помощь!

Хочу задавать контролируемую температуру и влажность через андройд устройство(блютуз)...

Написал код в котором от переменной зависит включение нагрева и вентиляции. Соединение через блютуз сделал, а вот с назначением переменной проблемы...с блютуз терминала ввожу 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);
 
}

 

achest
achest аватар
Offline
Зарегистрирован: 01.10.2012

А что ты ожидаешь?

Андроид пихает в сериальный порт 25. Потом пихает туда 0, 0, 0 . Это нормально и правильно.

И твоя программа честно это читает. и присваевает 0 переменной.

Решение: переделать систему команд так, что бы андроид пихал в порт что-то в духе: settemp:25 .

Если пришла ЭТА команда, то загоняешь ее в переменную. Если пришла другая команда, то игнорируешь.

 

 

Radjah
Offline
Зарегистрирован: 06.08.2014

Полностью поддерживаю преыдущего оратора.

Сначала читаешь из порта идентификатор команды. Лучше сделать его не больше одного символа. Потом читаешь значение. Перед чтением значения хороши бы сделать проверку, что в буфере оно целиком лежит, если длиннее одного байта.

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Ввел значение - создал соединение - послал значение - прервал соединение

Это если предидущий вариант не устраивает.

Radjah
Offline
Зарегистрирован: 06.08.2014

Просто я уже сталкивался, когда в буфере был не весь пакет, вот и предупреждаю.

Пришлось городить ожидание и таймаут.