Разработка системы умного дома (АРДУИНО)+ПК нужна помощь

wagin221
Offline
Зарегистрирован: 27.09.2017

Проблема следующего характера. С ПК через Сом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);
}
mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Уважаемый, во-первых, вставьте программу как положено (почитайте здесь на форуме). И во вторых - Serial.begin(2000000); Это что у Вас за com порт с такими характеристиками? Поставьте 9600 и проблемы, как мне кажется, исчезнут.

wagin221
Offline
Зарегистрирован: 27.09.2017

Процесс передачи данных, между ПК и Ардуино, в коде нет... Если я отправляю 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

wagin221
Offline
Зарегистрирован: 27.09.2017
#include <OneWire.h>
#include <DallasTemperature.h>
 
OneWire oneWire(9); // вход датчиков 18b20
DallasTemperature ds(&oneWire);
 void setup() {
   Serial.begin(9600);  // инициализируем последовательную передачу данных:
   ds.begin();// Для датчиков температур
}
 
void loop() {
     
          String str = "0x28, 0xFF, 0xA4, 0xB4, 0xA2, 0x16, 0x5, 0x3B"; // Содержит адрес датчика температуры Dallas
          const char q[46];      
           str.toCharArray(q,46);       
          ds.requestTemperatures();
          Serial.println(ds.getTempC(q),1); 
      
delay(2000);
}

 

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

wagin221 пишет:

Процесс передачи данных, между ПК и Ардуино, в коде нет... Если я отправляю 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}; первый элемент (или указатель на него) передается в программу. Делать текстовую переменную не вижу смысла, если надо распечатать адрес - печатайте в цикле (почитайте как это делать).

wagin221
Offline
Зарегистрирован: 27.09.2017

Не могу найти не одного примера преобразования 

String str = "0x28, 0xFF, 0xA4, 0xB4, 0xA2, 0x16, 0x5, 0x3B"; в

Byte массив, что бы передать его ds.getTempC(); , как char[], передавал, ардуина не ругается, но на выходе -127, что означает неправильный адрес. Суть в том, что я хочу в приложении задовать адреса датчиков, а не зашивать их в скетче ардуино, что бы, при выходе из строя какого либо, можно было перебить в настройках приложения адрес, и заменить сам датчик. Приложение у меня уже работает его писал в Visual studio.

wagin221
Offline
Зарегистрирован: 27.09.2017
        Пока добился следующего, 
 
         char massive[] = {0x28, 0xFF, 0xA4, 0xB4, 0xA2, 0x16, 0x5, 0x3B};
         DeviceAddress Temp_sensor_1 = {(char)massive[0], (char)massive[1], (char)massive[2], (char)massive[3],
                                                          (char)massive[4], (char)massive[5], (char)massive[6], (char)massive[7]};
         Serial.println(ds.getTempC(Temp_sensor_1),1);
 
осталось  String str = "0x28, 0xFF, 0xA4, 0xB4, 0xA2, 0x16, 0x5, 0x3B";  преобразовать в чар массив  char massive[]