ChatGPT + TinkerCAD + 計時器設計 (2)

上一個ChatGPT+TinkerCAD+計時器,總覺得我是不是命令下得不夠好。所以我修正了一些命令。

用i2c的LCD當輸出畫面。只有一個按紐。當我按一下按紐,會開始記時,並顯示在LCD上。當再按一下開關,則計時會停止。請用millis()來計時。用arduino寫。

想不到這一次的實驗,一試就成功。

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// I2C LCD 的地址
const int LCD_ADDRESS = 0x27;

// 定義按鈕腳位
const int BUTTON_PIN = 2;

// 定義計時器變量
unsigned long timerStart = 0;
unsigned long timerEnd = 0;

// 創建一個 LCD 對象
LiquidCrystal_I2C lcd(LCD_ADDRESS, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

void setup() {
  // 初始化按鈕腳位
  pinMode(BUTTON_PIN, INPUT_PULLUP);

  // 初始化 LCD
  lcd.begin(16, 2);
}

void loop() {
  // 檢查按鈕是否被按下
  if (digitalRead(BUTTON_PIN) == LOW) {
    // 如果計時器正在運行,則停止計時器
    if (timerStart > 0) {
      timerEnd = millis();
      timerStart = 0;
    } else {
      // 否則,啟動計時器
      timerStart = millis();
    }
  }

  // 如果計時器正在運行,則計算運行時間並顯示
  if (timerStart > 0) {
    unsigned long elapsed = millis() - timerStart;

    // 計算小時
    int hours = elapsed / 3600000;
    elapsed = elapsed % 3600000;

    // 計算分鐘
    int minutes = elapsed / 60000;
    elapsed = elapsed % 60000;

    // 計算秒
    int seconds = elapsed / 1000;

    // 將時間格式化為 hh:mm:ss
    char timeStr[9];
    sprintf(timeStr, "%02d:%02d:%02d", hours, minutes, seconds);

    // 在 LCD 上顯示時間
    lcd.setCursor(0, 0);
    lcd.print(timeStr);
  }
}

丟到TinkerCAD後,發現對按鈕電位定義不同。更改一下電路,還有LCD的設置,就可以直接執行。

不過,可不可以請chatgpt告訴我電路該怎麼接呢?於是,我問了他這電路該怎麼接呢?

ChatGPT盡責的回答了:

要使用 I2C LCD 在 Arduino 上進行顯示,您需要連接 LCD 模塊和 Arduino 板之間的 SDA 和 SCL 腳位。

在 Arduino Uno 上,SDA 腳位位於 A4,SCL 腳位位於 A5。因此,您需要在 Arduino 板的 A4 和 A5 腳位以及 LCD 模塊的 SDA 和 SCL 腳位之間連接線。

您還需要連接 LCD 模塊的 VCC 和 GND 腳位到 Arduino 板的 5V 和 GND 腳位。

最後,您需要連接按鈕的一端到 Arduino 板的數字腳位,另一端到 GND 腳位。

總而言之,您的電路應該看起來像這樣:

  • Arduino 板的 5V 腳位連接到 LCD 模塊的 VCC 腳位
  • Arduino 板的 GND 腳位連接到 LCD 模塊的 GND 腳位
  • Arduino 板的 A4 腳位連接到 LCD 模塊的 SDA 腳位
  • Arduino 板的 A5 腳位連接到 LCD 模塊的 SCL 腳位
  • 按鈕的一端連接到 Arduino 板的數字腳位
  • 按鈕的另一端連接到 Arduino 板的 GND 腳位

希望這些資訊能夠幫助您。如果您還有任何其他疑問,請隨時告訴我。

可以看一下我的執行畫面裡的電路,跟他說的可以說是一模一樣啊。

哈哈哈哈~~~ 強大啊~~

這跟本交作業神器了~

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *