Arduino 学习笔记教程:从基础到实践,培养逻辑思维

一、课程目标

通过 Arduino 实践操作与历史人物精神关联,学习数字/模拟输出、变量、串口通信等知识,理解坚持探索、追求真理的科研精神,提升逻辑思维与实践能力 。

二、硬件准备

Arduino 开发板(如 Uno 型号 )、LED 灯、电位器(模拟输入器件 )、杜邦线、USB 数据线 。

三、软件准备

Arduino IDE(官网下载对应系统版本安装 )。

四、基础概念与核心逻辑

(一)变量与常量

  • 常量:用 const 修饰,值运行中不变。如 const int ledPin = 3;ledPin 代表 LED 引脚编号,设为常量避免误改。
  • 变量:存储可变数据,像 int val;val 存模拟输入值,随电位器调节变化 。

(二)函数作用

  • setup():初始化配置,程序启动执行一次。用于设置引脚模式(输入/输出 )、串口初始化等,如 pinMode(ledPin, OUTPUT); 设引脚为输出 。
  • loop():循环执行代码,实现持续功能(如循环读取传感器、控制设备 )。

(三)数字与模拟输出

  • 数字输出digitalWrite(pin, value)valueHIGH(高电平,点亮 LED )或 LOW(低电平,熄灭 LED ),控制 LED 简单亮灭 。
  • 模拟输出analogWrite(pin, value)value 范围 0 - 255,实现 LED 亮度渐变等效果(如 value 越大,亮度越高 )。

(四)串口通信

Serial.begin(9600); 初始化串口,波特率 9600;Serial.print()/Serial.println() 向串口监视器输出信息,用于调试(如打印传感器数值 )。

五、实践案例

案例 1:LED 基本控制(数字输出 )

// 定义 LED 引脚为常量,值固定为 3
const int ledPin = 3; 

void setup() {
  // 设置 ledPin 为输出模式,让开发板能向 LED 送电控制亮灭
  pinMode(ledPin, OUTPUT); 
}

void loop() {
  // 输出高电平,点亮 LED
  digitalWrite(ledPin, HIGH); 
  // 延时 1 秒,保持点亮状态
  delay(1000); 
  // 输出低电平,熄灭 LED
  digitalWrite(ledPin, LOW); 
  // 延时 1 秒,保持熄灭状态,循环实现“亮 1 秒、灭 1 秒”
  delay(1000); 
}

逻辑setup 设引脚模式,loop 循环让 LED 亮灭交替,delay 控制亮灭时长 。

案例 2:LED 亮度调节(模拟输出 + 模拟输入 )

// LED 引脚常量
const int ledPin = 3; 
// 电位器接的模拟输入引脚(A0 是开发板模拟输入通道 )
const int potPin = A0; 

void setup() {
  // 设 LED 引脚为输出
  pinMode(ledPin, OUTPUT); 
  // 设电位器引脚为输入
  pinMode(potPin, INPUT); 
  // 初始化串口,波特率 9600,方便看电位器数值
  Serial.begin(9600); 
}

void loop() {
  // 读电位器值(0 - 1023 范围 ),存 val
  int val = analogRead(potPin); 
  // 打印 val 到串口监视器,调试看输入数值
  Serial.println(val); 
  // 电位器值转 0 - 255 范围(因 analogWrite 需这范围 ),控制 LED 亮度
  analogWrite(ledPin, val / 4); 
  // 延时 10 毫秒,让亮度变化平滑,也给串口打印留时间
  delay(10); 
}

逻辑setup 完成引脚与串口初始化;loop 循环读电位器值,转换后模拟输出控制 LED 亮度,同时串口打印数值,旋转电位器可看到 LED 亮度和串口数值同步变化 。

案例 3:串口打印变量运算(强化变量与串口 )

void setup() {
  // 初始化串口,波特率 9600,用于输出信息
  Serial.begin(9600); 
  // 定义两个局部变量 a、b,存整数
  int a, b; 
  // 给变量 a 赋值 10
  a = 10; 
  // 给变量 b 赋值 20
  b = 20; 
  // 计算 a + b,结果存 sum
  int sum = a + b; 

  // 串口输出“sum = ”,不换行
  Serial.print("sum = "); 
  // 输出 sum 数值并换行,串口监视器看计算结果
  Serial.println(sum); 
}

void loop() {
  // loop 函数空着,本案例只需 setup 里执行一次运算打印
}

逻辑setup 里定义变量、赋值、运算,串口输出结果;因无循环需求,loop 为空。可扩展让 loop 循环,结合传感器数值做动态运算 。

七、常见问题与解决

(一)LED 不亮

  • 检查接线:LED 长脚(正极 )接开发板引脚,短脚(负极 )接 GND,杜邦线是否松动 。
  • 看代码:pinMode 是否设为 OUTPUTdigitalWrite 值是否正确(HIGH 对应点亮 );模拟输出时,analogWrite 的值是否在 0 - 255 ,电位器是否接好(模拟输入案例 )。

(二)串口监视器无数据或乱码

  • 检查初始化:Serial.begin(9600); 波特率是否与串口监视器设置一致(右下角选 9600 )。
  • 代码逻辑:Serial.print/println 语句是否在循环或执行流程里,确保有数据输出 。

(三)模拟输入值异常

  • 电位器接线:三个引脚,两边接 5V 和 GND,中间接模拟输入引脚(如 A0 ),接错会导致数值不对(固定 0 或 1023 )。
  • 代码:analogRead 函数参数是否对应引脚(如 analogRead(potPin)potPin 设为 A0 )。

八、总结

