2018年12月机器人技术等级考试试卷(四级实操) 试题解析

【实操题】

1、(本题100分)

一、主题:

红外遥控小车。

二、器件:

三四级等级考试套件。

三、要求:

(1)现场搭建小车。

(2)通过红外遥控传感器套件(红外遥控器和红外接收模块)控制小车运动。

(3)通过红外遥控按键,实现小车前进、后退、原地旋转、加速、减速、停止功能。

(4)程序编写采用C/C++语言,不得使用图形化软件编写。

(5)小车的运动控制程序,不得采用库函数调用。红外遥控读取程序,可以使用相应的红外库。

(6)考试结束,考生将代码拷贝上交。

说明:

(1)实操开始,考生需要先向主控板写入blink程序,经监考老师确认后方可进行小车组装。

(2)各功能所对应的按键由考生自行确定。

(3)编写程序文件命名规则为:DJKS_身份证号。

参考程序:

#include <IRremote.h> //包含红外解码头文件
#define LEFT_MOTOR_POS A0 //控制左电机正转
#define LEFT_MOTOR_NAG A1 //控制左电机反转
#define RIGHT_MOTOR_POS A2 //控制右电机正转
#define RIGHT_MOTOR_NAG A3 //控制右电机反转
int IR_PIN = 10; // 红外传感器接到Arduino的D10
IRrecv receiver(IR_PIN);
decode_results results;

void setup() {
  pinMode(LEFT_MOTOR_POS, OUTPUT); //控制左电机的输入端+设为输出
  pinMode(LEFT_MOTOR_NAG, OUTPUT); //控制左电机的输入端-设为输出
  pinMode(RIGHT_MOTOR_POS, OUTPUT);//控制右电机的输入端+设为输出
  pinMode(RIGHT_MOTOR_NAG, OUTPUT);//控制右电机的输入端-设为输出
  //启动红外接收
  receiver.enableIRIn();
}

void loop() {
  if (receiver.decode(&results)) {
    if (results.value == 0xFFA857) //按前进键,机器人小车前进
    {
      moveStop();
      delay(50);
      moveForward();
    }
    if (results.value == 0xFFE01F) //按后退键,机器人小车后退
    {
      moveStop();
      delay(50);
      moveBackward();
    }
    if (results.value == 0xFF22DD) //按左转键,机器人小车左转
    {
      moveLeft();
      delay(400);
      moveStop();
    }
    if (results.value == 0xFF02FD) //按右转键,机器人小车右转
    {
      moveRight();
      delay(400);
      moveStop();
    }
    if (results.value == 0xFF906F) //按停止键,机器人小车停止
    {
      moveStop();
    }
    receiver.resume();//继续接收新的指令
  }
}

//函数功能:左右电机均正转,机器人小车前进
void moveForward()
{
  digitalWrite(LEFT_MOTOR_POS, HIGH);//左电机控制输入端+设置为高电平
  digitalWrite(LEFT_MOTOR_NAG, LOW);//左电机控制输入端-设置为低电平
  digitalWrite(RIGHT_MOTOR_POS, HIGH);//电机控制输入端+设置为高电平
  digitalWrite(RIGHT_MOTOR_NAG, LOW);//右电机控制输入端-设置为低电平
}

//函数功能:左右电机均反转,机器人小车后退
void moveBackward()
{
  digitalWrite(LEFT_MOTOR_POS, LOW);//左电机控制输入端+设置为低电平
  digitalWrite(LEFT_MOTOR_NAG, HIGH);//左电机控制输入端-设置为高电平
  digitalWrite(RIGHT_MOTOR_POS, LOW);//电机控制输入端+设置为低电平
  digitalWrite(RIGHT_MOTOR_NAG, HIGH);//右电机控制输入端-设置为高电平
}

//函数功能:左电机不转,右电机正转,机器人小车左转
void moveLeft()
{
  digitalWrite(LEFT_MOTOR_POS, HIGH);
  digitalWrite(LEFT_MOTOR_NAG, HIGH);
  digitalWrite(RIGHT_MOTOR_POS, HIGH);
  digitalWrite(RIGHT_MOTOR_NAG, LOW);
}

//函数功能:右电机不转,左电机正转,机器人小车右转
void moveRight()
{
  digitalWrite(LEFT_MOTOR_POS, HIGH);
  digitalWrite(LEFT_MOTOR_NAG, LOW);
  digitalWrite(RIGHT_MOTOR_POS, HIGH);
  digitalWrite(RIGHT_MOTOR_NAG, HIGH);
}

//函数功能:左右电机都不转,机器人小车停车
void moveStop()
{
  digitalWrite(LEFT_MOTOR_POS, HIGH);
  digitalWrite(LEFT_MOTOR_NAG, HIGH);
  digitalWrite(RIGHT_MOTOR_POS, HIGH);
  digitalWrite(RIGHT_MOTOR_NAG, HIGH);
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小伙伴测评网

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值