目录

一、题目

二、示意图

三、流程图

四、硬件连接

1、舵机

2、超声波

3、LED灯

五、程序


一、题目

二、示意图

【ardunio】青少年机器人四级实操代码(2023年9月)-LMLPHP

三、流程图

四、硬件连接

1、舵机

电源线正极接在VCC上,电源负极接在GND上,信号线接在D12脚。

2、超声波

电源线正极接在VCC上,电源负极接在GND上,Trig信号线接在D3脚,Echo信号线接在D2脚。

3、LED灯

LED_A灯模块用红色,负极接在GND上,正极接在D6脚。

LED_B灯模块用绿色,负极接在GND上,正极接在D7脚。

五、程序

#include <Servo.h>


Servo myServo;           //声明Servo对象
int distance;            //声明距离变量,用于存储超声波测得障碍物距离
int angle;               //声明舵机角度变量
const int servoPin=12;   //设置舵机信号引脚
const int TrigPin=3;     //设置Trig信号引脚
const int EchoPin=2;     //设置Echo信号引脚
const int LED_A=6;       //设置LED_A引脚
const int LED_B=7;       //设置LED_B引脚
int delaytime=10;        //设置舵机转到延时
        
//初始化函数
void setup() {

    pinMode(LED_A,OUTPUT);    //设置LED_A引脚为输出模式
    pinMode(LED_B,OUTPUT);    //设置LED_B引脚为输出模式
    pinMode(TrigPin,OUTPUT);  //设置TrigPin引脚为输出模式
    pinMode(EchoPin,INPUT);   //设置EchoPin引脚为输入模式

    myServo.attach(servoPin); //绑定舵机引脚
    myServo.write(90);        //初始化舵机旋转到90度
    digitalWrite(LED_A,LOW);  //初始化LED_A熄灭
    digitalWrite(LED_B,LOW);  //初始化LED_B熄灭
 }

//循环函数
void loop() {
    
    //以下6行程序作用:读取超声波传感器前方障碍物距离
    digitalWrite(TrigPin,LOW);
    delayMicroseconds(2);
    digitalWrite(TrigPin,HIGH);
    delayMicroseconds(10);
    digitalWrite(TrigPin,LOW);
    distance=pulseIn(EchoPin,HIGH)/58.0;

    //如果障碍物距离在欢送区内
    if(distance>=5 && distance<=15)
    {
        digitalWrite(LED_B,LOW);    //LED_B灯熄灭
        
        digitalWrite(LED_A,HIGH);   //LED_A灯点亮

        //以下for循环作用:舵机从30度旋转到90度
        for(angle=30;angle=90;angle++)
        {
            myServo.write(angle);
            delay(time);
            
        }
        
        digitalWrite(LED_A,LOW);    //LED_A灯熄灭
        
        //以下for循环作用:舵机从90度旋转到30度
        for(angle=90;angle>=30;angle--)
        {
            myServo.write(angle);
            delay(time);
            
        }        
      
    }
    
    //如果障碍物距离在欢迎区内
    else if(distance>15 && distance<=25)
    {
        digitalWrite(LED_A,LOW);     //LED_A灯熄灭

        digitalWrite(LED_B,HIGH);    //LED_B灯点亮

        //以下for循环作用:舵机从90度旋转到150度
        for(angle=90;iangle=150;angle++)
        {
            myServo.write(angle);
            delay(time);
        }

        digitalWrite(LED_B,LOW);    //LED_B灯熄灭

        //以下for循环作用:舵机从150度旋转到90度
        for(angle=150;angle>=90;angle--)
        {
            myServo.write(angle);
            delay(time);
        }

    }
    
    //如果障碍物距离不在欢迎区和欢送区内
    else
    {
        myServo.write(90); 
        digitalWrite(LED_A,LOW);
        digitalWrite(LED_B,LOW);

    }

}
09-24 00:54