开发板连接方式如下图:

| 马达 | 马达驱动板 |
|---|---|
| 马达1(右轮)接近地面引脚 | OUT1 |
| 马达1(右轮)接近底板引脚 | OUT2 |
| 马达2(左轮)接近地面引脚 | OUT3 |
| 马达2(左轮)接近底板引脚 | OUT4 |
| 马达驱动板 | Arduino开发板 |
|---|---|
| IN1 | 4 |
| IN2 | 5 |
| IN3 | 6 |
| IN4 | 7 |
| 马达驱动板 | 外接电源 |
|---|---|
| VCC | 电源正极 |
| GND | 电源负极和Arduino GND |
| 5V | Arduino Vin引脚 |
| 红外模块 | Arduino开发板 |
|---|---|
| IN | D8 |
| VCC | 5V |
| GND | GND |
小车组装效果图如下:
上部:

底部:

对应代码如下:
// 库源码放在本项目所在目录#include "IRremote.h"// 设置接收IRDA数据的引脚int RECV_PIN = 8;// 初始化IRDA模块IRrecv irrecv(RECV_PIN);// 准备读取数据的数据结构decode_results results;//使用L298N驱动板// IN1连接引脚4// IN2连接引脚5// IN3连接引脚6// IN4连接引脚7int IN1=4;int IN2=5;int IN3=6;int IN4=7;const int WHEEL_MOVE_IDEL = 0;const int WHEEL_MOVE_FORWARD = 1;const int WHEEL_MOVE_BACKWARD = 2;const long IRDA_ACTION_FORWARD = 0x00FF18E7; //2const long IRDA_ACTION_BACKWARD = 0x00FF4AB5; //8const long IRDA_ACTION_LEFT = 0x00FF10EF; //4const long IRDA_ACTION_RIGHT = 0x00FF5AA5; // 6const long IRDA_ACTION_STOP = 0x00FF38C7; // 5unsigned long last = millis();void setup() {//初始化电机不动pinMode(IN1, OUTPUT);digitalWrite(IN1, HIGH);pinMode(IN2, OUTPUT);digitalWrite(IN2, HIGH);pinMode(IN3, OUTPUT);digitalWrite(IN3, HIGH);pinMode(IN4, OUTPUT);digitalWrite(IN4, HIGH);// 初始化引脚pinMode(RECV_PIN, INPUT);// 初始化串口Serial.begin(9600);// 启动IRDA接收模块,随时接收数据irrecv.enableIRIn();}void loop() {if (millis() - last < 250){return;}last = millis();bool shouldMove = false;bool shouldTurn = false;bool shouldKeep = false;//读取红外输入信息if (irrecv.decode(&results)) {Serial.println(results.value, HEX);switch(results.value) {case IRDA_ACTION_FORWARD:goForward();Serial.println("go forward");shouldMove = true;break;case IRDA_ACTION_BACKWARD:goBackward();Serial.println("go backward");shouldMove = true;break;case IRDA_ACTION_LEFT:turnLeft();Serial.println("turn left");shouldTurn = true;break;case IRDA_ACTION_RIGHT:turnRight();Serial.println("turn right");shouldTurn = true;break;case IRDA_ACTION_STOP:stopMove();Serial.println("stop");break;default:shouldKeep = true;break;}irrecv.resume();}if(!shouldTurn && !shouldMove && !shouldKeep){keepIdle();}}void keepIdle() {rightMove(WHEEL_MOVE_IDEL);leftMove(WHEEL_MOVE_IDEL);}void goForward() {rightMove(WHEEL_MOVE_FORWARD);leftMove(WHEEL_MOVE_FORWARD);}void goBackward() {rightMove(WHEEL_MOVE_BACKWARD);leftMove(WHEEL_MOVE_BACKWARD);}void turnLeft(){rightMove(WHEEL_MOVE_FORWARD);leftMove(WHEEL_MOVE_IDEL);}void turnRight(){rightMove(WHEEL_MOVE_IDEL);leftMove(WHEEL_MOVE_FORWARD);}void stopMove(){rightMove(WHEEL_MOVE_IDEL);leftMove(WHEEL_MOVE_IDEL);}void rightMove(int state) {switch(state){case WHEEL_MOVE_FORWARD:digitalWrite(IN1,HIGH);digitalWrite(IN2,LOW);break;case WHEEL_MOVE_BACKWARD:digitalWrite(IN1,LOW);digitalWrite(IN2,HIGH);break;case WHEEL_MOVE_IDEL:digitalWrite(IN1,LOW);digitalWrite(IN2,LOW);break;}}void leftMove(int state) {switch(state){case WHEEL_MOVE_FORWARD:digitalWrite(IN3,HIGH);digitalWrite(IN4,LOW);break;case WHEEL_MOVE_BACKWARD:digitalWrite(IN3,LOW);digitalWrite(IN4,HIGH);break;case WHEEL_MOVE_IDEL:digitalWrite(IN3,LOW);digitalWrite(IN4,LOW);break;}}
