Arduino C语言PDF如何入门学习?

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

Arduino C/C++ 语言核心概念

首先要明确一个关键点:Arduino 使用的语言是 C++,但它对 C++ 进行了极大的简化和封装,使其对初学者非常友好,你可以把它看作是“带库的 C 语言”,你写的代码(.ino 文件)会被 Arduino IDE 自动包装在一个类中,所以你可以直接使用 setup()loop() 函数。

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

基本结构

每个 Arduino 程序都包含两个核心函数:

// 1. setup() 函数:只运行一次
// 用于初始化:设置引脚模式、启动串口通信等。
void setup() {
  // 初始化代码,只运行一次
}
// 2. loop() 函数:循环执行
// 程序的主体,会不断地重复执行。
void loop() {
  // 主要代码,循环运行
}

数据类型

Arduino 支持标准 C/C++ 的基本数据类型,并增加了一些特定于硬件的类型。

数据类型 字节数 范围 描述
void - - 无类型
bool 1 true / false 布尔值
char 1 -128 到 127 字符
unsigned char 1 0 到 255 无符号字符
byte 1 0 到 255 字节 (等同于 unsigned char)
int 2 -32,768 到 32,767 整数 (16位)
unsigned int 2 0 到 65,535 无符号整数
long 4 -2,147,483,648 到 2,147,483,647 长整型
unsigned long 4 0 到 4,294,967,295 无符号长整型
float 4 ~3.4E±38 单精度浮点数
double 4 ~3.4E±38 双精度浮点数 (在 Arduino 上等同于 float)
String - - 字符串对象 (来自 String 库)
array - - 数组

变量与常量

int ledPin = 13;        // 定义一个整型变量 ledPin,并赋值为 13
const int buttonPin = 2; // 定义一个整型常量 buttonPin,值不能被修改

运算符

  • 算术运算符: (加), (减), (乘), (除), (取模)
  • 比较运算符: (等于), (不等于), > (大于), < (小于), >= (大于等于), <= (小于等于)
  • 布尔运算符: && (与), (或), (非)
  • 位运算符: & (与), (或), ^ (异或), (取反), << (左移), >> (右移)
  • 赋值运算符: , , , ,

核心函数与库

数字 I/O

  • pinMode(pin, mode): 设置引脚模式。
    • pin: 引脚编号 (如 13, 2)。
    • mode: INPUT, OUTPUT, INPUT_PULLUP
  • digitalWrite(pin, value): 设置数字引脚的电平。
    • value: HIGH (高电平/5V), LOW (低电平/0V)。
  • digitalRead(pin): 读取数字引脚的电平,返回 HIGHLOW

示例:LED 闪烁

// 定义连接 LED 的引脚
const int ledPin = 13;
void setup() {
  // 将 ledPin 设置为输出模式
  pinMode(ledPin, OUTPUT);
}
void loop() {
  // 点亮 LED (高电平)
  digitalWrite(ledPin, HIGH);
  delay(1000); // 等待 1 秒
  // 熄灭 LED (低电平)
  digitalWrite(ledPin, LOW);
  delay(1000); // 等待 1 秒
}

模拟 I/O

  • analogRead(pin): 读取模拟引脚的电压值,返回一个 0 到 1023 之间的整数 (10位ADC)。

    注意:Arduino UNO 的模拟引脚为 A0 到 A5。

    arduino c语言 pdf
    (图片来源网络,侵删)
  • analogWrite(pin, value): 向引脚输出一个 PWM (脉冲宽度调制) 信号。
    • pin: 必须是支持 PWM 的引脚 (UNO 上的 符号标记的引脚,如 3, 5, 6, 9, 10, 11)。
    • value: 0 到 255 之间的整数,0 表示 0% 占空比 (关闭),255 表示 100% 占空比 (全开)。

示例:呼吸灯

const int ledPin = 9; // 必须是 PWM 引脚
void setup() {
  pinMode(ledPin, OUTPUT);
}
void loop() {
  // 让 LED 亮度从暗到亮
  for (int brightness = 0; brightness <= 255; brightness++) {
    analogWrite(ledPin, brightness);
    delay(10);
  }
  // 让 LED 亮度从亮到暗
  for (int brightness = 255; brightness >= 0; brightness--) {
    analogWrite(ledPin, brightness);
    delay(10);
  }
}

时间函数

  • delay(milliseconds): 暂停程序指定的毫秒数。
  • delayMicroseconds(microseconds): 暂停程序指定的微秒数。
  • millis(): 返回 Arduino 开机以来的毫秒数 (无符号长整型)。millis() 是非阻塞式编程的关键,比 delay() 更强大。

示例:使用 millis() 代替 delay()

const int ledPin = 13;
unsigned long previousMillis = 0; // 存储上一次 LED 状态改变的时间
const long interval = 1000;       // 闪烁间隔 (1秒)
int ledState = LOW;               // LED 的当前状态
void setup() {
  pinMode(ledPin, OUTPUT);
}
void loop() {
  // 获取当前时间
  unsigned long currentMillis = millis();
  // 检查是否到达了设定的间隔
  if (currentMillis - previousMillis >= interval) {
    // 保存这次的时间
    previousMillis = currentMillis;
    // 切换 LED 状态
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }
    // 更新 LED
    digitalWrite(ledPin, ledState);
  }
  // 在这里可以执行其他不阻塞的任务
}

