Convert DS18B20 temperature to string
-
I want to convert DS18B20( [link removed by moderator]: )
temperature (4-bytes code from datasheet) to string with accuracy 0.1°C (like sprintf %.1f). AVR. C language (avr-gcc). I need for small code, so sprintf, floating-point types and round from math.h is bad idea. My following current code is bad also:void reverse_string(char *s)
{
char *p, c;for (p = s + strlen(s) - 1; s <= p; ++s, --p) { c = *p; *p = *s; *s = c; }}
void ts_to_string(uint16_t ts, char *s)
{
int8_t n = (int8_t)(ts >> 4);
uint8_t neg = n & 0x80;
char *p = s;
float f;if (neg) n = -n-1; do { *p++ = n % 10 + '0'; } while ((n /= 10) > 0); if (neg) *p++ = '-'; *p = '\0'; reverse_string(s); *p++ = '.'; f = (float)(ts & 0xf) / 16.0; if (neg) f = 1.0-f; *p++ = (char)round(f * 10.0) + '0'; *p = '\0';
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login