goo blog サービス終了のお知らせ 

Charry-charry工房(チャーリー・チャーリーコウボウ)

50歳の手習い
(県立秋田工業高校 機械科卒業後、40年目に自分用の旋盤・フライス盤を所有することに)

2025MAR25 arudinoで温度・湿度・気圧・時計 (完成) 

2025-03-25 09:07:39 | arudino
やっと完成しました。

温度・湿度・気圧センサー BME280
ディスプレイ SSD1306
RTC DS3231
ボタンを押すと10秒間だけ表示するス
イッチ(プルアップ方式)

通信方式はI2C方式に統一しました。
SPI通信とI2Cを同時に動かすと
どうも上手くいきませんでした。

スケッチはChatGPTに書いてもらいました。

パソコンを替えたら、コンパイルがもの凄く
早くなりました。

いえーい!
うれしい!

スケッチを下記に記載します。
ーーーーーーーーーーーーーーーーーーー

#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include <RTClib.h>
#include <Adafruit_BME280.h>


#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);


RTC_DS3231 rtc;
Adafruit_BME280 bme;


const int BUTTON_PIN = 4; // D4ボタン
bool displayActive = false;
unsigned long displayStartTime = 0;


void setup() {
pinMode(BUTTON_PIN, INPUT_PULLUP); // D4をプルアップ設定
Serial.begin(115200);


if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("SSD1306 初期化失敗");
while (1);
}


if (!rtc.begin()) {
Serial.println("RTC 初期化失敗");
while (1);
}


if (!bme.begin(0x76)) {
Serial.println("BME280 初期化失敗");
while (1);
}


display.clearDisplay();
display.display();
}


void loop() {
if (digitalRead(BUTTON_PIN) == LOW) { // D4のボタンが押された
displayActive = true;
displayStartTime = millis();
}


if (displayActive) {
unsigned long elapsedTime = millis() - displayStartTime;
if (elapsedTime >= 10000) { // 10秒経過
displayActive = false;
display.clearDisplay();
display.display();
} else {
showSensorData(); // OLED に表示
}
}
}


void showSensorData() {
display.clearDisplay();


DateTime now = rtc.now();
float temp = bme.readTemperature();
float humidity = bme.readHumidity();
float pressure = bme.readPressure() / 100.0F;


display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);


// ⏰ 時間を "09:02" のようにゼロ埋めで表示
char timeStr[6];
sprintf(timeStr, "%02d:%02d", now.hour(), now.minute());


display.setCursor(0, 0);
display.print("Time: ");
display.print(timeStr);


display.setCursor(0, 16);
display.print("Temp: "); display.print(temp); display.println(" C");


display.setCursor(0, 32);
display.print("Humidity: "); display.print(humidity); display.println(" %");


display.setCursor(0, 48);
display.print("Pressure: "); display.print(pressure); display.println(" hPa");


display.display();
}

ーーーーーーーーーーーーーーーーーー





最新の画像もっと見る

コメントを投稿

サービス終了に伴い、10月1日にコメント投稿機能を終了させていただく予定です。