就像准备做饭和真正开火一样:
🧺 void setup()
外面(全局区):准备食材和工具
就像做饭前,把要用到的东西都摆在台面上
这里是你一次性声明所有要用到的东西,告诉 Arduino:
🧂 “这些调料(常量)固定不变!”
#define LED_PIN 13
// 比如:盐罐子就放灶台左边
const int 按钮 = 2;
// 酱油瓶放右边,位置定死!🥬 “这些菜(变量)全程都能用!”
int 温度;
// 比如:切好的青菜放碗里,随时取
String 收到的消息;
// 煮好的汤放锅里,随时加料🔧 “这些电器(对象)插好电待命!”
Servo 我的舵机;
// 电饭锅摆好,但还没按开关
LiquidCrystal 屏幕(12,11,5,4,3,2);
// 微波炉放好,但没设置时间✅ 关键特点:
这些东西从开始到结束一直存在! 就像灶台上的工具,setup()
和loop()
都能随手拿到。
🔥 void setup()
里面(函数内部):开火做准备工作
就像正式开炒前,必须做的那些“一次性”操作
这里是你对硬件下指令,告诉 Arduino:
🔌 “把XX引脚设置好!”
pinMode(LED_PIN, OUTPUT);
// 比如:把盐罐盖子拧开(设置引脚为输出)
pinMode(按钮, INPUT);
// 把酱油瓶的瓶口打开(设置引脚为输入)📞 “启动XX通讯!”
Serial.begin(9600);
// 打开对讲机,和电脑说:“喂喂?能听到吗?”(启动串口)⚙️ “设备给我连上!”
我的舵机.attach(9);
// 把舵机插到9号引脚,就像把电饭锅插头插进插座
屏幕.begin(16,2);
// 告诉屏幕:“你是16列2行的!”(初始化显示屏)🎛️ “初始状态调好!”
digitalWrite(LED_PIN, LOW);
// 关灯!就像先把火调到最小
温度 = 25;
// 默认温度设成25度(给全局变量赋初值)✅ 关键特点:
这些操作只做一次! 就像开火前准备——你不会每炒一下菜都重新插电饭锅插头吧?
🍳 超形象总结:厨房做饭版
setup() 外面 (全局区) | setup() 里面 (初始化) | |
---|---|---|
作用 | 把食材、调料、锅具摆上台面 | 开火前必须做的一次性准备 |
类比 | 切好菜、米淘好、盐罐酱油瓶放灶台、电饭锅摆好 | 开煤气灶、插电饭锅电源、拧开调料盖、把锅烧热 |
频率 | 摆好就一直能用(全程有效) | 只做一次!(重启Arduino才会重做) |
出错 | 忘记摆盐 → 整个菜没法做 (全局变量没声明) | 忘记开煤气 → 菜炒不熟 (没初始化硬件) |
💡 举个真实例子:
// === 外面:摆好东西 ===
#define 绿灯 3 // 常量:绿灯插在3号口 (位置固定)
int 计数器 = 0; // 变量:计次用的本子放桌上 (全程记录)
Servo 小舵机; // 对象:小舵机放台面上 (但还没接线!)
// === setup里面:开机准备 ===
void setup() {
pinMode(绿灯, OUTPUT); // 把绿灯插针插好!
Serial.begin(9600); // 打开和电脑的对讲机
小舵机.attach(5); // 把小舵机插到5号口!
计数器 = 100; // 在本子第一页写个100 (初始值)
}
// === loop里面:正式干活(反复执行)===
void loop() {
计数器++; // 每次循环在本子上+1 (可修改全局变量)
digitalWrite(绿灯, HIGH); // 亮绿灯!
小舵机.write(90); // 让小舵机转90度!
}
✅ 一句话秒懂:
外面是
准备东西
(全程有效),里面是开机动作
(只做一次)——
就像手机:外面是装好的APP(一直存在),里面是按开机键(启动时只按一次)!