float SHT15::get (unsigned short int mode) {
	unsigned short int error;

	unsigned short int hraw, traw;
	float h, hq, t, d, ld;

	if ((error = getraw (&traw, 0)) != 0) return (float) error;
	if ((error = getraw (&hraw, 1)) != 0) return (float) error;

	h = (float) hraw;

	t = -40.1 + 0.01 * ((float) traw);	// 14 bit, 'C
	if (mode == 0) return t;

	hq = -2.0468 + 0.0367 * h - 1.5955E-6 * h * h;
	h = (t - 25) * (0.01 + 0.00008 * h) + hq;
	h = h < 0.1 ? 0.1 : (h > 100 ? 100 : h);
	if (mode == 1) return h;

	ld = (log10(h) - 2) / 0.4343 + (17.62 * t) / (243.12 + t);
	d = 243.12 * ld / (17.62 - ld);
	return d;
	}
示例#2
0
文件: fn.c 项目: geky/v
static fn_t *fn_realize(struct fnparse *fnparse, eh_t *eh) {
    // this is a bit tricky since fn and p->fn share memory
    fn_t *fn = (fn_t *)fnparse;
    tbl_t *vars = fnparse->vars;
    tbl_t *fns = fnparse->fns;
    
    fn->vcount = vars->len;
    fn->fcount = fns->len;
    fn->stack = 25; // TODO make this reasonable

    fn->vars = mu_alloc(fn->vcount*sizeof(var_t) + 
                        fn->fcount*sizeof(fn_t *), eh);

    tbl_for_begin (k, v, vars) {
        fn->vars[getraw(v)] = k;
    } tbl_for_end;

    int i = 0;
    fn->fns = (fn_t**)&fn->vars[fn->vcount];

    tbl_for_begin (k, v, fns) {
        fn->fns[i++] = (fn_t*)getraw(v);
    } tbl_for_end;
示例#3
0
bool
get_temperature(const char *ds_name, double *temp)
{
	char	pathbuf[BUFSIZ];
	char *eptr, *chp;

	snprintf(pathbuf, sizeof pathbuf, "/sys/bus/w1/devices/%s/w1_slave", ds_name);
	if ((chp = getraw(pathbuf)) == NULL) {
		MQTT_log("Failed to read %s %s\n", pathbuf, strerror(errno));
		return (false);
	}
	

	*temp = (double) ((double)strtol(chp,  &eptr, 10)/1000.00);
	return (true);

}