Arduino教程如何结合C语言入门?

99ANYc3cd6
预计阅读时长 24 分钟
位置: 首页 C语言 正文

Arduino 教程:从零开始学习 C 语言编程

第一部分:核心理念 - Arduino 与 C 语言的关系

在开始之前,你必须理解一个最重要的概念:

arduino教程 c语言
(图片来源网络,侵删)

Arduino 编程语言是 C/C++ 的一个“方言”或“简化版”。

你可以把它想象成:标准 C 语言是一辆手动挡的、性能强劲的跑车,而 Arduino 语言则像一辆带有自动挡和辅助驾驶功能的家用车,你同样能到达目的地(控制硬件),但 Arduino 为你隐藏了许多复杂的底层细节(比如寄存器操作、内存管理等),让你能更专注于“我要做什么”(What),而不是“计算机怎么做”(How)。

学习 Arduino 编程,本质上就是学习简化的 C 语言,并了解 Arduino 提供的特殊函数库


第二部分:Arduino C 语言基础语法

C 语言是 Arduino 编程的骨架,下面我们来学习最核心的语法。

arduino教程 c语言
(图片来源网络,侵删)

结构:setup()loop()

每个 Arduino 程序都必须包含两个最核心的函数:

void setup() {
  // setup() 函数内的代码只运行一次
  // 通常用于初始化:设置引脚模式、启动串口通信等
}
void loop() {
  // loop() 函数内的代码会无限循环地重复执行
  // 这是 Arduino 程序的主体,用于实现主要功能
}
  • void setup(): 在 Arduino 上电或复位后,setup() 函数里的代码会执行一次,就像你去旅行前,检查行李、设定导航一样,只做一次准备工作。
  • void loop(): setup() 执行完毕后,loop() 函数会从头到尾执行,然后立刻从头再开始,如此往复,直到断电,就像你旅行中,开车、拍照、吃饭这些活动会不断重复。

变量

变量是存储数据的容器,在使用变量前,你需要先声明它,告诉编译器你要存储什么类型的数据。

常用数据类型:

类型 大小 范围 描述
int 2 字节 -32,768 到 32,767 用于存储整数,如 5, -100
float 4 字节 -3.4028235E+38 到 3.4028235E+38 用于存储带小数的数,如 14, -0.5
char 1 字节 -128 到 127 用于存储单个字符,如 'A', '1',注意要用单引号。
boolean 1 字节 truefalse 用于存储逻辑值,真或假。

声明和使用变量:

arduino教程 c语言
(图片来源网络,侵删)
int ledPin = 13;         // 声明一个整型变量 ledPin,并赋值为 13
float temperature = 36.5; // 声明一个浮点型变量 temperature
char myChar = 'A';       // 声明一个字符型变量 myChar
bool isLightOn = false;  // 声明一个布尔型变量 isLightOn

注释

注释是写给程序员看的,不会被编译器执行,它的作用是解释代码,方便自己或他人理解。

  • 单行注释:使用
  • 多行注释:使用
// 这是一个单行注释,解释下面这行代码的作用
int ledPin = 13; /* 这也是一个注释,用于给变量赋值。
                   多行注释可以跨越多行。 */

运算符

  • 算术运算符: (加), (减), (乘), (除), (取模,即求余数)
  • 比较运算符: (等于), (不等于), > (大于), < (小于), >= (大于等于), <= (小于等于)
  • 逻辑运算符: && (与), (或), (非)

示例:

int a = 10;
int b = 3;
int sum = a + b;      // sum 的值是 13
int remainder = a % b; // remainder 的值是 1 (10 除以 3 余 1)
bool result = (a > b); // result 的值是 true

控制流

控制流决定了代码的执行顺序。

a) if...else 语句: 用于条件判断。

int sensorValue = analogRead(A0); // 假设从传感器读取一个值
if (sensorValue > 500) {
  // sensorValue 大于 500,则执行这里的代码
  digitalWrite(13, HIGH); // 打开 LED
} else {
  // 否则,执行这里的代码
  digitalWrite(13, LOW);  // 关闭 LED
}

b) for 循环: 用于重复执行某段代码固定次数。

// 让连接在数字引脚 2 到 4 的 LED 依次闪烁
for (int i = 2; i <= 4; i++) {
  digitalWrite(i, HIGH); // 打开第 i 个引脚的 LED
  delay(200);             // 等待 200 毫秒
  digitalWrite(i, LOW);  // 关闭第 i 个引脚的 LED
  delay(200);             // 等待 200 毫秒
}

c) while 循环: 当条件为 true 时,无限循环执行代码。

int buttonState = 0;
while (buttonState == 0) {
  buttonState = digitalRead(2); // 读取一个按钮的状态
  // 只要按钮没被按下 (buttonState 为 0),就一直在这里循环
}
// 当按钮被按下后,循环结束,继续执行下面的代码

第三部分:Arduino 核心函数库

这是 Arduino 的“魔法”所在,它提供了一系列预定义的函数,让你能轻松控制硬件。

pinMode() - 设置引脚模式

在使用一个引脚之前,必须先告诉 Arduino 这个引脚是用来做什么的。

  • pinMode(pin, mode)

参数:

  • pin: 你要设置的引脚编号 (如 2, A0)。
  • mode: 引脚模式。
    • INPUT: 输入模式,用于读取外部信号(如按钮、传感器)。
    • OUTPUT: 输出模式,用于向外部输出信号(如点亮 LED、驱动电机)。
    • INPUT_PULLUP: 输入模式,并启用内部上拉电阻,用于按钮等场景,可以避免引脚悬空。

示例:

void setup() {
  pinMode(13, OUTPUT); // 将数字引脚 13 设置为输出模式,用于控制 LED
  pinMode(2, INPUT_PULLUP); // 将数字引脚 2 设置为带内部上拉的输入模式,用于连接按钮
}

digitalWrite() - 写入数字值

向一个设置为 OUTPUT 的引脚输出高电平或低电平。

  • digitalWrite(pin, value)

参数:

  • pin: 引脚编号。
  • value: 输出值。
    • HIGH: 输出高电平 (5V 或 3.3V)。
    • LOW: 输出低电平 (0V)。

示例:

digitalWrite(13, HIGH); // 点亮连接在 13 号引脚的 LED
delay(1000);            // 等待 1 秒
digitalWrite(13, LOW);  // 熄灭 LED

digitalRead() - 读取数字值

读取一个设置为 INPUTINPUT_PULLUP 的引脚状态。

  • digitalRead(pin)

返回值:

  • HIGH: 如果引脚是高电平。
  • LOW: 如果引脚是低电平。

示例:

int buttonState = digitalRead(2); // 读取 2 号引脚的按钮状态
if (buttonState == LOW) { // 注意:因为我们用了 INPUT_PULLUP,按下按钮时引脚会变为 LOW
  // 按钮被按下时执行的代码
}

analogWrite() - 写入模拟值

向一个支持 PWM (脉冲宽度调制) 的引脚输出一个“伪模拟”电压,这可以用来控制 LED 的亮度或电机的速度。

  • analogWrite(pin, value)

参数:

  • pin: 支持 PWM 的引脚 (在大多数 Arduino 板上,标有 符号的引脚,如 3, 5, 6, 9, 10, 11)。
  • value: 0 到 255 之间的整数。
    • 0: 相当于 LOW (0V)。
    • 255: 相当于 HIGH (5V)。
    • 中间值:输出一个平均电压,如 128 约等于 2.5V。

示例:

void setup() {
  pinMode(9, OUTPUT); // 9 号引脚支持 PWM
}
void loop() {
  // 让 LED 亮度从暗到亮,再到暗
  for (int i = 0; i <= 255; i++) {
    analogWrite(9, i); // 设置 LED 亮度
    delay(10);         // 短暂延时,以便观察效果
  }
  for (int i = 255; i >= 0; i--) {
    analogWrite(9, i);
    delay(10);
  }
}

analogRead() - 读取模拟值

读取一个模拟输入引脚的电压值,并将其转换成一个 0 到 1023 之间的整数。

  • analogRead(pin)

参数:

  • pin: 模拟输入引脚 (以 A 开头,如 A0, A1)。

返回值:

  • 0 到 1023 之间的整数,代表 0V 到参考电压 (通常是 5V) 之间的电压值。

示例:

void setup() {
  Serial.begin(9600); // 初始化串口通信,波特率为 9600
}
void loop() {
  int sensorValue = analogRead(A0); // 读取 A0 引脚的模拟值
  Serial.println(sensorValue);      // 通过串口监视器打印这个值
  delay(100);                       // 每 100ms 读取一次
}

delay() - 延时

让程序暂停执行一段时间。

  • delay(milliseconds)

参数:

  • milliseconds: 暂停的时间,单位是毫秒 (1秒 = 1000毫秒)。

示例:

digitalWrite(13, HIGH);
delay(1000); // 暂停 1 秒
digitalWrite(13, LOW);
delay(1000); // 再暂停 1 秒

第四部分:第一个实战项目 - LED 闪烁

这是 Arduino 的 "Hello, World!",它将帮助你巩固以上所有基础知识。

硬件准备:

  1. 一块 Arduino 板 (如 Arduino UNO)。
  2. 一个 LED (任何颜色都可以)。
  3. 一个 220Ω 或 330Ω 的电阻。
  4. 面包板和几根杜邦线。

电路连接:

  1. 将 LED 的长脚(阳极)连接到电阻的一端。
  2. 将电阻的另一端连接到 Arduino 的数字引脚 13
  3. 将 LED 的短脚(阴极)连接到 Arduino 的 GND (接地) 引脚。

代码:

/*
  Arduino LED 闪烁项目
  这个代码会让连接在数字引脚 13 上的 LED 每隔一秒闪烁一次。
*/
// 定义一个常量,方便以后修改 LED 所连接的引脚
// const 表示这个变量的值在程序运行中不会改变
const int ledPin = 13;
// setup() 函数,只运行一次
void setup() {
  // 将 ledPin 设置为输出模式
  pinMode(ledPin, OUTPUT);
}
// loop() 函数,无限循环运行
void loop() {
  // 打开 LED (输出高电平)
  digitalWrite(ledPin, HIGH);
  // 等待 1000 毫秒 (1秒)
  delay(1000);
  // 关闭 LED (输出低电平)
  digitalWrite(ledPin, LOW);
  // 等待 1000 毫秒 (1秒)
  delay(1000);
}

如何上传代码:

  1. 打开 Arduino IDE。
  2. 将你的 Arduino 板通过 USB 连接到电脑。
  3. 在 IDE 的 "工具" -> "板" 菜单中选择你的板型 (如 "Arduino UNO")。
  4. 在 "工具" -> "端口" 菜单中选择你的板子所连接的 COM 端口。
  5. 点击 "上传" 按钮 (一个向右的箭头)。
  6. 上传成功后,你应该能看到 LED 开始闪烁了!

第五部分:进阶学习路径

当你掌握了基础后,可以按照以下路径继续深入:

  1. 传感器与执行器

    • 输入:学习使用各种传感器,如光敏电阻、温度传感器、超声波传感器等。
    • 输出:学习控制更多执行器,如蜂鸣器、舵机、电机驱动模块等。
  2. 串口通信 (Serial)

    • 这是调试的利器,学习使用 Serial.begin(), Serial.print(), Serial.println() 来在电脑上查看传感器数据、调试程序逻辑。
  3. if...else if...else 结构

    • 当你需要判断多个条件时,使用这个结构比嵌套 if 更清晰。
  4. switch...case 结构

    • 当你需要根据一个变量的值来执行不同操作时,switch 是比 if...else if 更高效的选择。
  5. 函数

    将重复使用的代码块封装成一个函数,可以提高代码的可读性和复用性。

  6. Arduino 拥有海量的第三方库,可以轻松驱动复杂的模块(如 OLED 屏幕、WiFi 模块、GPS 模块等),学习如何安装和使用库是进阶的关键。

  7. C++ 特性

    • 当你感到 C 语言不够用时,可以开始学习 C++ 的面向对象特性,如 class (类),这对于构建更复杂的项目非常有帮助。

学习建议:

  • 多动手,多实践:看十遍教程不如自己动手做一个项目。
  • 学会查阅文档:Arduino 官网有非常详细的参考手册,遇到不懂的函数可以随时查阅。
  • 加入社区:在论坛、社交媒体上和其他爱好者交流,可以学到很多技巧。

祝你学习愉快,玩得开心!

-- 展开阅读全文 --
头像
dede升级jquery要注意哪些问题?
« 上一篇 今天
dede如何集成ueditor?配置步骤有哪些?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]