2024年1月26日 星期五

我的第一次:請 AI幫我寫 Arduino 程式 (1)

台大生物機電工程系(生機系)郭教授  Arduino 的第二堂課匆匆解釋了下面這問題一下就過了 !! 連程式碼都沒有甚是奇怪?想想用 AI 有一段時間了現在試試幫我寫一段程式看看 !

 撰寫一個 Arduino 程式 他能執行以下功能

Build a circuit that composes of an LED and a button

• Blink the LED at

• 2Hz when the button is pressed

• ½ Hz when the button is released

CGPT3.5 回復:

以下是一個簡單的Arduino程式,實現了按下按鈕時LED閃爍2Hz,釋放按鈕時LED閃爍0.5Hz的功能。在這個例子中,我們使用Digital Pin 2作為按鈕的輸入,Digital Pin 13作為LED的輸出。

const int buttonPin = 2;  // 按鈕接線到Digital Pin 2

const int ledPin = 13;    // LED接線到Digital Pin 13

int buttonState = 0;      // 記錄按鈕的狀態

unsigned long previousMillis = 0;  // 記錄上一次閃爍的時間

const long intervalOn = 500;       // 按下按鈕時LED閃爍的時間間隔 (2Hz)

const long intervalOff = 2000;     // 釋放按鈕時LED閃爍的時間間隔 (0.5Hz)


void setup() {

  pinMode(ledPin, OUTPUT);

  pinMode(buttonPin, INPUT);

}


void loop() {

  buttonState = digitalRead(buttonPin);


  // 檢查按鈕是否被按下

  if (buttonState == HIGH) {

    // 按下按鈕時LED閃爍2Hz

    blinkLED(2);

  } else {

    // 釋放按鈕時LED閃爍0.5Hz

    blinkLED(0.5);

  }

}


void blinkLED(float frequency) {

  unsigned long currentMillis = millis();


  // 計算閃爍的時間間隔

  long interval = 1000 / (2 * frequency);


  // 判斷是否過了閃爍的時間間隔

  if (currentMillis - previousMillis >= interval) {

    // 記錄當前時間

    previousMillis = currentMillis;


    // 切換LED狀態

    if (digitalRead(ledPin) == HIGH) {

      digitalWrite(ledPin, LOW);

    } else {

      digitalWrite(ledPin, HIGH);

    }

  }

}

這個程式中,我們使用了millis()函數來跟蹤時間,以便在指定的頻率下閃爍LED。按下按鈕時,閃爍頻率設置為2Hz,釋放按鈕時,閃爍頻率設置為0.5Hz。


Bard(實驗版)

// 定義 LED 和按鈕的接腳

const int ledPin = 13;

const int buttonPin = 2;


// 定義 LED 的閃爍頻率

const int blinkInterval = 1000 / 2; // 2Hz

const int halfBlinkInterval = 1000 / (2 * 2); // ½ Hz


// 初始化 LED 和按鈕

void setup() {

  pinMode(ledPin, OUTPUT);

  pinMode(buttonPin, INPUT);

}


// 主回圈

void loop() {

  // 讀取按鈕的狀態

  int buttonState = digitalRead(buttonPin);


  // 如果按鈕按下

  if (buttonState == HIGH) {

    // 以 2Hz 閃爍 LED

    digitalWrite(ledPin, HIGH);

    delay(blinkInterval);

    digitalWrite(ledPin, LOW);

    delay(blinkInterval);

  } else {

    // 如果按鈕釋放

    // 以 ½ Hz 閃爍 LED

    digitalWrite(ledPin, HIGH);

    delay(halfBlinkInterval);

    digitalWrite(ledPin, LOW);

    delay(halfBlinkInterval);

  }

}

請謹慎使用程式碼。了解詳情

此程式首先定義 LED 和按鈕的接腳。然後,它定義 LED 的閃爍頻率。在主回圈中,程式會讀取按鈕的狀態。如果按鈕按下,程式會以 2Hz 閃爍 LED。如果按鈕釋放,程式會以 ½ Hz 閃爍 LED。


您可以使用以下電路來實現此程式:


LED

 |

 |

 |   10kΩ

 |

 |

GND

LED 的正極連接到 Arduino 板上的 13 接腳。LED 的負極連接到 Arduino 板上的 GND 接腳。按鈕的其中一端連接到 Arduino 板上的 2 接腳。按鈕的另一端連接到 Arduino 板上的 GND 接腳。

您可以將此程式修改為執行其他功能。例如,您可以修改程式以使 LED 閃爍不同的顏色。


Google AI Studio

const int ledPin = 13;

const int buttonPin = 2;

int buttonState = 0;

int ledState = 0;

unsigned long previousMillis = 0;

const long interval = 1000; // 1 second


void setup() {

  pinMode(ledPin, OUTPUT);

  pinMode(buttonPin, INPUT);

}


void loop() {

  buttonState = digitalRead(buttonPin);

  unsigned long currentMillis = millis();


  if (buttonState == HIGH) {

    if (ledState == LOW) {

      digitalWrite(ledPin, HIGH);

      ledState = HIGH;

      previousMillis = currentMillis;

    } else if (ledState == HIGH && (currentMillis - previousMillis >= interval / 2)) {

      digitalWrite(ledPin, LOW);

      ledState = LOW;

      previousMillis = currentMillis;

    }

  } else {

    if (ledState == HIGH) {

      digitalWrite(ledPin, HIGH);

      ledState = HIGH;

      previousMillis = currentMillis;

    } else if (ledState == LOW && (currentMillis - previousMillis >= interval)) {

      digitalWrite(ledPin, LOW);

      ledState = LOW;

      previousMillis = currentMillis;

    }

  }

}

```


這個程式使用了無符號整數變數 `previousMillis` 來儲存前一次按鈕狀態改變的時間。程式還使用了常數 `interval` 來定義 LED 閃爍的間隔。


當按鈕按下時,程式會以 2Hz 的頻率閃爍 LED。當按鈕釋放時,程式會以 ½ Hz 的頻率閃爍 LED。


您可以使用以下電路來實現此程式:


LED

 |

 |

 |   10kΩ

 |

 |

GND

LED 的正極連接到 Arduino 板上的 13 接腳。LED 的負極連接到 Arduino 板上的 GND 接腳。按鈕的其中一端連接到 Arduino 板上的 2 接腳。按鈕的另一端連接到 Arduino 板上的 GND 接腳。

您可以將此程式修改為執行其他功能。例如,您可以修改程式以使 LED 閃爍不同的顏色。

沒有留言:

張貼留言