通过 Arduino 实践,掌握变量、函数、输入输出、串口通信等知识,结合历史人物精神(坚持、创新、求真 ),在技术探索中培养逻辑思维与解决问题能力。多做项目(如智能环境监测、简易机器人控制 ),持续拓展,从电子制作入门迈向创意开发!

1 条评论

  • @ 2025-7-23 22:10:35

    Arduino程序基本结构

    Arduino程序主要由setup()loop()两个函数组成。

    • setup()函数:在Arduino启动或重置时运行一次,通常用于初始化设置,如配置引脚模式、初始化串口通信等。
    • loop()函数:会不断循环运行,只要Arduino没有被关闭或重置,程序的主要功能实现通常放在这个函数中,如读取传感器数据、控制执行器等。

    常量定义

    const int ledPin = 3;// LED引脚,const修饰符表示该变量的值不会被修改,这是一个常量
    

    使用const定义常量,可提高程序的可读性和稳定性,避免在程序中意外修改其值。

    引脚模式设置

    pinMode(ledPin, OUTPUT); // 设置LED引脚为输出模式
    pinMode(potPin, INPUT); // 设置模拟输入引脚为输入模式
    

    pinMode(pin, mode)函数用于设置引脚模式,pin为要设置的引脚编号,mode可以是OUTPUT(输出模式)、INPUT(输入模式)等。

    数字输出与模拟输出

    • 数字输出
    //digitalWrite(ledPin, HIGH); // 点亮LED,数字输出语句
    //digitalWrite(ledPin, LOW); // 熄灭LED
    

    digitalWrite(pin, value)函数用于向数字引脚写入高电平(HIGH)或低电平(LOW),从而控制连接在该引脚上的设备,如点亮或熄灭LED。

    • 模拟输出
    //analogWrite(ledPin, 0);// 熄灭
    analogWrite(ledPin, 180);// 点亮LED
    

    analogWrite(pin, value)函数用于在支持PWM(脉宽调制)的引脚上输出模拟信号,value范围通常是0 - 255,可用于调节LED亮度等。

    模拟输入

    const int potPin = A0;// 模拟输入引脚
    int val; // 变量用于存储模拟输入值
    val = analogRead(potPin); // 读取模拟输入引脚的值
    

    通过analogRead(pin)函数可以读取模拟输入引脚的值,返回值范围一般是0 - 1023,可用于读取电位器等模拟传感器的数据。

    串口通信

    Serial.begin(9600); // 初始化串口通信,波特率为9600
    Serial.println(val); // 打印模拟输入值到串口监视器
    Serial.print("sum = ");//不换行
    
    • Serial.begin(baudRate)用于初始化串口通信,baudRate为波特率,常见值有9600、115200等。
    • Serial.println(data)用于将数据打印到串口监视器,并换行。
    • Serial.print(data)用于将数据打印到串口监视器,不换行。

    变量与表达式

    int a, b;//创建两个局部变量a和b
    a = 10; // 赋值语句,=赋值符号,将10赋值给变量a
    b = 20; // 将20赋值给变量b
    int sum = a + b; // 计算a和b的和,并存储在sum中
    //a+b是一个表达式,表示将a和b的值相加
    //a*b是一个表达式,表示将a和b的值相乘
    //a-b是一个表达式,表示将a和b的值相减
    //a/b是一个表达式,表示将a和b的值相除
    

    可以在Arduino中定义变量来存储数据,使用赋值运算符=为变量赋值,通过+-*/等运算符构成表达式进行数学运算。

    完整示例代码

    • 示例1:简单控制LED亮度
    const int ledPin = 3;// LED引脚,定义为常量
    void setup() {
        pinMode(ledPin, OUTPUT); // 设置LED引脚为输出模式
    }
    void loop() {
        analogWrite(ledPin, 180);// 点亮LED,设置亮度
        // 可在此处添加延时等其他操作,若不添加,LED将一直保持此亮度
    }
    
    • 示例2:通过电位器控制LED亮度并串口打印数据
    const int ledPin = 3;// LED引脚
    const int potPin = A0;// 模拟输入引脚,连接电位器
    int val; // 用于存储模拟输入值
    void setup() {
        pinMode(ledPin, OUTPUT); // 设置LED引脚为输出模式
        pinMode(potPin, INPUT); // 设置模拟输入引脚为输入模式
        Serial.begin(9600); // 初始化串口通信,波特率为9600
    }
    void loop() {
        val = analogRead(potPin); // 读取电位器的值
        Serial.println(val); // 打印电位器值到串口监视器
        analogWrite(ledPin, val / 4);// 根据电位器值调节LED亮度
        delay(10); // 延时10毫秒,稳定读数
    }
    
    • 示例3:计算并打印两数之和
    void setup() {
        Serial.begin(9600); // 初始化串口通信,波特率为9600
        int a, b;
        a = 10; 
        b = 20; 
        int sum = a + b; // 计算两数之和
        Serial.print("sum = ");
        Serial.println(sum); // 打印结果到串口监视器
    }
    void loop() {
        // 此示例中loop函数为空,因为主要功能在setup中已完成
    }
    

    通过学习这些代码和相关知识,能够初步掌握Arduino的基本编程方法,实现简单的输入输出控制和数据处理。在实际应用中,可以根据需求进一步扩展和优化程序,就像汤飞凡、钟南山等科学家一样,凭借钻研能力,不断深入探索,解决更多复杂的问题,创造出更有价值的成果。同时,也应学习亚里士多德追求真理的精神,在编程过程中不断思考,优化代码逻辑,提高程序的效率和稳定性。

    • 1