STM32H743とカラーOLED SSD1331で温度計(MCP9701)「理系フリマで入手」



x NUCLEO-H743ZI2
x 回路は、Arduinoと同じ


x Adafruit SSD1331 OLED Driver Library for Arduino を　インストール
x Adafruit GFX Library を　インストール

目的
カラーOLEDのテスト

有機ＥＬディスプレイ　０．９５インチ　９６×６４ドット　ＲＧＢ
[QT095B]
通販コード　P-14435
発売日　2019/09/02

温度センサーＩＣ　ＭＣＰ９７０１－Ｅ／ＴＯ　（８個入）
[MCP9701-E/TO]
通販コード　I-03199
発売日　2009/10/26



![o_cop266.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/965a951f-ff9a-75b5-5a18-e4a97050751e.jpeg)




いろいろ
ものすごく、簡単そうに実質5分で作っているけど、
これ、物凄く難しいぞ!!

カラーOLEDは、メモリを物凄く食うから小マイコンだと実質、動かない
H743の無駄に多いメモリを無駄に使う為にカラーOLEDで遊んでいる。

まあ、いいや




プログラム


```c++



//OLED_SSD1331_9701_TEST1_743_1

//ヘッダー
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1331.h>
#include <SPI.h>


// You can use any (4 or) 5 pins
#define sclk 13
#define mosi 11
#define cs   10
#define rst  9
#define dc   8


// Color definitions
#define BLACK           0x0000
#define BLUE            0x001F
#define RED             0xF800
#define GREEN           0x07E0
#define CYAN            0x07FF
#define MAGENTA         0xF81F
#define YELLOW          0xFFE0
#define WHITE           0xFFFF


//SSD1331オブジェクトの定義
Adafruit_SSD1331 display = Adafruit_SSD1331(&SPI, cs, dc, rst);


//変換データ
static const char tmp_t[]={
0*2+0,0*2+1,0*2+1,
1*2+0,1*2+1,1*2+1,
2*2+0,2*2+1,2*2+1,
3*2+0,3*2+1,3*2+1,
4*2+0,4*2+1,4*2+1,
5*2+0,5*2+1,5*2+1,
6*2+0,6*2+1,6*2+1,
7*2+0,7*2+1,7*2+1,
8*2+0,8*2+1,8*2+1,
9*2+0,9*2+1,9*2+1,
10*2+0,10*2+1,10*2+1,
11*2+0,11*2+1,11*2+1,
12*2+0,12*2+1,12*2+1,
13*2+0,13*2+1,13*2+1,
14*2+0,14*2+1,14*2+1,
15*2+0,15*2+1,15*2+1,
16*2+0,16*2+1,16*2+1,
17*2+0,17*2+0,17*2+1,
18*2+0,18*2+0,18*2+1,
19*2+0,19*2+0,19*2+1,
20*2+0,20*2+0,20*2+1,
21*2+0,21*2+0,21*2+1,
22*2+0,22*2+0,22*2+1,
23*2+0,23*2+0,23*2+1,
24*2+0,24*2+0,24*2+1,
25*2+0,25*2+0,25*2+1,
26*2+0,26*2+0,26*2+1,
27*2+0,27*2+0,27*2+1,
28*2+0,28*2+0,28*2+1,
29*2+0,29*2+0,29*2+1,
30*2+0,30*2+0,30*2+1,
31*2+0,31*2+0,31*2+1,
32*2+0,32*2+0,32*2+1,
33*2+0,33*2+0,33*2+1,
34*2+0,34*2+0,34*2+1,
35*2+0,35*2+0,35*2+1,
36*2+0,36*2+0,36*2+1,36*2+1,
37*2+0,37*2+1,37*2+1,
38*2+0,38*2+1,38*2+1,
39*2+0,39*2+1,39*2+1
};


//温度センサーの値
static const char data[][5]={
"00.0","00.5","01.0","01.5","02.0","02.5","03.0","03.5","04.0","04.5","05.0","05.5","06.0","06.5","07.0","07.5","08.0","08.5","09.0","09.5",
"10.0","10.5","11.0","11.5","12.0","12.5","13.0","13.5","14.0","14.5","15.0","15.5","16.0","16.5","17.0","17.5","18.0","18.5","19.0","19.5",
"20.0","20.5","21.0","21.5","22.0","22.5","23.0","23.5","24.0","24.5","25.0","25.5","26.0","26.5","27.0","27.5","28.0","28.5","29.0","29.5",
"30.0","30.5","31.0","31.5","32.0","32.5","33.0","33.5","34.0","34.5","35.0","35.5","36.0","66.5","37.0","37.5","38.0","38.5","39.0","39.5"
};


//初期化
void setup() {

  display.begin(); //ディスプレーの初期化

  //display.fillScreen(BLACK);

}//setup


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

  // 画面表示をクリア
  display.fillScreen(BLACK);

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


//温度センサーの開始

  //センサーの値を読み込む
  analogReadResolution(12); // ADC 12bit mode
  int s = analogRead(A0);   // センサーの読み取り値

  //s=184 << 3; //debug

  //温度の表示
  char *str1; //文字のポインター
  s = (s >> 3);
  if (s >= 184) {
    str1 = "40.0";
  } else if (s <= 62) {
    str1 = "-0.0";
  } else {
    str1 = (char *)data[tmp_t[s - 63]];
  }

//温度センサーの終了


  // 1行目に数字を表示
  display.println(str1);

  delay(1000); //1秒待つ

}//loop




```