STTS751温度センサーの値をシリアルポートに出力する。(STM32G031)(小数点2桁)その2


STTS751温度センサーの値をシリアルポートに出力する。(STM32G031)(小数点2桁)その2


目的
(高速)温度センサーのデバッグ用
でも普通に使える


![o_cop812.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/a2ed1c95-24de-1383-8999-8d391aceb32f.jpeg)



メイン


```c++


//STTS751_to_SER_2


//インクルド
#include "hh.h"
#include "i2c_run.h"


//定義
//オブジェクトの定義


 void NA_ST7735_P::setTextSize(uint8_t s) { }

 void NA_ST7735_P::setTextColor(uint16_t c) {  }

 void NA_ST7735_P::setCursor(int16_t x, int16_t y) {  }


 void NA_ST7735_P::println(void)
  { 
  Serial.println();
  } 

 void NA_ST7735_P::println(char *str1)
  {
      Serial.println(str1);
  }

 void NA_ST7735_P::print(char *str1)
  {
      Serial.print(str1);
  }

 void NA_ST7735_P::println(char ch)
  {
      Serial.println(ch);
  }

 void NA_ST7735_P::print(char ch)
  {
      Serial.print(ch);
  }

 void NA_ST7735_P::println(int al)
  {
      Serial.println(al);
  }

 void NA_ST7735_P::print(int al)
  {
      Serial.print(al);
  }

//実体の作成
NA_ST7735_P display;


//初期化処理
void setup()
{

  //シリアルの初期化
  Serial.setTx(PA2_ALT1);
  Serial.setHalfDuplex();
  Serial.begin(9600);


  delay(3000); //not delete

  i2c_setup();

} //setup

//メインループ
void loop()
{

  i2c_run(&display);

  //1秒の待ち
  delay(1000);

} //loop


```

hh.h


```c++


#define BLACK NA_ST7735_P_BLACK     ///< Draw 'off' pixels
#define WHITE NA_ST7735_P_WHITE     ///< Draw 'on' pixels
#define INVERSE NA_ST7735_P_INVERSE ///< Invert pixels

/// fit into the SSD1306_ naming scheme
#define NA_ST7735_P_BLACK 0   ///< Draw 'off' pixels
#define NA_ST7735_P_WHITE 1   ///< Draw 'on' pixels
#define NA_ST7735_P_INVERSE 2 ///< Invert pixels


//クラスの定義
struct NA_ST7735_P
{
  void setTextSize(uint8_t s);          //メソッドの宣言
  void setTextColor(uint16_t c);        //メソッドの宣言
  void setCursor(int16_t x, int16_t y); //メソッドの宣言

  void println(void); //メソッドの宣言

  void println(char *str1);//メソッドの宣言
  void print(char *str1);//メソッドの宣言

  void println(char ch);//メソッドの宣言
  void print(char ch);//メソッドの宣言

  void println(int al);//メソッドの宣言
  void print(int al);//メソッドの宣言

};



```

i2c_run.h


```c++




#include <Wire.h>

#define STTS751 0x39

void i2c_setup(){

  //i2cの初期化
  Wire.setSDA(PA12);
  Wire.setSCL(PA11);
  Wire.begin(); //pa12 pa11

}

void i2c_run(NA_ST7735_P *display_bk){

  NA_ST7735_P display = *(display_bk);

  //温度の読み込み
  char s1[2] = {0,0}; //センサーの値
  char s2[2] = {0,0}; //センサーの値
  int ii=0;

  //0番目のレジスター 温度整数部
  Wire.beginTransmission(STTS751);
  Wire.write(0);
  Wire.endTransmission();
  delay(1);
  //1
  Wire.requestFrom(STTS751, 1);
  s1[0]=99;
  while(Wire.available())  {    // 要求より短いデータが来る可能性あり
    s1[ii++] = (int)Wire.read();       // 1バイトを受信
  }//while
  delay(1);

  //2番目のレジスター　温度小数部
  Wire.beginTransmission(STTS751);
  Wire.write(2);
  Wire.endTransmission();
  delay(1);
  //2
  ii=0;
  Wire.requestFrom(STTS751, 1);
  s2[0]=0xc0;
  while(Wire.available())  {    // 要求より短いデータが来る可能性あり
    s2[ii++] = (int)Wire.read();       // 1バイトを受信
  }//while

  //s1[0]=26;           //debug
  //s1[1]=0x12;         //debug
  //s2[0]=0x00; //0.0   //debug
  //s2[0]=0x40; //0.25  //debug
  //s2[0]=0x80; //0.5   //debug
  //s2[0]=0xc0; //0.75  //debug

  //配列の定義
  char str1[]={'2','6','.','5','0',0};
  char ti1[]={'0','2','5','7'};
  char ti2[]={'0','5','0','5'};

  //変換処理 たぶん難しいのでわかる人に聞いて!!
  //小規模マイコン用のリッチでは、ない処理
  //DIV10は、10の割り算処理
  //ex  (19*204.8)/2048=1.9
  //仮に (19*205  )/2048=1 (小数点以降切り捨て)
  //余りは、10で割って10掛けて引けばいい
  //ex 19/10=1 1*10=10 19-10=9 (小数点以降切り捨て)
  //2進固定小数点は、1/2,1/4,1/8,...となる
  //8ビットを6回シフトして11Bでマスクすると1/2,1/4が
  //取り出せて、表引きしている。
  //情報系の大学で習う大人な処理
#define DIV10(xx) ((xx*205)>>11)
  str1[0]='0'+DIV10(s1[0]);
  if(str1[0]=='0'){str1[0]=' ';}
  str1[1]='0'+s1[0]-(DIV10(s1[0])*10);
  str1[2]='.';
  str1[3]=ti1[(s2[0]>>6)&3];
  str1[4]=ti2[(s2[0]>>6)&3];
  str1[5]=0;  

  // テキストサイズを設定
  display.setTextSize(3);
  // テキスト色を設定
  display.setTextColor(WHITE);
  // テキストの開始位置を設定
  display.setCursor(0, 0);

  // 1行目に46を表示
  display.println();
  display.println("-----------");
  display.println("temperature");
  display.println();
  display.print("   ");
  display.print(str1);
  display.print("C");
  display.println();
  display.println("-----------");

}//i2c_run






```