Разработка системы умного дома (АРДУИНО)+ПК нужна помощь
- Войдите на сайт для отправки комментариев
Втр, 22/01/2019 - 12:17
Проблема следующего характера. С ПК через СомPort переменная стринг с адресом
String str = "0x28, 0xFF, 0xA4, 0xB4, 0xA2, 0x16, 0x5, 0x3B"; Пытаюсь передать адрес датчику, но он показывает
-127, Вот весь код
#include <OneWire.h>
#include <DallasTemperature.h>
OneWire oneWire(9); // вход датчиков 18b20
DallasTemperature ds(&oneWire);
DeviceAddress Temp_sensor_1 = {0x28, 0xFF, 0xA4, 0xB4, 0xA2, 0x16, 0x5, 0x3B};
void setup() {
Serial.begin(2000000); // инициализируем последовательную передачу данных:
ds.begin();// Для датчиков температур
}
void loop() {
String str = "0x28, 0xFF, 0xA4, 0xB4, 0xA2, 0x16, 0x5, 0x3B";
const char q[39];
str.toCharArray(q,39);
ds.requestTemperatures();
Serial.println(ds.getTempC(Temp_sensor_1),1);
delay(2000);
}
Уважаемый, во-первых, вставьте программу как положено (почитайте здесь на форуме). И во вторых - Serial.begin(2000000); Это что у Вас за com порт с такими характеристиками? Поставьте 9600 и проблемы, как мне кажется, исчезнут.
Процесс передачи данных, между ПК и Ардуино, в коде нет... Если я отправляю q напрямую в порт, то текст приходит вроде правельный
0x28, 0xFF, 0xA4, 0xB4, 0xA2, 0x16, 0x5, 0x3B.
Адрес изначально если его вбить в setup выглядит так
DeviceAddress Temp_sensor_1 = {0x28, 0xFF, 0xA4, 0xB4, 0xA2, 0x16, 0x5, 0x3B};
В ds.getTempC(Здесь вбивается адрес, и он я так понял должен быть Char переменной), Как его правельно переконвертировать из
строковой переменной в нужную Char
Процесс передачи данных, между ПК и Ардуино, в коде нет... Если я отправляю q напрямую в порт, то текст приходит вроде правельный
0x28, 0xFF, 0xA4, 0xB4, 0xA2, 0x16, 0x5, 0x3B.
Адрес изначально если его вбить в setup выглядит так
DeviceAddress Temp_sensor_1 = {0x28, 0xFF, 0xA4, 0xB4, 0xA2, 0x16, 0x5, 0x3B};
В ds.getTempC(Здесь вбивается адрес, и он я так понял должен быть Char переменной), Как его правельно переконвертировать из
строковой переменной в нужную Char
Вообще-то адрес датчика - это байтовый массив byte addrTempSensor[8]={0x28, 0xFF, 0xA4, 0xB4, 0xA2, 0x16, 0x5, 0x3B}; первый элемент (или указатель на него) передается в программу. Делать текстовую переменную не вижу смысла, если надо распечатать адрес - печатайте в цикле (почитайте как это делать).
Не могу найти не одного примера преобразования
String str =
"0x28, 0xFF, 0xA4, 0xB4, 0xA2, 0x16, 0x5, 0x3B"
; в
Byte массив, что бы передать его ds.getTempC(); , как char[], передавал, ардуина не ругается, но на выходе -127, что означает неправильный адрес. Суть в том, что я хочу в приложении задовать адреса датчиков, а не зашивать их в скетче ардуино, что бы, при выходе из строя какого либо, можно было перебить в настройках приложения адрес, и заменить сам датчик. Приложение у меня уже работает его писал в Visual studio.
String str =
"0x28, 0xFF, 0xA4, 0xB4, 0xA2, 0x16, 0x5, 0x3B"
; преобразовать в чар массив
char massive[]