响应式网站有哪些2017,游戏网站创建,厦门建设工程信息网官网,十堰秦楚网新闻1.必须组件
1 Arduino UNO 板3 330欧姆电阻3 LED
2.实验成果展示 VID20251203164857 3.电路连接图
按照电路图进行连接#xff0c;依次将三个LED灯接入7,8,9引脚#xff0c;如下图所示。 4.程序代码
const byte LEDs[]{7,8,9};
const byte total 3;
byte index …1.必须组件1 × Arduino UNO 板3 × 330欧姆电阻3 × LED2.实验成果展示VID202512031648573.电路连接图按照电路图进行连接依次将三个LED灯接入7,8,9引脚如下图所示。4.程序代码const byte LEDs[]{7,8,9}; const byte total 3; byte index 0; void setup() { // put your setup code here, to run once: for(byte i 0; i total; i) { pinMode(LEDs[i], OUTPUT); //i的值将从0到4依序设置7,8,9引脚为输出引脚。 } } void loop() { // put your main code here, to run repeatedly: for (byte i 0; i total; i) { digitalWrite(LEDs[i], LOW); } digitalWrite(LEDs[index],HIGH); index ; if (index total) index 0; delay(500); }4.1代码讲解一变量与常量的定义const byte LEDs[] {7,8,9}; const byte total 3; byte index 0;1.const常量修饰符含义const即“常量”修饰的变量/数组值不可被修改一旦定义程序中无法通过赋值语句改变其内容。作用防止误操作修改关键值如LED引脚号、设备总数提升程序可读性用 total 代替数字3一眼能看出是“LED总数”编译器可对常量做优化节省内存反例如果写LEDs[0] 10;编译器会直接报错因为LEDs被const修饰。2.byte数据类型本质Arduino的byte是8位无符号整数类型等价于C语言的uint8_t取值范围 0~255 。优势Arduino单片机如Uno的内存很小仅2KB SRAMbyte只占1字节而int占2字节存储引脚号这类小数值时用byte更节省内存。适用场景存储引脚号、设备数量、简单计数不超过255等。3. 数组LEDs[]数组声明语法类型 数组名[长度] {元素1, 元素2,...};代码中 LEDs[] 省略了长度编译器会自动根据大括号内的元素数量3个确定数组长度为3也可显式写 LEDs[3] {7,8,9}; 效果完全一致。数组的索引规则数组的索引从0开始而非1。-LEDs[0]→ 第一个元素值为7对应Arduino引脚7-LEDs[1]→ 第二个元素值为8对应Arduino引脚8-LEDs[2]→ 第三个元素值为9对应Arduino引脚9若访问 LEDs[3] 属于数组越界会读取到随机的内存数据导致程序出错。4. 变量index作用作为数组的“指针”记录当前需要点亮的LED在数组中的位置。初始值 0程序启动时先点亮数组第一个元素对应的引脚7号引脚)。三setup()函数初始化引脚模式void setup() { for(byte i 0; i total; i) { pinMode(LEDs[i], OUTPUT); } }1.for循环固定次数循环语法拆解for(初始化表达式; 条件表达式; 增量表达式) { 循环体 }初始化byte i 0;→ 定义循环变量 i 初始值为0数组索引从0开始条件i total;→ 循环继续的条件 i 小于3时执行循环体 增量i→ 每次循环结束后 i 自增1i等价于i i 1i后置自增先返回变量 i 的原始值再执行i i 1的自增操作。 例int i 2; int a i;执行后a 2先取 i 的原始值赋值 i 3 后自增。i前置自增先执行i i 1的自增操作再返回自增后的新值。 例int i 2; int a i;执行后i 3先自增a 3后取新值赋值。在for循环中i和i效果完全相同循环次数i 取0、1、2共3次刚好遍历数组所有元素。对比如果不用循环需要写3行pinMode(7,OUTPUT); pinMode(8,OUTPUT); pinMode(9,OUTPUT);循环让代码更简洁且新增LED时只需修改数组无需改初始化代码。2.pinMode()引脚模式设置函数函数原型void pinMode(uint8_t pin, uint8_t mode);参数说明pin要设置的引脚号如7、8、9mode引脚模式主要有两种OUTPUT输出模式用于向外部设备如LED输出电信号高/低电平INPUT输入模式用于读取外部信号如传感器、按键。 硬件原理Arduino的数字引脚默认是INPUT模式要控制LED必须设为OUTPUT否则引脚无法主动输出电平。四、loop()函数流水灯核心逻辑void loop() { for (byte i 0; i total; i) { digitalWrite(LEDs[i], LOW); } digitalWrite(LEDs[index], HIGH); index; if (index total) { index 0; } delay(500); }1. 第一步熄灭所有LEDfor循环digitalWritefor (byte i 0; i total; i) { digitalWrite(LEDs[i], LOW); }digitalWrite()数字电平写入函数函数原型void digitalWrite(uint8_t pin, uint8_t value);参数说明pin要写入的引脚号value电平值HIGH高电平一般为5V/3.3V或LOW低电平0V。硬件原理LED是单向导电的半导体当引脚输出HIGH时电流流过LED使其点亮LOW时无电流LED熄灭需注意LED要串联限流电阻否则会烧毁。循环作用遍历所有LED引脚统一写入LOW确保每次只有一个LED点亮避免多个LED同时亮的混乱。2. 第二步点亮当前索引对应的LEDdigitalWrite(LEDs[index], HIGH);利用index变量获取当前要点亮的引脚号如index0时LEDs[0]7点亮7号引脚- 这一步在“熄灭所有LED”之后执行保证每次只有目标LED亮。3. 第三步索引自增与重置index条件判断index; if (index total) { index 0; }index 索引自增1指向下一个LED如index0→1→2依次对应引脚7→8→9。条件判断if (index total) 当index增加到3等于total3时数组已遍历完毕数组最大索引是2此时将 index 重置为0实现循环遍历从第一个LED重新开始 若不重置index会继续增加到4、5…访问LEDs[3] 、 LEDs[4]会导致数组越界程序可能出现乱码、死机。4. 第四步延时delay(500)delay() 延时函数函数原型void delay(unsigned long ms);参数ms延时的毫秒数delay(500)表示程序暂停500毫秒0.5秒作用控制LED点亮的持续时间若没有延时LED切换速度会极快单片机执行速度为微秒级肉眼看不到流水效果。注意delay()是“阻塞式延时”延时期间单片机无法执行其他操作如读取传感器进阶开发中会用定时器代替delay()。