这段代码是一个 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 次。

总结

这段代码实现了以下功能:

  1. 控制循迹小车进行前进、后退、转向和停止的动作。
  2. 利用 LED 灯实现闪烁效果,闪烁周期为 1 秒。

这段代码展示了 Arduino 在控制硬件设备方面的强大能力。通过编写简单的代码,我们可以轻松控制小车的运动和 LED 灯的闪烁。

Arduino 循迹小车代码解析及 LED 闪烁实现

原文地址: https://www.cveoy.top/t/topic/pRLx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录