x 時間合わせは、別
x あまり、正確では、ない
x 秋月のDS1307ユニットを使用
x 秋月のAE-ATM0130B3を使用
x 過去ログを見よ!!
目的
ST7789V2のディスプレイで時計を作って遊ぶ。
結果
プログラム
//spi_st7789_DS1307_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);
//初期化
void setup() {
//I2Cの初期化
Wire.begin();
//240x240の液晶を使用する。
tft.init(240, 240); // Init ST7789 240x240
// 画面表示をクリア
tft.fillScreen(ST77XX_BLACK);
// テキストサイズを設定
tft.setTextSize(5);
}//setup
char cn1[16] = "12:34"; //時刻
//メインループ
void loop() {
// 前に表示した内容で消す。
// テキスト色を設定
tft.setTextColor(ST77XX_BLACK);
// テキストの開始位置を設定
tft.setCursor(0, 10);
tft.print(cn1); //前に表示した内容
// テキスト色を設定
tft.setTextColor(ST77XX_WHITE);
// テキストの開始位置を設定
tft.setCursor(0, 10);
//RTC DS1307のアドレス
#define ADDR 0x68 // 2進数 1101000
// レジスタのアドレスを先頭にする
Wire.beginTransmission(ADDR);
Wire.write(0x00);
Wire.endTransmission();
delay(1);
// I2Cスレーブに8byteのレジスタデータを要求する
Wire.requestFrom(ADDR, 8);
// 8byteのデータを取得する
unsigned char data_read[16] = {0x88, 0x88, 0x88}; //データバッファー
int ii = 0;
while (Wire.available()) { // 要求より短いデータが来る可能性あり
data_read[ii++] = Wire.read(); // 1バイトを受信
}//while
//dbug
//char data_read[16];//debug
//data_read[2] = 0x01; data_read[1] = 0x23;
//表示変換する
cn1[0] = '0' + (data_read[2] >> 4); //0 時 上位
cn1[1] = '0' + (data_read[2] & 0xf); //1 時 下位
cn1[2] = ':';
cn1[3] = '0' + (data_read[1] >> 4); //2 分 上位
cn1[4] = '0' + (data_read[1] & 0xf); //3 分 下位
cn1[5] = 0;
tft.print(cn1); //表示
for(int hh=0;hh<60;hh++) {delay(1000); /*1秒待つ*/}
}//loop