Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
RaspberryPi/gpio/raspi_hdc1000.c
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
72 lines (59 sloc)
2.15 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/******************************************************************************* | |
Raspberry Pi用 I2C 温湿度センサ TI社 HDC1000 raspi_hdc1000 | |
本ソースリストおよびソフトウェアは、ライセンスフリーです。(詳細は別記) | |
利用、編集、再配布等が自由に行えますが、著作権表示の改変は禁止します。 | |
I2C接続のセンサから測定値を取得する | |
Arduino標準ライブラリ「Wire」は使用していない(I2Cの手順の学習用サンプル) | |
I2C接続の温湿度センサの値を読み取る | |
TI社 HDC1000 | |
Copyright (c) 2014-2017 Wataru KUNINO | |
https://bokunimo.net/raspi/ | |
*******************************************************************************/ | |
// #include <Wire.h> | |
#include <stdio.h> | |
#include <stdlib.h> | |
#include <stdint.h> | |
#include <unistd.h> | |
#include <string.h> | |
#include "../libs/soft_i2c.h" | |
typedef unsigned char byte; | |
byte i2c_address=0x40; // HDC1000 の I2C アドレス | |
uint16_t _getReg(byte data){ | |
byte rx[2]; | |
i2c_write(i2c_address,&data,1); // 書込みの実行 | |
delay(10); // 6.5ms以上 | |
i2c_read(i2c_address,rx,2); // 読み出し | |
return (((uint16_t)rx[0])<<8)|((uint16_t)rx[1]); | |
} | |
float getTemp(){ | |
uint16_t ret; | |
ret = _getReg(0x00); // 温度レジスタ 00 | |
if(ret<0) return -999.; | |
return (float)ret / 65536. * 165. - 40.; | |
} | |
float getHum(){ | |
uint16_t ret; | |
ret = _getReg(0x01); // 湿度レジスタ 01 | |
if(ret<0) return -999.; | |
return (float)ret / 65536. * 100.; | |
} | |
int main(int argc,char **argv){ | |
byte config[3]; | |
if( argc >= 2 ) i2c_address=(byte)strtol(argv[1],NULL,16); | |
if(i2c_address>=0x80) i2c_address>>=1; | |
if( argc < 1 || argc > 2 ){ | |
fprintf(stderr,"usage: %s [i2c_address]\n",argv[0]); | |
return -1; | |
} | |
i2c_init(); | |
delay(18); // 15ms以上 | |
config[0]=0x02; // 設定レジスタ 02 | |
config[1]=0x00; | |
config[2]=0x00; | |
i2c_write(i2c_address,config,3); // 書込みの実行 | |
delay(20); | |
printf("%3.2f ",getTemp()); | |
printf("%4.2f\n",getHum()); | |
i2c_close(); | |
return 0; | |
} |