截圖:


鏈接:
https://wokwi.com/projects/415345595312267265
代碼:
詳細注釋版:AD和I2C仿真實驗案例程序
cpp
#include <LiquidCrystal_I2C.h>// 定義I2C地址和LCD的行列數
#define I2C_ADDR 0x27 // I2C設備的地址,通常LCD的默認地址為0x27或0x3F
#define LCD_COLUMNS 16 // LCD顯示屏的列數
#define LCD_LINES 2 // LCD顯示屏的行數// 創建一個LiquidCrystal_I2C對象,用于控制LCD顯示屏
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);// 變量定義
int buttonState; // 用于存儲按鈕的當前狀態(HIGH或LOW)
int x = 0; // 用于切換顯示模式的計數器,初始化為0
const int buttonPin = 4; // 按鈕連接的引腳,使用數字引腳4
float resistance = 0; // 從模擬輸入讀取的電阻值,初始化為0
float pot = 0; // 轉換后的電位器電壓值,初始化為0
float volts = 0; // 暫時未使用的電壓變量(可忽略或用于后續擴展)
float tempC = 0; // 攝氏溫度,初始化為0
float tempF = 0; // 華氏溫度,初始化為0
const int ledPin = 7; // LED連接的引腳,使用數字引腳7void setup() {// 初始化串口通信,波特率設置為9600Serial.begin(9600);// 設置引腳模式pinMode(A0, INPUT); // 模擬輸入A0用于讀取溫度傳感器的值pinMode(ledPin, OUTPUT); // 設置LED引腳為輸出模式pinMode(buttonPin, INPUT); // 設置按鈕引腳為輸入模式// 初始化LCD顯示lcd.init(); // 初始化LCD模塊lcd.backlight(); // 打開LCD背光
}void loop() {// 讀取模擬輸入,計算溫度resistance = analogRead(A0); // 從模擬引腳A0讀取傳感器的模擬值(0-1023)pot = resistance * 5.0 / 1023.0; // 將模擬值轉換為電壓值(假設使用5V參考電壓)tempC = pot / 0.01; // 根據傳感器特性計算攝氏溫度(假設每10mV對應1°C)tempF = tempC * 1.8 + 32; // 將攝氏溫度轉換為華氏溫度// 讀取按鈕狀態buttonState = digitalRead(buttonPin); // 讀取按鈕引腳的電平狀態// 根據按鈕點擊次數切換顯示模式if (buttonState == HIGH) { // 如果按鈕被按下(HIGH表示按下)x++; // 計數器加1delay(250); // 防抖延時,防止按鈕抖動導致多次計數if (x >= 2) { // 如果計數器達到2,重置為0x = 0;}}// 根據x的值決定顯示攝氏或華氏溫度if (x == 0) { // 如果x為0,顯示攝氏溫度lcd.clear(); // 清除LCD顯示內容lcd.setCursor(0, 0); // 設置光標到第1行第1列lcd.print("Temperatura:"); // 顯示"Temperatura:"lcd.setCursor(0, 1); // 設置光標到第2行第1列lcd.print("Graus C:"); // 顯示"Graus C:"lcd.setCursor(9, 1); // 設置光標到第2行第10列lcd.print(tempC); // 顯示攝氏溫度值delay(500); // 延時500毫秒} else if (x == 1) { // 如果x為1,顯示華氏溫度lcd.clear(); // 清除LCD顯示內容lcd.setCursor(0, 0); // 設置光標到第1行第1列lcd.print("Temperatura:"); // 顯示"Temperatura:"lcd.setCursor(0, 1); // 設置光標到第2行第1列lcd.print("Graus F:"); // 顯示"Graus F:"lcd.setCursor(9, 1); // 設置光標到第2行第10列lcd.print(tempF); // 顯示華氏溫度值delay(500); // 延時500毫秒}// 根據溫度控制LEDif (tempC >= 30) { // 如果攝氏溫度大于等于30度digitalWrite(ledPin, HIGH); // 點亮LEDdelay(200); // 延時200毫秒,保持LED點亮狀態}if (tempC <= 25) { // 如果攝氏溫度小于等于25度digitalWrite(ledPin, LOW); // 熄滅LEDdelay(250); // 延時250毫秒,保持LED熄滅狀態}
}
詳細講解
I2C地址和LCD初始化:
I2C_ADDR定義了LCD的I2C地址,通常為0x27或0x3F。
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);創建了一個LCD對象,用于控制LCD顯示屏。
變量定義:
buttonState用于存儲按鈕的當前狀態。
x用于切換顯示模式,初始化為0。
buttonPin定義了按鈕連接的引腳。
resistance、pot、tempC、tempF分別用于存儲電阻值、電壓值、攝氏溫度和華氏溫度。
ledPin定義了LED連接的引腳。
setup()函數:
初始化串口通信,波特率設置為9600。
設置引腳模式,A0為模擬輸入,ledPin為輸出,buttonPin為輸入。
初始化LCD顯示,并打開背光。
loop()函數:
讀取模擬輸入并計算溫度:
使用analogRead(A0)讀取模擬輸入值。
將模擬值轉換為電壓值,并根據傳感器特性計算攝氏溫度。
將攝氏溫度轉換為華氏溫度。
讀取按鈕狀態并切換顯示模式:
如果按鈕被按下,計數器x加1,并延時250毫秒防抖。
如果x達到2,重置為0。
根據x的值決定顯示攝氏或華氏溫度:
如果x為0,顯示攝氏溫度。
如果x為1,顯示華氏溫度。
根據溫度控制LED:
如果攝氏溫度大于等于30度,點亮LED。
如果攝氏溫度小于等于25度,熄滅LED。
實驗總結
本程序通過模擬輸入讀取溫度傳感器的值,計算攝氏和華氏溫度,并在LCD顯示屏上顯示。同時,根據溫度值控制LED的亮滅。按鈕用于切換顯示模式(攝氏或華氏溫度)。通過本實驗,您可以學習如何使用Arduino進行模擬輸入讀取、I2C通信、LCD顯示控制以及簡單的條件判斷和LED控制。
Arduino Mega 2560 模數與數模轉換實驗報告
實驗名稱:模數與數模轉換實驗——溫度測量與顯示控制
實驗目的:
- 學習使用Arduino Mega 2560進行模擬輸入讀取。
- 掌握I2C通信協議,實現與LCD顯示屏的通信。
- 學習根據模擬輸入值進行簡單的數據處理(如溫度轉換)。
- 實現基于溫度值的LED控制。
- 學習按鈕輸入處理,實現顯示模式的切換。
實驗器材:
- Arduino Mega 2560開發板
- I2C LCD顯示屏(16x2)
- 溫度傳感器(如熱敏電阻或模擬溫度傳感器模塊)
- LED燈
- 按鈕開關
- 電阻、導線等輔助元件
- Wokwi在線仿真平臺
實驗原理:
- 模擬輸入讀取:
- 使用Arduino的
analogRead()
函數讀取模擬引腳(如A0)的電壓值,范圍為0-1023。 - 根據參考電壓(通常為5V),將模擬值轉換為實際電壓值。
- 使用Arduino的
- 溫度計算:
- 假設使用簡單的模擬溫度傳感器,其輸出電壓與溫度成線性關系(如每10mV對應1°C)。
- 通過讀取的電壓值計算攝氏溫度,并轉換為華氏溫度。
- I2C通信:
- 使用I2C協議與LCD顯示屏通信,通過
LiquidCrystal_I2C
庫控制LCD顯示內容。
- 使用I2C協議與LCD顯示屏通信,通過
- LED控制:
- 根據溫度值控制LED的亮滅,實現簡單的溫度指示功能。
- 按鈕輸入處理:
- 使用數字引腳讀取按鈕狀態,通過防抖處理實現顯示模式的切換。
實驗電路連接:
- 溫度傳感器:
- 模擬輸出引腳連接到Arduino的A0引腳。
- I2C LCD顯示屏:
- SDA引腳連接到Arduino的20號引腳(SDA)。
- SCL引腳連接到Arduino的21號引腳(SCL)。
- VCC和GND分別連接到5V和GND。
- LED:
- 正極連接到Arduino的7號引腳(通過限流電阻)。
- 負極連接到GND。
- 按鈕:
- 一端連接到Arduino的4號引腳。
- 另一端連接到GND。
- 使用內部上拉電阻或外部上拉電阻確保引腳在未按下時為HIGH狀態。
實驗代碼:
#include <LiquidCrystal_I2C.h>// 定義I2C地址和LCD的行列數
#define I2C_ADDR 0x27 // I2C設備的地址,通常LCD的默認地址為0x27或0x3F
#define LCD_COLUMNS 16 // LCD顯示屏的列數
#define LCD_LINES 2 // LCD顯示屏的行數// 創建一個LiquidCrystal_I2C對象,用于控制LCD顯示屏
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES);// 變量定義
int buttonState; // 用于存儲按鈕的當前狀態(HIGH或LOW)
int x = 0; // 用于切換顯示模式的計數器,初始化為0
const int buttonPin = 4; // 按鈕連接的引腳,使用數字引腳4
float resistance = 0; // 從模擬輸入讀取的電阻值,初始化為0
float pot = 0; // 轉換后的電位器電壓值,初始化為0
float volts = 0; // 暫時未使用的電壓變量(可忽略或用于后續擴展)
float tempC = 0; // 攝氏溫度,初始化為0
float tempF = 0; // 華氏溫度,初始化為0
const int ledPin = 7; // LED連接的引腳,使用數字引腳7void setup() {// 初始化串口通信,波特率設置為9600Serial.begin(9600);// 設置引腳模式pinMode(A0, INPUT); // 模擬輸入A0用于讀取溫度傳感器的值pinMode(ledPin, OUTPUT); // 設置LED引腳為輸出模式pinMode(buttonPin, INPUT_PULLUP); // 設置按鈕引腳為輸入模式,啟用內部上拉電阻// 初始化LCD顯示lcd.init(); // 初始化LCD模塊lcd.backlight(); // 打開LCD背光
}void loop() {// 讀取模擬輸入,計算溫度resistance = analogRead(A0); // 從模擬引腳A0讀取傳感器的模擬值(0-1023)pot = resistance * 5.0 / 1023.0; // 將模擬值轉換為電壓值(假設使用5V參考電壓)tempC = pot / 0.01; // 根據傳感器特性計算攝氏溫度(假設每10mV對應1°C)tempF = tempC * 1.8 + 32; // 將攝氏溫度轉換為華氏溫度// 讀取按鈕狀態buttonState = digitalRead(buttonPin); // 讀取按鈕引腳的電平狀態// 根據按鈕點擊次數切換顯示模式if (buttonState == LOW) { // 如果按鈕被按下(LOW表示按下,因為使用了內部上拉電阻)x++; // 計數器加1delay(250); // 防抖延時,防止按鈕抖動導致多次計數if (x >= 2) { // 如果計數器達到2,重置為0x = 0;}}// 根據x的值決定顯示攝氏或華氏溫度if (x == 0) { // 如果x為0,顯示攝氏溫度lcd.clear(); // 清除LCD顯示內容lcd.setCursor(0, 0); // 設置光標到第1行第1列lcd.print("Temperatura:"); // 顯示"Temperatura:"lcd.setCursor(0, 1); // 設置光標到第2行第1列lcd.print("Graus C:"); // 顯示"Graus C:"lcd.setCursor(9, 1); // 設置光標到第2行第10列lcd.print(tempC); // 顯示攝氏溫度值delay(500); // 延時500毫秒} else if (x == 1) { // 如果x為1,顯示華氏溫度lcd.clear(); // 清除LCD顯示內容lcd.setCursor(0, 0); // 設置光標到第1行第1列lcd.print("Temperatura:"); // 顯示"Temperatura:"lcd.setCursor(0, 1); // 設置光標到第2行第1列lcd.print("Graus F:"); // 顯示"Graus F:"lcd.setCursor(9, 1); // 設置光標到第2行第10列lcd.print(tempF); // 顯示華氏溫度值delay(500); // 延時500毫秒}// 根據溫度控制LEDif (tempC >= 30) { // 如果攝氏溫度大于等于30度digitalWrite(ledPin, HIGH); // 點亮LEDdelay(200); // 延時200毫秒,保持LED點亮狀態}if (tempC <= 25) { // 如果攝氏溫度小于等于25度digitalWrite(ledPin, LOW); // 熄滅LEDdelay(250); // 延時250毫秒,保持LED熄滅狀態}
}
cpp復制代碼
#include <LiquidCrystal_I2C.h> | |
// 定義I2C地址和LCD的行列數 | |
#define I2C_ADDR 0x27 // I2C設備的地址,通常LCD的默認地址為0x27或0x3F | |
#define LCD_COLUMNS 16 // LCD顯示屏的列數 | |
#define LCD_LINES 2 // LCD顯示屏的行數 | |
// 創建一個LiquidCrystal_I2C對象,用于控制LCD顯示屏 | |
LiquidCrystal_I2C lcd(I2C_ADDR, LCD_COLUMNS, LCD_LINES); | |
// 變量定義 | |
int buttonState; // 用于存儲按鈕的當前狀態(HIGH或LOW) | |
int x = 0; // 用于切換顯示模式的計數器,初始化為0 | |
const int buttonPin = 4; // 按鈕連接的引腳,使用數字引腳4 | |
float resistance = 0; // 從模擬輸入讀取的電阻值,初始化為0 | |
float pot = 0; // 轉換后的電位器電壓值,初始化為0 | |
float volts = 0; // 暫時未使用的電壓變量(可忽略或用于后續擴展) | |
float tempC = 0; // 攝氏溫度,初始化為0 | |
float tempF = 0; // 華氏溫度,初始化為0 | |
const int ledPin = 7; // LED連接的引腳,使用數字引腳7 | |
void setup() { | |
// 初始化串口通信,波特率設置為9600 | |
Serial.begin(9600); | |
// 設置引腳模式 | |
pinMode(A0, INPUT); // 模擬輸入A0用于讀取溫度傳感器的值 | |
pinMode(ledPin, OUTPUT); // 設置LED引腳為輸出模式 | |
pinMode(buttonPin, INPUT_PULLUP); // 設置按鈕引腳為輸入模式,啟用內部上拉電阻 | |
// 初始化LCD顯示 | |
lcd.init(); // 初始化LCD模塊 | |
lcd.backlight(); // 打開LCD背光 | |
} | |
void loop() { | |
// 讀取模擬輸入,計算溫度 | |
resistance = analogRead(A0); // 從模擬引腳A0讀取傳感器的模擬值(0-1023) | |
pot = resistance * 5.0 / 1023.0; // 將模擬值轉換為電壓值(假設使用5V參考電壓) | |
tempC = pot / 0.01; // 根據傳感器特性計算攝氏溫度(假設每10mV對應1°C) | |
tempF = tempC * 1.8 + 32; // 將攝氏溫度轉換為華氏溫度 | |
// 讀取按鈕狀態 | |
buttonState = digitalRead(buttonPin); // 讀取按鈕引腳的電平狀態 | |
// 根據按鈕點擊次數切換顯示模式 | |
if (buttonState == LOW) { // 如果按鈕被按下(LOW表示按下,因為使用了內部上拉電阻) | |
x++; // 計數器加1 | |
delay(250); // 防抖延時,防止按鈕抖動導致多次計數 | |
if (x >= 2) { // 如果計數器達到2,重置為0 | |
x = 0; | |
} | |
} | |
// 根據x的值決定顯示攝氏或華氏溫度 | |
if (x == 0) { // 如果x為0,顯示攝氏溫度 | |
lcd.clear(); // 清除LCD顯示內容 | |
lcd.setCursor(0, 0); // 設置光標到第1行第1列 | |
lcd.print("Temperatura:"); // 顯示"Temperatura:" | |
lcd.setCursor(0, 1); // 設置光標到第2行第1列 | |
lcd.print("Graus C:"); // 顯示"Graus C:" | |
lcd.setCursor(9, 1); // 設置光標到第2行第10列 | |
lcd.print(tempC); // 顯示攝氏溫度值 | |
delay(500); // 延時500毫秒 | |
} else if (x == 1) { // 如果x為1,顯示華氏溫度 | |
lcd.clear(); // 清除LCD顯示內容 | |
lcd.setCursor(0, 0); // 設置光標到第1行第1列 | |
lcd.print("Temperatura:"); // 顯示"Temperatura:" | |
lcd.setCursor(0, 1); // 設置光標到第2行第1列 | |
lcd.print("Graus F:"); // 顯示"Graus F:" | |
lcd.setCursor(9, 1); // 設置光標到第2行第10列 | |
lcd.print(tempF); // 顯示華氏溫度值 | |
delay(500); // 延時500毫秒 | |
} | |
// 根據溫度控制LED | |
if (tempC >= 30) { // 如果攝氏溫度大于等于30度 | |
digitalWrite(ledPin, HIGH); // 點亮LED | |
delay(200); // 延時200毫秒,保持LED點亮狀態 | |
} | |
if (tempC <= 25) { // 如果攝氏溫度小于等于25度 | |
digitalWrite(ledPin, LOW); // 熄滅LED | |
delay(250); // 延時250毫秒,保持LED熄滅狀態 | |
} | |
} |
實驗結果與分析:
- 溫度測量:
- 通過模擬輸入讀取溫度傳感器的值,成功計算出攝氏和華氏溫度。
- 溫度值在LCD顯示屏上正確顯示,切換顯示模式功能正常。
- LED控制:
- 當溫度大于等于30°C時,LED點亮。
- 當溫度小于等于25°C時,LED熄滅。
- LED狀態隨溫度變化而正確切換。
- 按鈕輸入處理:
- 按鈕按下后,顯示模式在攝氏和華氏溫度之間切換。
- 防抖處理有效,避免了按鈕抖動導致的多次計數。
實驗結論:
- 本實驗成功實現了模擬輸入讀取、溫度計算、I2C通信、LCD顯示控制、LED控制以及按鈕輸入處理等功能。
- 通過實驗,加深了對Arduino模擬輸入、I2C通信和條件判斷的理解。
- 實驗結果符合預期,驗證了代碼和電路設計的正確性。
改進建議:
- 增加溫度報警功能:當溫度超過設定閾值時,觸發蜂鳴器報警。
- 優化顯示界面:增加更多信息,如溫度趨勢、最大值、最小值等。
- 使用更精確的溫度傳感器:提高溫度測量的準確性和穩定性。
實驗報告撰寫人: [您的姓名]
日期: [填寫日期]
以下是一個關于在 Wokwi 平臺上使用 Arduino Mega 2560 進行模數與數模轉換的非常詳細的教程:
一、實驗準備
-
硬件準備
- Arduino Mega 2560 開發板
- 模擬傳感器(如電位器、光敏電阻等)
- 數字傳感器(如按鈕開關)
- LED 燈
- 電阻、導線等輔助元件
-
軟件準備
- Wokwi 在線仿真平臺(無需實際硬件,直接在瀏覽器中運行)
- Arduino IDE(用于編寫和上傳代碼)
二、模數轉換(ADC)
-
原理
- 模數轉換(ADC)是將模擬信號轉換為數字信號的過程。
- Arduino Mega 2560 具有 16 個模擬輸入引腳(A0~A15),可以將 0~5V 的模擬電壓轉換為 0~1023 的整數形式。
-
實驗步驟
- 連接電路:在 Wokwi 平臺上,將電位器的一端連接到 5V,另一端連接到 GND,中間引腳連接到 Arduino Mega 2560 的 A0 引腳。
- 編寫代碼:使用?
analogRead()
?函數讀取 A0 引腳的模擬值,并將其轉換為電壓值或進行其他處理。
void setup() {Serial.begin(9600); // 初始化串口通信 }void loop() {int sensorValue = analogRead(A0); // 讀取 A0 引腳的模擬值float voltage = sensorValue * (5.0 / 1023.0); // 將模擬值轉換為電壓值Serial.println(voltage); // 打印電壓值到串口監視器delay(1000); // 延時 1 秒 }
cpp復制代碼
void setup() {
Serial.begin(9600); // 初始化串口通信
}
void loop() {
int sensorValue = analogRead(A0); // 讀取 A0 引腳的模擬值
float voltage = sensorValue * (5.0 / 1023.0); // 將模擬值轉換為電壓值
Serial.println(voltage); // 打印電壓值到串口監視器
delay(1000); // 延時 1 秒
}
- 上傳代碼:在 Arduino IDE 中編寫并上傳代碼到 Wokwi 平臺上的 Arduino Mega 2560。
- 觀察結果:在 Wokwi 平臺的串口監視器中查看打印的電壓值,并觀察其隨電位器旋轉而變化。
三、數模轉換(DAC)
-
原理
- 數模轉換(DAC)是將數字信號轉換為模擬信號的過程。
- Arduino Mega 2560 本身沒有直接的 DAC 輸出引腳,但可以通過 PWM(脈沖寬度調制)來模擬 DAC 輸出。
-
實驗步驟
- 連接電路:將 LED 的正極連接到 Arduino Mega 2560 的一個 PWM 引腳(如 9 號引腳),負極連接到 GND。
- 編寫代碼:使用?
analogWrite()
?函數輸出 PWM 信號,控制 LED 的亮度。
void setup() {pinMode(9, OUTPUT); // 設置 9 號引腳為輸出模式 }void loop() {for (int i = 0; i <= 255; i++) {analogWrite(9, i); // 輸出 PWM 信號,控制 LED 亮度delay(10); // 延時 10 毫秒}for (int i = 255; i >= 0; i--) {analogWrite(9, i); // 輸出 PWM 信號,控制 LED 亮度delay(10); // 延時 10 毫秒} }
cpp復制代碼
void setup() {
pinMode(9, OUTPUT); // 設置 9 號引腳為輸出模式
}
void loop() {
for (int i = 0; i <= 255; i++) {
analogWrite(9, i); // 輸出 PWM 信號,控制 LED 亮度
delay(10); // 延時 10 毫秒
}
for (int i = 255; i >= 0; i--) {
analogWrite(9, i); // 輸出 PWM 信號,控制 LED 亮度
delay(10); // 延時 10 毫秒
}
}
- 上傳代碼:在 Arduino IDE 中編寫并上傳代碼到 Wokwi 平臺上的 Arduino Mega 2560。
- 觀察結果:觀察 LED 的亮度隨 PWM 信號的變化而逐漸增強和減弱。
四、綜合實驗:溫度測量與顯示
-
實驗目的
- 使用模擬溫度傳感器測量溫度,并通過 LCD 顯示屏顯示溫度值。
-
實驗步驟
- 連接電路:在 Wokwi 平臺上,連接模擬溫度傳感器到 A0 引腳,連接 I2C LCD 顯示屏到 SDA 和 SCL 引腳,連接 LED 到 PWM 引腳,連接按鈕到數字引腳。
- 編寫代碼:讀取溫度傳感器的值,計算溫度,并通過 LCD 顯示屏顯示溫度值。同時,根據溫度值控制 LED 的亮度,并通過按鈕切換顯示模式(攝氏溫度或華氏溫度)。
#include <LiquidCrystal_I2C.h>LiquidCrystal_I2C lcd(0x27, 16, 2); // 初始化 LCD 顯示屏int buttonState; int x = 0; const int buttonPin = 4; float resistance = 0; float pot = 0; float tempC = 0; float tempF = 0; const int ledPin = 9;void setup() {Serial.begin(9600);pinMode(A0, INPUT);pinMode(ledPin, OUTPUT);pinMode(buttonPin, INPUT_PULLUP);lcd.init();lcd.backlight(); }void loop() {resistance = analogRead(A0);pot = resistance * 5.0 / 1023.0;tempC = pot / 0.01;tempF = tempC * 1.8 + 32;buttonState = digitalRead(buttonPin);if (buttonState == LOW) {x++;delay(250);if (x >= 2) {x = 0;}}if (x == 0) {lcd.clear();lcd.setCursor(0, 0);lcd.print("Temperatura:");lcd.setCursor(0, 1);lcd.print("Graus C:");lcd.setCursor(9, 1);lcd.print(tempC);} else if (x == 1) {lcd.clear();lcd.setCursor(0, 0);lcd.print("Temperatura:");lcd.setCursor(0, 1);lcd.print("Graus F:");lcd.setCursor(9, 1);lcd.print(tempF);}if (tempC >= 30) {analogWrite(ledPin, 255);} else if (tempC <= 25) {analogWrite(ledPin, 0);} else {analogWrite(ledPin, map(tempC, 25, 30, 0, 255));}delay(500); }
cpp復制代碼
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // 初始化 LCD 顯示屏
int buttonState;
int x = 0;
const int buttonPin = 4;
float resistance = 0;
float pot = 0;
float tempC = 0;
float tempF = 0;
const int ledPin = 9;
void setup() {
Serial.begin(9600);
pinMode(A0, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
lcd.init();
lcd.backlight();
}
void loop() {
resistance = analogRead(A0);
pot = resistance * 5.0 / 1023.0;
tempC = pot / 0.01;
tempF = tempC * 1.8 + 32;
buttonState = digitalRead(buttonPin);
if (buttonState == LOW) {
x++;
delay(250);
if (x >= 2) {
x = 0;
}
}
if (x == 0) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperatura:");
lcd.setCursor(0, 1);
lcd.print("Graus C:");
lcd.setCursor(9, 1);
lcd.print(tempC);
} else if (x == 1) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temperatura:");
lcd.setCursor(0, 1);
lcd.print("Graus F:");
lcd.setCursor(9, 1);
lcd.print(tempF);
}
if (tempC >= 30) {
analogWrite(ledPin, 255);
} else if (tempC <= 25) {
analogWrite(ledPin, 0);
} else {
analogWrite(ledPin, map(tempC, 25, 30, 0, 255));
}
delay(500);
}
- 上傳代碼:在 Arduino IDE 中編寫并上傳代碼到 Wokwi 平臺上的 Arduino Mega 2560。
- 觀察結果:觀察 LCD 顯示屏上顯示的溫度值,以及 LED 的亮度隨溫度的變化。通過按鈕切換顯示模式,觀察攝氏溫度和華氏溫度之間的切換。
五、注意事項
- 電路連接:確保電路連接正確,避免短路或接反。
- 代碼調試:在上傳代碼前,仔細檢查代碼邏輯和語法錯誤。
- 觀察結果:在 Wokwi 平臺上觀察實驗結果,確保與預期一致。
通過本教程,您可以掌握在 Wokwi 平臺上使用 Arduino Mega 2560 進行模數與數模轉換的基本方法和技巧。