wokwi arduino mega 2560 - 模數與數模轉換AD和DA

截圖:

20.53 黃燈滅 不報警

205.77 黃燈亮 報警

鏈接:

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 模數與數模轉換實驗報告


實驗名稱:模數與數模轉換實驗——溫度測量與顯示控制

實驗目的
  1. 學習使用Arduino Mega 2560進行模擬輸入讀取。
  2. 掌握I2C通信協議,實現與LCD顯示屏的通信。
  3. 學習根據模擬輸入值進行簡單的數據處理(如溫度轉換)。
  4. 實現基于溫度值的LED控制。
  5. 學習按鈕輸入處理,實現顯示模式的切換。

實驗器材
  1. Arduino Mega 2560開發板
  2. I2C LCD顯示屏(16x2)
  3. 溫度傳感器(如熱敏電阻或模擬溫度傳感器模塊)
  4. LED燈
  5. 按鈕開關
  6. 電阻、導線等輔助元件
  7. Wokwi在線仿真平臺

實驗原理
  1. 模擬輸入讀取
    • 使用Arduino的analogRead()函數讀取模擬引腳(如A0)的電壓值,范圍為0-1023。
    • 根據參考電壓(通常為5V),將模擬值轉換為實際電壓值。
  2. 溫度計算
    • 假設使用簡單的模擬溫度傳感器,其輸出電壓與溫度成線性關系(如每10mV對應1°C)。
    • 通過讀取的電壓值計算攝氏溫度,并轉換為華氏溫度。
  3. I2C通信
    • 使用I2C協議與LCD顯示屏通信,通過LiquidCrystal_I2C庫控制LCD顯示內容。
  4. LED控制
    • 根據溫度值控制LED的亮滅,實現簡單的溫度指示功能。
  5. 按鈕輸入處理
    • 使用數字引腳讀取按鈕狀態,通過防抖處理實現顯示模式的切換。

實驗電路連接
  1. 溫度傳感器
    • 模擬輸出引腳連接到Arduino的A0引腳。
  2. I2C LCD顯示屏
    • SDA引腳連接到Arduino的20號引腳(SDA)。
    • SCL引腳連接到Arduino的21號引腳(SCL)。
    • VCC和GND分別連接到5V和GND。
  3. LED
    • 正極連接到Arduino的7號引腳(通過限流電阻)。
    • 負極連接到GND。
  4. 按鈕
    • 一端連接到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熄滅狀態
}
}

實驗結果與分析
  1. 溫度測量
    • 通過模擬輸入讀取溫度傳感器的值,成功計算出攝氏和華氏溫度。
    • 溫度值在LCD顯示屏上正確顯示,切換顯示模式功能正常。
  2. LED控制
    • 當溫度大于等于30°C時,LED點亮。
    • 當溫度小于等于25°C時,LED熄滅。
    • LED狀態隨溫度變化而正確切換。
  3. 按鈕輸入處理
    • 按鈕按下后,顯示模式在攝氏和華氏溫度之間切換。
    • 防抖處理有效,避免了按鈕抖動導致的多次計數。

實驗結論
  • 本實驗成功實現了模擬輸入讀取、溫度計算、I2C通信、LCD顯示控制、LED控制以及按鈕輸入處理等功能。
  • 通過實驗,加深了對Arduino模擬輸入、I2C通信和條件判斷的理解。
  • 實驗結果符合預期,驗證了代碼和電路設計的正確性。

改進建議
  1. 增加溫度報警功能:當溫度超過設定閾值時,觸發蜂鳴器報警。
  2. 優化顯示界面:增加更多信息,如溫度趨勢、最大值、最小值等。
  3. 使用更精確的溫度傳感器:提高溫度測量的準確性和穩定性。

實驗報告撰寫人: [您的姓名]
日期: [填寫日期]


以下是一個關于在 Wokwi 平臺上使用 Arduino Mega 2560 進行模數與數模轉換的非常詳細的教程:

一、實驗準備

  1. 硬件準備

    • Arduino Mega 2560 開發板
    • 模擬傳感器(如電位器、光敏電阻等)
    • 數字傳感器(如按鈕開關)
    • LED 燈
    • 電阻、導線等輔助元件
  2. 軟件準備

    • Wokwi 在線仿真平臺(無需實際硬件,直接在瀏覽器中運行)
    • Arduino IDE(用于編寫和上傳代碼)

二、模數轉換(ADC)

  1. 原理

    • 模數轉換(ADC)是將模擬信號轉換為數字信號的過程。
    • Arduino Mega 2560 具有 16 個模擬輸入引腳(A0~A15),可以將 0~5V 的模擬電壓轉換為 0~1023 的整數形式。
  2. 實驗步驟

    • 連接電路:在 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)

  1. 原理

    • 數模轉換(DAC)是將數字信號轉換為模擬信號的過程。
    • Arduino Mega 2560 本身沒有直接的 DAC 輸出引腳,但可以通過 PWM(脈沖寬度調制)來模擬 DAC 輸出。
  2. 實驗步驟

    • 連接電路:將 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 信號的變化而逐漸增強和減弱。

