You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.2 KiB
C

#include <stdlib.h>
#include <stdio.h> //to print error
#include <unistd.h> //header file for standard I2c send and receive commands
#include <sys/ioctl.h> //setup I2c devices
#include <linux/i2c-dev.h> //definitions and structures
#include <i2c/smbus.h> //smbus commands
#include "HTU21D_H.h"
//Declarations of functions
// Temperature:
int get_temp(int fd, double *temp){
reset_sensor(fd);
char buffer[3];
__s32 res = i2c_smbus_read_i2c_block_data(fd, HTU21D_TEMP, sizeof(buffer), buffer);
if (res < 0){
perror("Error -1: Failed to read from the device");
return -1;
}
*temp = -46.85+175.72*(buffer[0]*256+buffer[1])/65536.0;
return 0;
}
// Humidity
//int get_hum(int fd, double *hum);
int get_hum(int fd, double *hum){
reset_sensor(fd);
char buffer[3];
__s32 res = i2c_smbus_read_i2c_block_data(fd, HTU21D_HUM, sizeof(buffer), buffer);
if ( res < 0 ){
perror("Error -3: Failed to read humidity ");
return -1;
}
*hum = -6+125*(buffer[0]*256+buffer[1])/65536.0;
return 0;
}
// Reset Sensor
int reset_sensor(int fd){
if(0 > ioctl(fd, I2C_SLAVE, HTU21D_ADDR)){
perror("Error -2: Failed to reset");
return -2;
}
i2c_smbus_write_byte(fd, HTU21D_RESET);
return 0;
}