Arduino 编程基础实践学习笔记教程

一、前言

本教程围绕多段 Arduino 代码展开,涵盖引脚配置、输入输出控制、串口通信、循环结构、模拟信号处理等核心知识点,结合代码示例与详细注释,帮助你快速上手 Arduino 开发。

二、环境准备

确保已安装 Arduino IDE,可从Arduino 官方网站下载对应系统版本。将 Arduino 开发板通过 USB 连接到电脑,安装好对应开发板驱动(如 Uno 等常见开发板一般自动识别) 。

三、代码实践与知识点解析

(一)按钮控制风扇启停(sketch_aug10a.ino )

// 定义风扇模块连接的引脚为3(数字输出引脚)
// 注:数字引脚3、5、6、9、10、11通常支持PWM输出,适合控制电机类设备,这里用普通数字输出也可控制启停
const int motorPin = 3;  

// 定义按钮模块连接的引脚为A0(此处A0作为数字输入引脚使用,虽然A0是模拟引脚,但可当数字引脚用)
const int buttonPin = A0;  

// setup函数:初始化设置,Arduino上电或复位后会先执行一次
void setup() {
  // 设置风扇引脚为输出模式,让其能向外输出电信号控制风扇转动或停止
  pinMode(motorPin, OUTPUT);  
  // 设置按钮引脚为输入模式,使Arduino能读取按钮的按下/未按下状态(对应电平高低)
  pinMode(buttonPin, INPUT);  
}

// loop函数:重复执行,Arduino主循环,setup执行完后会一直循环执行loop里的代码
void loop() {
  // 读取按钮引脚的电平状态:HIGH表示未按下(默认高电平,按钮未按时引脚电平由内部上拉/外部电路决定,这里假设默认高),LOW表示按下
  if (digitalRead(buttonPin) == HIGH) {  
    // 若按钮未按下,向风扇引脚输出高电平(1等价于HIGH),风扇获得工作电压,开始工作
    digitalWrite(motorPin, 1);  
  } else {
    // 若按钮按下,向风扇引脚输出低电平(0等价于LOW),风扇断电,停止工作
    digitalWrite(motorPin, 0);  
  }
}

知识点

  • pinMode(pin, mode):配置引脚模式,OUTPUT用于输出控制(如控制风扇、LED 等),INPUT用于读取外部信号(如按钮状态 )。
  • digitalRead(pin):读取数字引脚电平,返回HIGH(高电平,一般对应 5V 或 3.3V 等)或LOW(低电平,一般对应 0V )。
  • digitalWrite(pin, value):向数字引脚输出电平,valueHIGHLOW(也可用 1 和 0 替代 )。

(二)电位器控制电机转速(sketch_aug10b 系列 )

原始版(含拼写错误,了解逻辑流程)

// 定义电位器连接的模拟输入引脚A0,电位器可改变接入电路的电阻,进而改变引脚输入电压
const int potPin = A0;  
// 定义电机连接引脚为3(支持PWM输出,用于调速,这里变量名“moterPin”是拼写错误,正确是“motorPin” )
const int moterPin = 3;  

// setup函数初始化
void setup() {
  // 设置电位器引脚为输入模式,读取其电压对应的模拟值
  pinMode(potPin, INPUT);  
  // 设置电机引脚为输出模式,输出PWM信号控制电机
  pinMode(moterPin, OUTPUT);  
  // 初始化串口通信,波特率9600,用于在串口监视器查看数据
  Serial.begin(9600);  
}

// 存储电位器读取值的变量
int val;  

// loop函数循环执行
void loop() {
  // 读取电位器的模拟值,范围0~1023(对应输入电压0~5V,不同开发板参考电压可能有差异 )
  val = analogRead(potPin);  
  // 将0~1023的范围映射到0~255(PWM输出的有效范围,PWM占空比对应 )
  val = map(val, 0, 1023, 0, 255);  
  // 在串口监视器打印映射后的值,方便调试观察
  Serial.println(val);  
  // 输出PWM信号到电机引脚,控制电机转速,val越大转速越高(0对应停转,255对应最大转速 )
  analogWrite(moterPin, val);  
  // 延迟20毫秒,降低读取和输出频率,避免数据变化太快,也给电机稳定响应时间
  delay(20);  
}

注释修正版(修正拼写,清晰说明 )

// 定义 potentiometer(电位器)连接的引脚为 A0(模拟输入引脚,可读取连续变化的电压值 )
const int potPin = A0;  
// 定义电机(或舵机等执行器)连接的引脚为 3(支持 PWM 输出的数字引脚,用于精准调速 )
// 原代码"moterPin"为拼写错误,修正为"motorPin"
const int motorPin = 3;  

// 初始化函数,Arduino上电或复位时运行一次
void setup() { 
  // 设置电位器引脚为输入模式,用于读取外部电压信号对应的模拟值
  pinMode(potPin, INPUT);  
  // 设置电机引脚为输出模式,输出PWM信号控制电机转速
  pinMode(motorPin, OUTPUT);  
  // 初始化串口通信,波特率9600,与电脑串口监视器通信
  Serial.begin(9600);  
}

// 定义变量用于存储读取到的电位器数值
int val;  

// 主循环函数,Arduino会反复执行该函数内的代码
void loop() { 
  // 读取电位器的模拟值,范围0~1023(对应输入电压0~5V )
  val = analogRead(potPin);  
  // 将0~1023的范围映射到0~255(PWM输出的有效范围,让电位器调节与电机转速范围匹配 )
  val = map(val, 0, 1023, 0, 255);  
  // 通过串口打印映射后的值,在串口监视器查看,方便调试
  Serial.println(val);  
  // 将映射后的值通过 PWM 信号输出到电机引脚,控制电机转速
  // PWM 值越大,电机转速越高(0 对应停止,255 对应最大转速 )
  analogWrite(motorPin, val);  
  // 延迟 20 毫秒,降低读取频率,避免数据刷新过快,也让电机转速变化更平稳
  delay(20);  
}