四、綜合實驗:溫度測量與顯示

  1. 實驗目的

    • 使用模擬溫度傳感器測量溫度,并通過 LCD 顯示屏顯示溫度值。
  2. 實驗步驟

    • 連接電路:在 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 的亮度隨溫度的變化。通過按鈕切換顯示模式,觀察攝氏溫度和華氏溫度之間的切換。

五、注意事項

  1. 電路連接:確保電路連接正確,避免短路或接反。
  2. 代碼調試:在上傳代碼前,仔細檢查代碼邏輯和語法錯誤。
  3. 觀察結果:在 Wokwi 平臺上觀察實驗結果,確保與預期一致。

通過本教程,您可以掌握在 Wokwi 平臺上使用 Arduino Mega 2560 進行模數與數模轉換的基本方法和技巧。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/76125.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76125.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/76125.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何使不同的窗體控件,適應不同分辨率的屏幕?

問題 當屏幕分辨率提高或降低時&#xff0c;原分辨率顯示正常的控件&#xff0c;將變得很小或很大&#xff0c;字體也變得太大或太小。 解決辦法 當分辨率變化時&#xff0c;采用遞歸的方法&#xff0c;對所有的控件放大或縮小。 public static void MainForm_Load(object s…

虛擬機(一):Java 篇

虛擬機&#xff08;一&#xff09;&#xff1a;Java 篇 虛擬機&#xff08;二&#xff09;&#xff1a;Android 篇 架構 運行時數據區&#xff1a; 棧&#xff1a; 堆&#xff1a; 堆&#xff1a;通過new創建的對象都在堆中分配。OutOfMemoryError TLAB(Thread Local All…

硬件基礎--14_電功率

電功率 電功率:指電流在單位時間內做的功(表示用電器消耗電能快慢的一個物理量)。 單位:瓦特(W)&#xff0c;簡稱瓦。 公式:PUI(U為電壓&#xff0c;單位為V&#xff0c;i為電流&#xff0c;單位為A&#xff0c;P為電功率&#xff0c;單位為W)。 單位換算:進位為1000&#xff…

更高的效率——MyBatis-plus

一、什么是MyBatis-plus&#xff1f; MyBatis-plus是MyBatis的增強工具&#xff0c;在MyBatis基礎上只做增強不做改變&#xff0c;可以簡化基礎的CRUD操作&#xff08;通過繼承 BaseMapper 接口可直接使用預定義的增刪改查方法&#xff09; 二、MyBatis-plus快速入門 2.1 準備…

【算法基礎】遞歸與遞推

目錄 遞歸實現指數型枚舉 題目 算法解析 遞歸實現排列型枚舉 題目 算法解析 費解的開關 題目 算法解析 遞歸實現組合型枚舉 題目 算法解析 帶分數 題目 算法解析 飛行員兄弟 題目 算法解析 翻硬幣 題目 算法解析 遞歸實現指數型枚舉 題目 算法…

Java 大視界 -- Java 大數據在智慧礦山設備故障預測與預防性維護中的技術實現(163)

&#x1f496;親愛的朋友們&#xff0c;熱烈歡迎來到 青云交的博客&#xff01;能與諸位在此相逢&#xff0c;我倍感榮幸。在這飛速更迭的時代&#xff0c;我們都渴望一方心靈凈土&#xff0c;而 我的博客 正是這樣溫暖的所在。這里為你呈上趣味與實用兼具的知識&#xff0c;也…

綜合實驗一

實驗拓撲圖&#xff1a; 實驗要求&#xff1a; 1,內網IP地址使用172.16.0.0/16分配 2,SW1和SW2之間互為備份 3,VRRP/STP/VLAN/Eth-trunk均使用 4,所有PC均通過DHCP獲取IP地址 5,ISP只能配置IP地址 6,所有電腦可以正常訪問ISP路由器環回 實驗步驟&#xff1a; 步驟1&…

snort檢測端口掃描工具

前面兩篇文章介紹了snort3相關知識和Ubuntu上的安裝配置Ubuntu22.04上Snort3的安裝與基本配置 -CSDN博客 和Snort規則定義并進行的簡單的測試Snort規則定義與測試 -CSDN博客&#xff0c;接下來我將介紹如何編寫一個簡單的檢測端口掃描的規則進行檢測 一、實驗環境 攻擊機&…

【行測】資料分析

