Topic: Не стабильная работа
здравствуйте помогите разобраться с проблемой!
компоненты:arduino nano, bt- HC-06, термодатчики ds18b20 -2 шт. и DHT-11, и блок реле на 8 реле кажется...
питание от usb ноутбука, или от двух амперной зарядки от телефона 5В
вот такой простой, тестовый скетч работает отлично:
// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__SOFTSERIAL
#include <SoftwareSerial.h>
#include <RemoteXY.h>
#include "OneWire.h"
#include "DallasTemperature.h"
#define ONE_WIRE_BUS 6
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress sensor1 = { 0x28, 0xAA, 0xA4, 0x8D, 0x53, 0x14, 0x1, 0xF3 };
// настройки соединения
#define REMOTEXY_SERIAL_RX 2
#define REMOTEXY_SERIAL_TX 3
#define REMOTEXY_SERIAL_SPEED 9600
// конфигурация интерфейса
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
{ 255,11,0,12,0,28,0,10,13,1,
67,4,6,7,37,13,2,26,11,7,
36,6,38,37,13,2,26,2,11,65,
10,6,59,9,9 };
// структура определяет все переменные и события вашего интерфейса управления
struct {
// input variables
char edit_1[11]; // =строка UTF8 оканчивающаяся нулем
// output variables
char temp1[11]; // =строка UTF8 оканчивающаяся нулем
uint8_t led_1_g; // =0..255 яркость зеленого цвета индикатора
// other variable
uint8_t connect_flag; // =1 if wire connected, else =0
} RemoteXY;
#pragma pack(pop)
/////////////////////////////////////////////
// END RemoteXY include //
/////////////////////////////////////////////
void setup()
{
RemoteXY_Init ();
sensors.begin();
Serial.begin(9600);
pinMode(8, OUTPUT);
}
void loop()
{
RemoteXY_Handler ();
sensors.requestTemperatures();
dtostrf(sensors.getTempC(sensor1), 0, 1, RemoteXY.temp1);
int value = atoi (RemoteXY.edit_1);
int temp = atoi (RemoteXY.temp1);
Serial.println(value);
Serial.println(temp);
if (value == 0)
{
RemoteXY.led_1_g = 0;
digitalWrite(8, LOW);
} else if (value> temp) {
RemoteXY.led_1_g = 0;
digitalWrite(8, LOW);
}
else
{
RemoteXY.led_1_g = 225;
digitalWrite(8, HIGH);
}
}
но в конечном варианте все это работать не хочет. перестает отображаться температура, переключатели срабатывают 1 раз из 5, и не работает поле ввода...
вот окончательный вариант, который отказывается работать
// определение режима соединения и подключение библиотеки RemoteXY
#define REMOTEXY_MODE__SOFTSERIAL
#include <SoftwareSerial.h>
#include <RemoteXY.h>
#include "DHT.h"
#define DHTPIN 5 // номер пина, к которому подсоединен датчик
DHT dht(DHTPIN, DHT11);
#include "OneWire.h"
#include "DallasTemperature.h"
#define ONE_WIRE_BUS 7
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress sensor1 = { 0x28, 0xFF, 0x7C, 0x5B, 0xB2, 0x17, 0x1, 0x67 };
DeviceAddress sensor2 = { 0x28, 0xAA, 0x7F, 0xA0, 0x53, 0x14, 0x1, 0x30 };
// настройки соединения
#define REMOTEXY_SERIAL_RX 2
#define REMOTEXY_SERIAL_TX 3
#define REMOTEXY_SERIAL_SPEED 9600
// конфигурация интерфейса
#pragma pack(push, 1)
uint8_t RemoteXY_CONF[] =
{ 255,5,0,44,0,170,1,10,207,1,
130,1,2,61,59,37,179,130,1,2,
27,59,32,179,130,1,2,2,59,23,
137,67,5,4,13,22,8,2,26,11,
67,5,4,33,22,8,2,26,11,129,
0,23,3,16,4,25,208,186,208,190,
208,188,208,189,208,176,209,130,208,176,
0,129,0,10,29,38,4,25,208,145,
208,190,208,187,209,140,209,136,208,190,
208,185,32,208,176,208,186,208,178,208,
176,209,128,208,184,209,131,208,188,0,
67,5,32,13,22,8,2,26,11,129,
0,4,7,50,4,25,209,130,208,181,
208,188,208,191,208,181,209,128,208,176,
209,130,209,131,209,128,208,176,32,32,
32,208,178,208,187,208,176,208,182,208,
189,208,190,209,129,209,130,209,140,0,
67,5,4,67,22,8,2,26,11,129,
0,10,63,38,4,25,208,156,208,176,
208,187,208,181,208,189,209,140,208,186,
208,184,208,185,32,208,176,208,186,208,
178,208,176,209,128,208,184,209,131,208,
188,0,2,0,4,51,18,6,2,26,
31,31,79,78,0,79,70,70,0,129,
0,7,45,9,4,25,208,161,208,178,
208,181,209,130,0,2,0,4,80,18,
6,2,26,31,31,79,78,0,79,70,
70,0,2,0,4,90,18,6,2,26,
31,31,79,78,0,79,70,70,0,129,
0,4,76,22,4,25,209,129,208,178,
208,181,209,130,32,208,177,208,181,208,
187,209,139,208,185,0,129,0,4,86,
22,4,25,209,129,208,178,208,181,209,
130,32,209,129,208,184,208,189,208,184,
208,185,0,2,0,37,51,18,6,2,
26,31,31,79,78,0,79,70,70,0,
129,0,35,46,23,4,25,208,146,208,
181,208,189,209,130,208,184,208,187,209,
143,209,130,208,190,209,128,0,2,0,
38,90,18,6,2,26,31,31,79,78,
0,79,70,70,0,129,0,35,85,23,
4,25,208,146,208,181,208,189,209,130,
208,184,208,187,209,143,209,130,208,190,
209,128,0 };
// структура определяет все переменные и события вашего интерфейса управления
struct {
// input variables
uint8_t light1; // =1 если переключатель включен и =0 если отключен
uint8_t light2; // =1 если переключатель включен и =0 если отключен
uint8_t light3; // =1 если переключатель включен и =0 если отключен
char edit_1[11];
char edit_2[11];
// output variables
char outtemp[11]; // =строка UTF8 оканчивающаяся нулем
char intemp1[11]; // =строка UTF8 оканчивающаяся нулем
char hum[11]; // =строка UTF8 оканчивающаяся нулем
char intemp2[11]; // =строка UTF8 оканчивающаяся нулем
// other variable
uint8_t connect_flag; // =1 if wire connected, else =0
} RemoteXY;
#pragma pack(pop)
/////////////////////////////////////////////
// END RemoteXY include //
/////////////////////////////////////////////
#define PIN_LIGHT1 A0
#define PIN_LIGHT2 A1
#define PIN_LIGHT3 A2
void setup()
{
RemoteXY_Init ();
pinMode (PIN_LIGHT1, OUTPUT);
pinMode (PIN_LIGHT2, OUTPUT);
pinMode (PIN_LIGHT3, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
// TODO you setup code
dht.begin();
sensors.begin();
Serial.begin(9600);
}
void loop()
{
RemoteXY_Handler ();
digitalWrite(PIN_LIGHT1, (RemoteXY.light1==0)?LOW:HIGH);
digitalWrite(PIN_LIGHT2, (RemoteXY.light2==0)?LOW:HIGH);
digitalWrite(PIN_LIGHT3, (RemoteXY.light3==0)?LOW:HIGH);
// TODO you loop code
// используйте структуру RemoteXY для передачи данных
// не используйте функцию delay()
float hum = dht.readHumidity();
dtostrf(hum, 0, 1, RemoteXY.hum);
float t = dht.readTemperature();
dtostrf(t, 0, 1, RemoteXY.outtemp);
sensors.requestTemperatures();
dtostrf(sensors.getTempC(sensor1), 0, 1, RemoteXY.intemp1);
dtostrf(sensors.getTempC(sensor2), 0, 1, RemoteXY.intemp2);
int value1 = atoi (RemoteXY.edit_1);
int temp1 = atoi (RemoteXY.intemp1);
if (value1 == 0)
{
digitalWrite(11, LOW);
} else if (value1 > temp1)
{
digitalWrite(11, LOW);
}
else
{
digitalWrite(11, HIGH);
}
int value2 = atoi (RemoteXY.edit_2);
int temp2 = atoi (RemoteXY.intemp2);
if (value2 == 0)
{
digitalWrite(12, LOW);
} else if (value2> temp2)
{
digitalWrite(12, LOW);
}
else
{
digitalWrite(12, HIGH);
}
}
помогите с решением, заранее спасибо