【实操题】
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);
}