グラフィック・ディスプレイを使う (4) テキストとフォント
前回動かしたサンプル・スケッチBME280testをスリムにしました。SPIインターフェースは複数のスレーブ・デバイスをつなげられます。デバイスを区別するためにチップ・セレクト信号CSを独立して指定します。BME280は、マイコン・ボードNano 33 IoTのD7端子でセレクトされます。ディスプレイはD10端子がチップ・セレクト端子がつながっています。
//bme280 Written by Limor Fried & Kevin Townsend for Adafruit Industries.
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define BME_CS 7
Adafruit_BME280 bme(BME_CS); // hardware SPI
void setup() {
Serial.begin(9600);
while(!Serial); // time to get serial running
Serial.println("Start BME280");
unsigned status;
status = bme.begin();
if (!status) {
Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!");
while (1);
}
Serial.println();
}
void loop() {
printValues();
delay(5000);
}
void printValues() {
Serial.print("Temperature = ");
Serial.print(bme.readTemperature(),1);
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print((bme.readPressure() / 100.0F),0);
Serial.println(" hPa");
Serial.print("Humidity = ");
Serial.print(bme.readHumidity(),0);
Serial.println(" %");
Serial.println();
}
シリアルモニタには、次のように測定結果が表示されています。
●グラフィックLCDに表示
第2回のスケッチから必要な部分を抜き出し、上記のスケッチに追加します。テキスト関係は、次の関数が使えます。
tft.setTextColor(YELLOW); 16ビットの色の指定 |
色はRGBの順番で、Redが5ビット、Greenが6ビット、Blueが5ビット、合計16ビットです。
//bme280 Written by Limor Fried & Kevin Townsend for Adafruit Industries.
//ST77* Written by Limor Fried/Ladyada for Adafruit Industries.
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7789.h> // Hardware-specific library for ST7789
#define BME_CS 7
#define TFT_CS 10
#define TFT_RST 9 // Or set to -1 and connect to Arduino RESET pin
#define TFT_DC 8
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
Adafruit_BME280 bme(BME_CS); // hardware SPI
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
void setup() {
Serial.begin(9600);
while(!Serial); // time to get serial running
Serial.println("Start BME280");
Serial.print("Hello! ST77xx TFT Test");
unsigned status;
status = bme.begin();
if (!status) {
Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!");
while (1);
}
tft.init(240, 320); // Init ST7789 320x240
Serial.println("Initialized TFT");
tft.fillScreen(ST77XX_BLACK);
Serial.println();
}
void loop() {
printValues();
printValuesToLCD();
delay(5000);
}
void printValuesToLCD() {
tft.fillScreen(ST77XX_BLACK);
tft.setTextColor(YELLOW);
tft.setTextWrap(true);
tft.setCursor(0, 0);
tft.print("Temperature = ");
tft.print(String(bme.readTemperature(),1));
tft.print(" *C");
tft.setCursor(0, 50);
tft.print("Pressure = ");
tft.print(String((bme.readPressure() / 100.0F),0));
tft.print(" hPa");
tft.setCursor(0, 100);
tft.print("Humidity = ");
tft.print(String(bme.readHumidity(),0));
tft.print(" %");
}
void printValues() {
Serial.print("Temperature = ");
Serial.print(bme.readTemperature(),1);
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print((bme.readPressure() / 100.0F),0);
Serial.println(" hPa");
Serial.print("Humidity = ");
Serial.print(bme.readHumidity(),0);
Serial.println(" %");
Serial.println();
}
実行結果です。
テキストの指定方法は、上記以外に、
void setTextColor (uint16_t color 、uint16_t backgroundcolor ); void setTextSize (uint8_t size ); |
が使えます。文字を大きくしてみます。
tft.setTextSize(2); |
2倍になりました。
●フォントを変える
第2回のときに、Fontsフォルダを用意しました。使うフォントをincludeします。
#include <Fonts/FreeMonoBoldOblique12pt7b.h> #include <Fonts/FreeSerif9pt7b.h> |
そのフォントを使うときは、
<tft.setFont(&FreeMonoBoldOblique12pt7b); |
元に戻すときは次の関数を使います。
tft.setFont(); |
実際に、FreeMono18pt7bを使ってみます。文字が大きいのでy方向は調整しています。
90度回転します。引数には0、1、2、3が使え、90度ずつ回転します。
tft.setRotation(1); |