iButton
- Войдите на сайт для отправки комментариев
Ср, 26/05/2021 - 20:02
Доброго часа!
Знает ли кто, как привести к правильному формату вывод номера iButton?
Наверняка номера написанные на метках правильные, но как добиться его?
void loop() { long number ; if (ds1990.reset()) // Проверяем, есть ли на линии устройство iButton { ds1990.write(0x33); // отправляем команду "считать ROM" delay(1); // Задержка,для подготовки приёма данных for (int i = 0; i < 8; i++) // Цикл для считывания данных в массив { address[i] = ds1990.read(); // считываем } Serial.print("HEX card ="); for (int i = 0; i < 8; i++) // Цикл для вывода 8 байт в терминал { Serial.write(' '); // Выводим пробел для визуального удобства Serial.print(address[i], HEX); // Выводим данные из массива в формате HEX } for(uint8_t i = 0 ; i < 8 ;i++) { number <<= 8; number |= address[i]; } Serial.write(' '); Serial.print(number); Serial.write(' '); long &num = (long&)address; Serial.print(num); Serial.println(); delay(500); } }
Вывод для метки с номером 0015359120
HEX card = 1 90 5C EA 0 38 0 31 3670065 -363032575
Вывод для метки с номером 0012870584
HEX card = 1 B8 63 C4 0 39 0 6C 3735660 -1000097791
Задвоилась тема. удалите пожалуйста.
Задвоилась тема. удалите пожалуйста.
Обе?
Одну =)
Решено:
первый и последний байт откидываем. первый семейный код, последний crc.
Работающий код:
все равно неверно, после удаления первого и последнего байта остается последовательность шесть байт, вы ее запихиваете в переменную number, которая только 4 байта = получается ерунда
Чем вас не устраивает HEX формат: 1 90 5C EA 0 38 0 31
Видимо тем, что номер написанный на метке не соответствует этим данным.
Видимо тем, что номер написанный на метке не соответствует этим данным.
ужас :)))
Чего надо то? Получить номер напечатанный на метке? Легко.
Интересно конечно, сначала хотел написать, потом посмотрел вроде бы решение есть, а потом посмотрел решение и офигел, оно то работает, но зачем лишние движения в цикле (зачем зазря 2 раза пробегать) :
и переменную number надо иницилизировать, а не надеяться на компилятор
потом посмотрел решение и офигел, оно то работает, но зачем лишние движения в цикле (зачем зазря 2 раза пробегать) :
и переменную number надо иницилизировать, а не надеяться на компилятор
то есть то, что 4хбайтную переменную 6 раз сдвигают вверх - вас не смутило. вы заметили только дублирование циклов? :)
Это не решение, а сплошное недоразумение, и обсуждать такие мелочи как недоинициализированные переменные смысла нет...
то есть то, что 4хбайтную переменную 6 раз сдвигают вверх - вас не смутило. вы заметили только дублирование циклов? :)
Это не решение, а сплошное недоразумение, и обсуждать такие мелочи как не доинициализированные переменные смысла нет...
Какое еще дублирование, это лишние действия. Как бы про это и сказал, что в цикл 2 раза лишний раз заходим, 2 байта просто улетают в никуда в итоге (это очевидно думаю). Задача была какая - вычленить, то что написано на самой "таблетке", это решается, но цикл надо было сократить, так помоему: