Example #1
0
int
TemperGetOtherStuff(Temper *t, char *buf, int length)
{
	TemperSendCommand(t, 10, 11, 12, 13, 0, 0, 2, 0);
	TemperSendCommand(t, 0x52, 0, 0, 0, 0, 0, 0, 0);
	TemperSendCommand(t, 10, 11, 12, 13, 0, 0, 1, 0);
	return TemperGetData(t, buf, length);
}
Example #2
0
int
TemperGetTempAndRelHum(Temper *t, double *tempC, double *relhum)
{
	char buf[256];
	int ret, temperature, rh, i;
	double temp_hum;

	TemperSendCommand(t, 10, 11, 12, 13, 0, 0, 2, 0);
	TemperSendCommand(t, 0x48, 0, 0, 0, 0, 0, 0, 0);
	for(i = 0; i < 7; i++) {
		TemperSendCommand(t, 0, 0, 0, 0, 0, 0, 0, 0);
	}
	TemperSendCommand(t, 10, 11, 12, 13, 0, 0, 1, 0);

	/* According to Sensirion datasheet for SHT1x the time for
	8/12/14 bit measurements is 20/80/320 ms. Trial and error
	suggests that sleeping less that 400ms can produce spurious
	measurements */
	usleep(400000); ret = TemperGetData(t, buf, 256); if(ret < 2)
	{ return -1; }

	if(t->debug) {
	  printf("TempAndRelHum (%d bytes):\n", ret);
	  for(i = 0; i < ret; i++) {
	    printf(" %02x", buf[i]);
	    if(i % 16 == 15) {
	      printf("\n");
	    }
	  }
	  printf("\n");
	}

	/* Numerical constants below come from the Sensirion SHT1x
	datasheet (Table 9 for temperature and Table 6 for humidity */
	temperature = (buf[1] & 0xFF) + (buf[0] << 8);	
	*tempC = -39.7 + .01*temperature;

	rh = (buf[3] & 0xFF) + ((buf[2] & 0xFF) << 8);
	temp_hum = -2.0468 + 0.0367*rh - 1.5955e-6*rh*rh;
	*relhum = (*tempC-25)*(.01 + .00008 * rh) + temp_hum;

	return 0;
}
Example #3
0
int
TemperGetTemperatureInC(Temper *t, float *tempC)
{
	char buf[256];
	int ret, temperature, i;

	TemperSendCommand(t, 10, 11, 12, 13, 0, 0, 2, 0);
	TemperSendCommand(t, 0x54, 0, 0, 0, 0, 0, 0, 0);
	for(i = 0; i < 7; i++) {
		TemperSendCommand(t, 0, 0, 0, 0, 0, 0, 0, 0);
	}
	TemperSendCommand(t, 10, 11, 12, 13, 0, 0, 1, 0);
	ret = TemperGetData(t, buf, 256);
	if(ret < 2) {
		return -1;
	}

	temperature = (buf[1] & 0xFF) + (buf[0] << 8);	
	temperature += 1152;			// calibration value
	*tempC = temperature * (125.0 / 32000.0);
	return 0;
}