串口通信

  • Serial.begin(baudRate): 启动串口通信。
    • baudRate: 波特率,常用 9600
  • Serial.print(data): 向串口输出数据(不换行)。
  • Serial.println(data): 向串口输出数据(并换行)。
  • Serial.available(): 检查串口是否有数据可读,返回可读取的字节数。
  • Serial.read(): 从串口读取一个字节的数据。

示例:串口控制 LED

const int ledPin = 13;
void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600); // 启动串口,波特率设为 9600
  Serial.println("Ready to receive commands!");
}
void loop() {
  // 检查串口是否有数据
  if (Serial.available() > 0) {
    // 读取接收到的字符
    char command = Serial.read();
    // 根据命令执行操作
    if (command == '1') {
      digitalWrite(ledPin, HIGH);
      Serial.println("LED ON");
    } else if (command == '0') {
      digitalWrite(ledPin, LOW);
      Serial.println("LED OFF");
    }
  }
}

常用库

库是预写好的代码集合,可以极大地简化开发。

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

Wire.h (I2C 通信)

用于连接 I2C 设备,如传感器、OLED 屏幕等。

#include <Wire.h>
void setup() {
  Wire.begin(); // 初始化 I2C 总线
  Serial.begin(9600);
}
void loop() {
  // 向地址为 0x08 的设备发送一个字节
  Wire.beginTransmission(0x08);
  Wire.write("Hello Arduino");
  Wire.endTransmission();
  delay(1000);
}

Servo.h (舵机控制)

用于控制舵机。

#include <Servo.h>
Servo myServo; // 创建一个舵机对象
void setup() {
  myServo.attach(9); // 将舵机连接到引脚 9
}
void loop() {
  myServo.write(0);   // 舵机转到 0 度
  delay(1000);
  myServo.write(90);  // 舵机转到 90 度
  delay(1000);
  myServo.write(180); // 舵机转到 180 度
  delay(1000);
}

LiquidCrystal.h (LCD 显示)

用于控制 16x2 等字符型 LCD。

#include <LiquidCrystal.h>
// 初始化 LCD,RS, E, D4, D5, D6, D7
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
  lcd.begin(16, 2); // 设置 LCD 为 16 列 2 行
  lcd.print("Hello, World!");
}
void loop() {
  lcd.setCursor(0, 1); // 移动光标到第二行
  lcd.print(millis() / 1000); // 显示运行秒数
}

实战项目示例

光敏电阻控制 LED 亮度

目标:根据环境光线强度,自动调节 LED 的亮度。

硬件

  • Arduino UNO
  • LED
  • 220Ω 电阻
  • 光敏电阻
  • 10kΩ 电阻
  • 面包板和导线

接线

  • LED 长脚 -> 220Ω 电阻 -> 数字引脚 9
  • LED 短脚 -> GND
  • 光敏电阻一端 -> 5V
  • 光敏电阻另一端 -> 模拟引脚 A0
  • 光敏电阻与 A0 的连接点 -> 10kΩ 电阻 -> GND

代码

const int ledPin = 9;      // PWM 引脚
const int sensorPin = A0;  // 光敏电阻引脚
void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600); // 用于调试
}
void loop() {
  // 读取传感器值 (0-1023)
  int sensorValue = analogRead(sensorPin);
  // 将传感器值 (0-1023) 映射到 PWM 值 (0-255)
  int brightness = map(sensorValue, 0, 1023, 255, 0);
  // 写入 PWM 值到 LED
  analogWrite(ledPin, brightness);
  // 在串口监视器打印值
  Serial.print("Sensor Value: ");
  Serial.print(sensorValue);
  Serial.print("\t Brightness: ");
  Serial.println(brightness);
  delay(100);
}

学习资源与 PDF 下载

由于我无法直接生成和上传文件,以下是一些高质量的免费 Arduino C/C++ 学习资源,它们通常以网页形式提供,但你可以使用浏览器“打印为PDF”功能轻松地将它们保存下来。

官方资源

  • Arduino 官方参考手册
    • 链接: https://www.arduino.cc/reference/en/
    • 最权威、最全面的参考文档,包含了所有函数、库、数据类型的详细说明和示例代码。强烈建议作为案头手册。

综合教程与书籍

  • 《Arduino 实战指南》

  • 《Beginning Arduino》 by Michael McRoberts

  • 《Programming Arduino: Getting Started with Sketches》 by Simon Monk

    专注于编程本身,深入浅出地讲解 C/C++ 在 Arduino 中的应用,是理解代码逻辑的好书,网上也有资源可以找到。

中文优质资源

如何将网页保存为 PDF?

  1. 打开上述任一链接。
  2. 在浏览器中,按下 Ctrl + P (Windows) 或 Cmd + P (Mac) 打开打印对话框。
  3. 在目标打印机选项中,选择 “另存为 PDF”“保存为 PDF”
  4. 点击“保存”,即可得到该网页的 PDF 文件。

希望这份详细的指南能帮助你系统地学习 Arduino C/C++ 语言!祝你玩得开心!

-- 展开阅读全文 --
头像
织梦cms零基础做网站
« 上一篇 01-08
char与printf在C语言中如何协同使用?
下一篇 » 01-08

相关文章

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

目录[+]