x 過去ログを見よ!!
x 3.0.7
x 時間合わせは、別
x 業務連絡 理系フリマあるよ(絶滅メディア博物館) なんのこと?
結果
プログラム
//SSD1306_DS1307_M5NanoC6_1
//ヘッダーファイル
#include <Arduino.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
//定義
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
// デバイスアドレス(スレーブ) DS1307
#define ADDR 0x68 // 2進数 1101000
//初期化
void setup() {
// I2Cアドレスは使用するディスプレイに合わせて変更する
display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
}//setup
//メインループ
void loop() {
// 画面表示をクリア
display.clearDisplay();
// テキストサイズを設定
display.setTextSize(2);
// テキスト色を設定
display.setTextColor(WHITE);
// テキストの開始位置を設定
display.setCursor(0, 10);
//時計の処理 ↓ここから
// レジスタのアドレスを先頭にする
Wire.beginTransmission(ADDR);
Wire.write(0x00);
Wire.endTransmission();
delay(1);
// I2Cスレーブに8byteのレジスタデータを要求する
Wire.requestFrom(ADDR, 8);
// 8byteのデータを取得する
char data_read[16] = {0x88, 0x88, 0x88}; //データバッファー
int ii = 0;
while (Wire.available()) { // 要求より短いデータが来る可能性あり
data_read[ii++] = Wire.read(); // 1バイトを受信
}//while
delay(1);
//表示変換する パック二進化十進を文字列にする
char cn1[16]; //桁
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] = ':';
cn1[6] = '0' + (data_read[0] >> 4); //4 秒 上位
cn1[7] = '0' + (data_read[0] & 0xf); //5 秒 下位
cn1[8] = 0;
//時計の処理 ↑ここまで
display.println(cn1); //時刻を表示する
// 描画バッファの内容を画面に表示
display.display();
delay(1000); //1秒待つ
}//loop