Неправильное преобразование time_t в char
У меня есть простой пример кода, который я хочу преобразовать из массива time_t в символы, чтобы затем объединить его в другой массив. Код:
time_t unixt;
char exm [40];
unixt = RTC.get();
Serial.println(unixt);
dtostrf(unixt, 10, 0, exm);
Serial.println(exm);
Проблема, с которой я столкнулся, заключается в том, что консоль каждый раз печатает другое второе сообщение, вот так:
1548258220
1548258200
Я также пробовал использовать unsigned long, но тоже безрезультатно. Может ли кто-нибудь указать мне, что не так, или как это сделать по-другому?
@billyVal, 👍2
1 ответ
Лучший ответ:
Используйте ultoa()
вместо dtostrf()
. Первый предназначен для сериализации
длинные целые числа без знака, а последний — для чисел с плавающей запятой.
Используя dtostrf()
, вы неявно преобразуете unixt
в
число с плавающей запятой. Arduino Mega поддерживает только одинарную точность.
с плавающей запятой, поэтому это преобразование приводит к некоторой потере точности, следовательно
результат, который вы видите.
- Как разделить входящую строку?
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Arduino Due vs Mega 2560
- Как получить уникальный идентификатор для всех плат Arduino?
- Почему я получаю avrdude: stk500v2_ReceiveMessage(): timeout error when uploading to Arduino Mega?
- Тайм-аут связи Arduino Mega с ошибкой программатора
Большое спасибо! Это было именно то, что мне нужно., @billyVal