DS18B20 сохранение и получение адресов из текстового файла

Manetoo
Offline
Зарегистрирован: 19.11.2019

Приветствую, друзья.

У меня такой вопрос... Есть мега, есть десяток даласовских датчиков, есть модуль работы с MicroSD, есть несколько кнопок и сигнальных светодиодов. Адрес каждого датчика оператор может сохранить в одну из условных 10-и ячеек, т.е. раскидать датчики в определённые ячейки... ну, не суть...

Есть потребность хранить сопоставление адреса датчика с номером ячейки в конфигурационным текстовом файле на флэшке. Примерно в следующем виде:

... 
*T1=ддрес_первого_датчика
*T2=ддрес_второго_датчика
*T3=ддрес_третьего_датчика
...

Вопрос: как преобразовать байтовый массив (адрес) датчика в текстовое представление и потом обратно?

Заранее спасибо!

sadman41
Offline
Зарегистрирован: 19.10.2016

Тут была половина того же вопроса:  https://arduino.ru/forum/programmirovanie/hex-dec

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017
Manetoo
Offline
Зарегистрирован: 19.11.2019

Спасибо, по преобразованию массива байт в "хекс-строку" получилось так:

void bytsToHexStr(byte array[], unsigned int len, char buffer[])
{

for (unsigned int i = 0; i < len; i++)
{
	byte nib1 = (array[i] >> 4) & 0x0F;
	byte nib2 = (array[i] >> 0) & 0x0F;
	buffer[i*2+0] = nib1  < 0xA ? '0' + nib1  : 'A' + nib1  - 0xA;
	buffer[i*2+1] = nib2  < 0xA ? '0' + nib2  : 'A' + nib2  - 0xA;
}
buffer[len*2] = '\0';

}

Использование:

byte BTSarray[8] = { b1, b2, b3, b4, b5, b6, b7, b8 }; // тут наши байты
char BTSBuff[64] = "";
bytsToHexStr( BTSarray, 8, BTSBuff );
Serial.println( BTSBuff );

А вот обратно пока ничего работающего не нашел... в поисках...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

от эта сильно. 

 

07    byte nib2 = (array[i] >> 0) & 0x0F;

Manetoo
Offline
Зарегистрирован: 19.11.2019

DetSimen, я извиняюсь, я не сишник, с битовыми операциями не дружу (как и с указателями, ссылками и пр.) и это не моё творчество. Что в этой строке не так? С удовольствием исправлю.

Ещё я наковырял кусок кода для обратного преобразования строки в массив байт:

String str = "2800EE799709035F";
byte bytes[8];

void setup() {

  byte i;
  byte j;
  char temp[3];
  j = 0;

  for (byte i = 0; i < sizeof(bytes)*2; i += 2)
  {
    strncpy(temp, &str[i], 2);
   
    temp[0] = toupper(temp[0]);    // Convert to upper case
    temp[1] = toupper(temp[1]);
   
    bytes[j] = (temp[0] <= '9') ? (temp[0] - '0') : (temp[0] - 'A' + 10);
    bytes[j] *= 16;
    bytes[j] += (temp[1] <= '9') ? (temp[1] - '0') : (temp[1] - 'A' + 10);
    j++;
  }
}
void loop() {}

Прверяю тупо так:

  Serial.begin(9600);
  Serial.println(str);
  Serial.print( bytes[0], HEX); Serial.print(" ");
  Serial.print( bytes[1], HEX); Serial.print(" ");
  Serial.print( bytes[2], HEX); Serial.print(" ");
  Serial.print( bytes[3], HEX); Serial.print(" ");
  Serial.print( bytes[4], HEX); Serial.print(" ");
  Serial.print( bytes[5], HEX); Serial.print(" ");
  Serial.print( bytes[6], HEX); Serial.print(" ");
  Serial.print( bytes[7], HEX);

Я понимаю, что решение не идеальное, наверно, но оно работает. Но у меня не получается этот кусок кода обернуть в функцию. Постоянно компилятор лает на некорректные аргументы. Не поможете ли с этой бедой? Я буду очень признателен.

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

Еще один лентяй... Тут этих примеров  - как грязи на Российских дорогах. Ан нет - спрашивает, да не в песочнице даже...

Manetoo
Offline
Зарегистрирован: 19.11.2019

mykaida, вы больше времени потратили на написание этого сообщения, чем занял бы ответ знающего человека. Спасибо за потраченное на меня время.

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

Manetoo пишет:

mykaida, вы больше времени потратили на написание этого сообщения, чем занял бы ответ знающего человека. Спасибо за потраченное на меня время.

Я писатель - пишу быстро. Но за оценку спасибо ;)

sadman41
Offline
Зарегистрирован: 19.10.2016

Знающему человеку отвечать тут нет никакого интереса. Так, может выпимши кто забредёт и напишет вам две функции по 10 строк.

Ссылку подкинуть ещё одну могу, коли не нашли поиском, поле ввода которого расположено вверху страницы, по запросу "hex string to array" : http://arduino.ru/forum/programmirovanie/hex-string-byte-array

Manetoo
Offline
Зарегистрирован: 19.11.2019

sadman41, спасибо за ссылку я смотрел этот топик и к сожалению примеры из неё у меня выдавали не то, что я от них ожидал. В схожих топиках тоже смотрел (может чего и пропустил, конечно). Что рабочее нашел выложил чуть выше. И собственно, как я и писал у меня очень глупая проблема. Кусок кода, что в пятом посте в секции setup  не выходит завернуть в функцию. Компилятор орёт на передаваемые аргументы. Ясно дело, что у меня капитально не хватает  знаний по сям. Но прямо сейчас у меня нет, к сожалению, времени, чтоб в этом как следует разобраться. По этому и спрашиваю, может кто откликнется, ведь дело то плёвое - описать правильное объявление функции...

sadman41
Offline
Зарегистрирован: 19.10.2016

Времени ни у кого нынче нет, а хобби занимаются, когда есть время. Форум же этот хоббийный. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Manetoo пишет:

Но прямо сейчас у меня нет, к сожалению, времени, чтоб в этом как следует разобраться

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