x 過去ログを見よ!!
目的
温度計を作って遊ぶ。
//spi_st7789_mcp9701_27o25_M5S3_1
//ヘッダーファイル
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#include <SPI.h>
//定義
#define TFT_CS 1
#define TFT_RST 3
#define TFT_DC 5
#define TFT_MOSI 7
#define TFT_SCLK 9
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
//100の割り算 0から30000までは、だいたい正しい
#define DIV100(in) ((in*(65536/100*64+24))>>22)
//25の割り算 0から30000までは、だいたい正しい
#define DIV25(in) ((in*(65536/25*16+8))>>20)
//MCP9701の温度を求める x100
#define TMP(so) ((((so)*270769)-134432821)>>16)
//10の割り算 0から1028までは、正しい。主に0から999
#define DIV10(n) ((n*205)>>11)
//初期化
void setup() {
//240x240の液晶を使用する。
tft.init(240, 240); // Init ST7789 240x240
//ピンの初期化
pinMode(13, INPUT);
// 画面表示をクリア
tft.fillScreen(ST77XX_BLACK);
// テキストサイズを設定
tft.setTextSize(5);
}//setup
//一つ前の値
int f_bk = 0;
char i_bk[3] = "24";
char j_bk[3] = "25";
//メインループ
void loop() {
// 一つ前の値で消す。
// テキスト色を設定
tft.setTextColor(ST77XX_BLACK);
// テキストの開始位置を設定
tft.setCursor(0, 10);
if (f_bk == -1) {tft.print('-');}
tft.print(i_bk); //整数部
tft.print('.'); //ピリオドの表示
tft.print(j_bk); //小数点以下
// テキスト色を設定
tft.setTextColor(ST77XX_WHITE);
// テキストの開始位置を設定
tft.setCursor(0, 10);
//アナログ値の読み込み
int s = analogRead(13); //7PIN センサーの読み取り値
//センサーの値を温度に変換
int t = TMP(s); //t = 2355;//debug
int d1 = (t < 0) ? DIV100(-t) : DIV100(t);
int d01 = (t < 0) ? ((-t) - (d1 * 100)) : (t - (d1 * 100));
d01 = (DIV25(d01)) * 25;
//温度をデカ文字表示
char bu[3] = {'2', '3', 0}; //文字列の一時領域
f_bk = 0;
if (t < 0 ) {tft.print('-');f_bk = -1;}
bu[1] = '0' + d1 - ((DIV10(d1)) * 10);
bu[0] = '0' + DIV10(d1);
tft.print(bu); //整数部
i_bk[0] = bu[0];
i_bk[1] = bu[1];
//ピリオドの表示
tft.print('.');
bu[1] = '0' + d01 - ((DIV10(d01)) * 10);
bu[0] = '0' + DIV10(d01);
tft.print(bu); //小数点以下
j_bk[0] = bu[0];
j_bk[1] = bu[1];
delay(1000); //1秒待つ
}//loop