知识点

  • analogRead(pin):读取模拟引脚的电压值,返回 0~1023 的整数,对应 0~参考电压(如 5V )。
  • map(value, fromLow, fromHigh, toLow, toHigh):映射函数,将一个范围的值转换到另一个范围,这里把电位器 0~1023 映射到 PWM 可用的 0~255 。
  • analogWrite(pin, value):向支持 PWM 的引脚输出占空比可变的信号,value范围 0~255,对应占空比 0%~100% ,实现电机等设备调速。
  • Serial.begin(baudrate)Serial.println(value):串口通信初始化和打印数据,用于调试,在 Arduino IDE 点击“工具” - “串口监视器”打开查看。

(三)循环结构练习(sketch_aug10c 系列 )

forwhile循环示例

// setup函数初始化
void setup() {
  // 初始化串口通信,波特率9600,用于打印循环数据
  Serial.begin(9600);  

  // for循环:初始化i为0,条件i <= 5,每次循环i自增1,循环体打印i的值
  for (int i = 0; i <= 5; i++) { 
    // 串口打印i,每行一个,串口监视器会依次显示0、1、2、3、4、5 
    Serial.println(i);  
  }

  // 打印分隔线,方便区分for和while循环的输出
  Serial.println("-------------------------");  

  // 定义while循环的变量i,初始化为0
  int i = 0;  

  // while循环:条件i <= 6,成立则执行循环体,否则退出
  while (i <= 6) { 
    // 串口打印当前i的值,会依次显示0、1、2、3、4、5、6 
    Serial.println(i);  
    // 改变循环变量,i自增1,否则会陷入死循环(条件永远成立 )
    i += 1;  
  }
}

// loop函数,这里为空,若有代码会循环执行
void loop() {
  // put your main code here, to run repeatedly:
  // 可在此添加需要持续执行的任务,比如不断检测传感器、控制设备等
}

简化loop版(逻辑同上,loop更简洁 )

void setup() {
  Serial.begin(9600);
  for (int i = 0; i <= 5; i++) { 
    Serial.println(i);
  }
  Serial.println("-------------------------");
  int i = 0;
  while (i <= 6) { 
    Serial.println(i);
    i += 1; 
  }
}

// loop函数为空,不执行重复任务
void loop() {

}

for循环流程讲解示例(带手写标记思路 )

void setup() { 
  Serial.begin(9600); 

  // for循环:初始化i为1,条件i <= 5,每次循环i自增1,打印i 
  for (int i = 1; i <= 5; i++) { 
    // 串口依次打印1、2、3、4、5 
    Serial.println(i);  
  } 

  // 打印分隔线
  Serial.println("-------------------------"); 
} 

// loop函数为空
void loop() { 

} 
// 手写内容(辅助理解:比如想象执行步骤,初始化i=1→判断i<=5→执行打印→i自增→重复直到i=6不满足条件 )

条件显示不全的for循环示例(推测完整逻辑 )

void setup() { 
  Serial.begin(9600); 

  // for循环:初始化i为1,推测条件是i <= 5(因常见练习场景 ),每次循环i自增1,打印i 
  for (int i = 1; i [显示不全,推测是<= 5]; i++) { 
    // 串口打印i,若条件成立,会打印1、2、3、4、5 
    Serial.println(i);  
  } 

  // 打印分隔线
  Serial.println("-------------------------"); 
} 

// loop函数为空
void loop() { 

} 

知识点

  • for循环语法:for(初始化表达式; 条件表达式; 更新表达式),初始化循环变量,判断条件,每次循环更新变量,常用于已知循环次数的场景。
  • while循环语法:while(条件表达式),先判断条件,成立则执行循环体,需注意在循环体里更新条件变量,否则易死循环,适用于循环次数不确定,由条件控制的情况。
  • 变量作用域:for循环里定义的int i是局部变量,作用域仅限for循环内;后面while循环重新定义int i是新的局部变量,互不影响(实际编码注意合理命名,避免混淆 )。

四、综合实践与拓展

  1. 硬件连接实践
    • 按代码里的引脚定义,将按钮接A0和 GND(或对应电平电路,保证按下为低电平 )、风扇(或电机 )接引脚 3 和 GND 、电位器按“三个引脚,两边接电源和地,中间接 A0”的方式连接(具体电位器引脚不同,一般中间是信号输出 )。
    • 连接好后,上传代码(Arduino IDE 点击“上传”按钮 ),在串口监视器(若涉及串口)查看数据,操作按钮、转动电位器观察设备(风扇、电机 )反应。
  2. 拓展修改
    • 给按钮控制风扇的代码添加功能,比如长按按钮切换风扇转速(结合for循环或多个digitalWrite输出不同电平组合,若风扇支持多档 )。
    • 优化电位器控制电机的代码,加入转速限制,比如让电机最低转速不为 0 ,调整map函数的映射范围。
    • 利用循环结构,让设备按特定规律工作,比如让电机先高速转 3 秒,再低速转 2 秒,循环执行(结合delayanalogWrite )。

五、总结

通过以上代码实践,你掌握了 Arduino 引脚配置(数字、模拟输入输出 )、串口通信调试、循环结构(for/while )、模拟信号处理与 PWM 控制等核心技能。多动手修改代码、连接不同硬件(如换成 LED 、舵机等 ),不断拓展实践,就能更熟练运用 Arduino 实现创意项目啦,比如智能小车调速、环境监测设备控制等,加油探索吧!

0 条评论

目前还没有评论...