STM32G031J6M6のArduinoでの温度,STTS751で温度シリアル出力(i2c)
1.SCLとSDAを接続、プルアップも忘れずに
2.電源の接続
3.下記のソースコードを書き込む
4.コンパイル実行で表示されたら終了
5.おわり
x書き込みがうまくいかなくなる場合があるので上級者用
xSTM32G031J6M6のシリアル通信については、下記のリンク参照
STM32G031のArduinoでのシリアル通信(STM32G031J6M6)
https://qiita.com/caa45040/items/8b77fe33e80a54b47c3d
x電源を入れる手順を間違えるとうまく動かない 本体が先、シリアルが後
x再度リコンパイルで再起動させている
#include <Wire.h> //I2C library
//STM32G031J6M6
#define sdaPin PA12 // ArduinoA4
#define sclPin PA11 // ArduinoA5
// STTS751のドライブは、下記のアドレスを参考にした。
// mike.saunby.net/2013_03_01_archive.html
// I2C temperature sensor - see table 1 of data sheet. Resistor selects address.
#define STTS751 0x39
//
byte i2c_sensor_read_byte( int deviceaddress, int eeaddress ) {
byte rdata = 0xFF;
int rc;
Wire.beginTransmission(deviceaddress);
Wire.write((int)eeaddress);
rc = Wire.endTransmission(false);
Wire.requestFrom(deviceaddress, 1);
if (Wire.available()){
rdata = Wire.read();
}
if(rc != 0){
//Serial.print("Error ");
//Serial.println(rc);
}
return rdata;
}
int lo_on = 1; // 1=on 0=off
//プロトタイプ宣言
void stts751_init();
void setup()
{
delay(3000); //not delete
//Wire.begin(); // initialise the connection
Wire.begin(sdaPin,sclPin); //STM32G031J6M6
Serial.begin(9600);
stts751_init();
} //end setup
void stts751_init()
{
//4回読み捨てる
int loop_i;
for(loop_i=1;loop_i<=4;loop_i++){
byte lo;
signed char hi;
hi = i2c_sensor_read_byte(STTS751, 0);
if(lo_on == 1 ) {
lo = i2c_sensor_read_byte(STTS751, 2);
}
delay(500);
} //end for
} // stts751_init
int stts751_run()
{
byte lo;
signed char hi;
float temperature;
//Serial.println("satart");
// read temperature
hi = i2c_sensor_read_byte(STTS751, 0);
lo = 0;
if(lo_on == 1) {
lo = i2c_sensor_read_byte(STTS751, 2);
}
if( hi > 0){
temperature = hi + lo * 1.0/256.0;
}else{
temperature = hi - lo * 1.0/256.0;
}
//Serial.print(temperature);
//Serial.println(" ");
//delay(1000);
int ret_q;
ret_q = temperature * 100;
return(ret_q);
}
void loop()
{
//stts751 start
int stts751_tmp1 = 0;
float temperature;
int hi;
int lo;
//stts751 end
//stts751 start
stts751_tmp1 = stts751_run();
temperature = stts751_tmp1 /100.0;
hi = stts751_tmp1 >> 8;
lo = stts751_tmp1 & 0xFF;
//stts751 end
//stts751 start
Serial.print(temperature);
Serial.println(" ");
//stts751 end
delay(1000);
}
Author And Source
この問題について(STM32G031J6M6のArduinoでの温度,STTS751で温度シリアル出力(i2c)), 我々は、より多くの情報をここで見つけました https://qiita.com/caa45040/items/7402749134b619258b16著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .