Arduino 循迹小车代码解析及 LED 闪烁实现
这段代码是一个 Arduino 程序,主要功能是控制一辆循迹小车,并利用 LED 灯实现闪烁效果。
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <robot.h>
#include <MsTimer2.h>
volatile int step;
LiquidCrystal_I2C mylcd(0x27,16,2);
void msTimer2_func() {
lcd();
}
void forward() {
analogWrite(2,150);
digitalWrite(3,HIGH);
analogWrite(4,150);
digitalWrite(5,HIGH);
}
void back() {
digitalWrite(2,HIGH);
analogWrite(3,150);
digitalWrite(4,HIGH);
analogWrite(5,150);
}
void right() {
analogWrite(2,150);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
analogWrite(5,150);
}
void lcd() {
sei();
readCoordinate();
mylcd.clear();
mylcd.setCursor(1-1, 1-1);
mylcd.print(String("x") + String(x));
mylcd.setCursor(9-1, 1-1);
mylcd.print(String("y") + String(y));
mylcd.setCursor(1-1, 2-1);
mylcd.print(String("a") + String(angle));
}
void left() {
digitalWrite(2,HIGH);
analogWrite(3,150);
analogWrite(4,150);
digitalWrite(5,HIGH);
}
void movestop() {
digitalWrite(2,HIGH);
digitalWrite(3,HIGH);
digitalWrite(4,HIGH);
digitalWrite(5,HIGH);
}
void setup(){
step = 1;
data.begin();
MsTimer2::set(50, msTimer2_func);
MsTimer2::start();
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
pinMode(2, OUTPUT);
pinMode(4, OUTPUT);
pinMode(44, OUTPUT);
mylcd.init();
mylcd.backlight();
}
void loop(){
if (step == 1) {
forward();
if (y < 450 && y > 400) {
movestop();
delay(1000);
step = 2;
}
}
if (step == 2) {
forward();
if (y < 330 && y > 280) {
movestop();
delay(200);
for (int i = 1; i <= 5; i = i + (1)) {
digitalWrite(44,LOW);
delay(500);
digitalWrite(44,HIGH);
delay(500);
}
step = 3;
}
}
if (step == 3) {
right();
if (angle < 280 && angle > 260) {
movestop();
delay(200);
step = 4;
}
}
}
代码解析
小车控制
forward(): 控制小车向前移动back(): 控制小车向后移动right(): 控制小车向右转left(): 控制小车向左转movestop(): 控制小车停止移动
LED 闪烁
这段代码利用一个 for 循环,实现 LED 灯的闪烁效果。
for (int i = 1; i <= 5; i = i + (1)) { ... }: 这段代码定义了一个循环,循环变量i从 1 开始,每次循环加 1,直到i大于等于 5 时结束循环。也就是说,循环将执行 5 次。digitalWrite(44,LOW);: 将 44 引脚设置为低电平(LOW)。由于 44 引脚连接的是 LED 灯,因此设置为低电平会使 LED 灯熄灭。delay(500);: 延时 500 毫秒。digitalWrite(44,HIGH);: 将 44 引脚设置为高电平(HIGH)。由于 44 引脚连接的是 LED 灯,因此设置为高电平会使 LED 灯亮起。delay(500);: 延时 500 毫秒。
这段代码中,LED 灯会先熄灭 500 毫秒,然后亮起 500 毫秒,再熄灭,再亮起,以此循环 5 次。
总结
这段代码实现了以下功能:
- 控制循迹小车进行前进、后退、转向和停止的动作。
- 利用 LED 灯实现闪烁效果,闪烁周期为 1 秒。
这段代码展示了 Arduino 在控制硬件设备方面的强大能力。通过编写简单的代码,我们可以轻松控制小车的运动和 LED 灯的闪烁。
原文地址: https://www.cveoy.top/t/topic/pRLx 著作权归作者所有。请勿转载和采集!