当前位置: 首页 > news >正文

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连接的引脚,使用数字引脚7
 
void setup() {
  // 初始化串口通信,波特率设置为9600
  Serial.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++;                               // 计数器加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熄灭状态
  }
}
详细讲解
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连接的引脚,使用数字引脚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熄灭状态
  }
}

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 进行模数与数模转换的基本方法和技巧。


相关文章:

  • 设置git拉取的文件换行格式
  • Codeforces Round 1013 (Div. 3)
  • 企业入驻成都国际数字影像产业园,可享150多项专业服务
  • AwesomeQt分享(含源码)
  • Leetcode 路径总和 III
  • 振弦采集读数仪 智能型 支持振弦、温度、电压、电流测量,无线传输 自动化操作 适用地质灾害与土木工程监测
  • Java条码与二维码生成技术详解
  • 3.2 罗必达法则
  • 23种设计模式-状态(State)设计模式
  • Vala编成语言教程-构造函数和析构函数
  • SQL注入零基础学习二MYSQL手工注入
  • 23种设计模式中的中介者模式
  • 腾讯pcg客户端一面
  • 【移动应用开发】任务4 创建系统主界面
  • 【AVRCP】深度解析蓝牙高速(AMP)在封面艺术传输中的应用:低延迟体验的工程实践
  • java使用小知识合集(持续更新中)
  • etcd性能测试
  • 前端空白/红幕报错 undefined
  • Tensorrt的安装、转化、以及推理
  • 李飞飞、吴佳俊团队新作:FlowMo如何以零卷积、零对抗损失实现ImageNet重构新巅峰
  • 碧桂园境外债务重组:相当于现有公众票据本金额逾50%的持有人已加入协议
  • 湖南省邵阳市副市长仇珂静主动向组织交代问题,接受审查调查
  • 定位真核生物起源于约27.2亿年前,华东师大团队在《自然》发文
  • 民生访谈|摆摊设点、公园搭帐篷、行道树飘絮,管理难题怎么解?
  • 潘功胜发布会答问五大要点:除了降准降息,这些政策“含金量”也很高
  • 魔都眼|上海多家商场打开绿色通道,助力外贸出口商品转内销