/*
* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DS18B20_DEV "/sys/devices/w1_bus_master1/28-0004432e03ff/w1_slave"
int get_temp(float *value, const char *dev)
{
int ret;
FILE *fp;
char buf1[100], buf2[100];
fp = fopen(dev, "r");
if (fp == NULL) {
perror("fopen err\n");
return -1;
}
fgets(buf1, 100, fp);
sscanf(buf1, "%*[^:]: crc=%*[^ ]%s\n", buf2); //过滤:号前的,跳过:CRC=,过滤空格前的,最后取
if (strcmp(buf2, "YES") == 0) {
fgets(buf1, 100, fp);
sscanf(buf1, "%*[^t]t=%s\n", buf2);
*value = atoi(buf2) * 1.0 / 1000;
ret = 0;
} else {
fprintf(stderr, "CRC error\n");
ret = -1;
}
fclose(fp);
return ret;
}
int main(void)
{
float value;
if (get_temp(&value, DS18B20_DEV) == 0)
printf("%0.3f ℃\n", value);
return 0;
}