> 作者&#xff1a;?舊言~ > 座右銘&#xff1a;讀不在三更五鼓&#xff0c;功只怕一曝十寒。 > 目標&#xff1a;掌握 資料分析 基本題型&#xff0c;并能運用到例題中。 > 毒雞湯&#xff1a;有些事情&#xff0c;總是不明白&#xff0c;所以我不會堅持。早安! …

工地揚塵監測儀:守護藍天白云的重要工具

在城市化進程加速推進的背景下&#xff0c;建筑工地數量呈現持續增長態勢&#xff0c;揚塵污染問題亦愈發顯著。揚塵不僅對空氣質量造成負面影響&#xff0c;更對周邊居民的健康狀況及生活質量構成威脅。在此情形下&#xff0c;工地揚塵監測儀作為建筑工地環境管理中不可或缺的…

Windows10 下QT社區版的安裝記錄

0. 介紹 踩了一些坑&#xff0c;記錄一下&#xff0c;主要是鏡像源的問題。 1. 安裝 首先你先要在qt官網上有一個自己的賬號。 然后點右上角的下載 打開后&#xff0c;我們需要選擇社區版本&#xff1b;如果選擇直接下載的話&#xff0c;出來的就是商業版本。 點開后&…

自定義一個C語言字符串取整函數

一、字符串取整的主要思路 1、遍歷每個字符&#xff1b; 2、獲得0到9的字符對應的整數值&#xff1b; 3、把對應位置的十進制權重相乘&#xff1b; 4、把所有的相乘結果相加&#xff1b; 5、返回相加結果&#xff1b; 二、主要代碼 // 主要是把十進制的整數字符轉成十進制變量值…

VS Code C/C++項目設置launch.json中的environment參數解決支持庫路徑問題

問題描述 Windows 11 VS Code C/C 開發環境搭建分別寫了c和cpp兩個示例代碼&#xff0c;在運行過程中c代碼沒有發現問題&#xff08;可能簡單&#xff0c;沒有用到太多支持&#xff09;&#xff0c;但使用了stl的cpp代碼并沒有運行出來&#xff0c;如下圖&#xff1a; 出問題…

C語言pthread庫的互斥鎖使用案例

一、函數約定 1、初始化鎖 int pthread_mutex_init(pthread_mutex_t* m, const pthread_mutexattr_t* attr) 2、加鎖 int pthread_mutex_lock(pthread_mutex_t* m); 3、解鎖 int pthread_mutex_unlock(pthread_mutex_t* m); 4、銷毀 int pthread_mutex_de…

隨機2級域名引導頁HTML源碼

源碼介紹 隨機2級域名引導頁HTML源碼,每次點進去都隨機一個域名前綴。 修改跳轉域名在 350 行代碼&#xff0c;源碼由HTMLCSSJS組成&#xff0c;記事本打開源碼文件可以進行內容文字之類的修改&#xff0c;雙擊html文件可以本地運行 效果預覽 源碼免費獲取 隨機2級域名引導頁…

NQA 網絡質量分析協議

協議信息 網絡質量分析協議&#xff0c;支持 icmp 等協議測試 配置實現 華為 創建 ICMP 測試實例 NQA 與靜態路由聯動 ?ip route-static 10.1.1.0 24 10.1.2.1 track nqa admin test1??

Nginx — nginx.pid打開失敗及失效的解決方案

1、場景一&#xff1a;nginx.pid文件或者目錄不存在 1.1、報錯詳情 [rootmaster conf]# ../sbin/nginx -s reload nginx: [error] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory) #nginx.pid文件或目錄不存在。 原因&#xff1a; 1、文件…

Gitee批量刪除倉庫

Gitee批量刪除倉庫 文章目錄 Gitee批量刪除倉庫生成一個GiteeToken通過Python調用Gitee API參考文檔 生成一個GiteeToken 右上角下拉->設置->安全設置->私人令牌->生成新令牌&#xff0c;注意將令牌保存&#xff08;只會出現一次&#xff09; 通過Python調用Gite…

AireOS WLC安裝License報錯

1.概述 本文主要記錄在AireOS的WLC上安裝License錯誤的情況。License的類型也是傳統的License&#xff0c;因為設備的型號已經EOL&#xff0c;相關的資料應該較少&#xff0c;這里進行可能問題的記錄。 2.適用場景 型號&#xff1a;WLC2500&#xff0c;WLC5508 License類型…

利用 Excel 函數隨機抽取(附示例)

RANDARRAY 是 Excel 365 和 Excel 2021 引入的一個函數&#xff0c;用于生成一個隨機數數組。它的語法如下&#xff1a; RANDARRAY([rows], [columns], [min], [max], [whole_number])參數詳解 rows&#xff08;可選&#xff09; 要生成的行數&#xff08;默認值為 1&#xff…