开发板连接方式如下图:

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

底部:

对应代码如下:
//使用L298N驱动板// IN1连接引脚4// IN2连接引脚5// IN3连接引脚6// IN4连接引脚7int IN1=4;int IN2=5;int IN3=6;int IN4=7;//连接PS2摇杆// INX连接引脚2// INX连接引脚3int INX = 2;int INY = 3;const int WHEEL_MOVE_IDEL = 0;const int WHEEL_MOVE_FORWARD = 1;const int WHEEL_MOVE_BACKWARD = 2;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);}void loop() {//读取摇杆输入信息int v = analogRead(INX);int h = analogRead(INY);bool shouldMove = false;bool shouldTurn = false;//左右运动优先判定if(h<300) {//向右转Serial.println("turn right");turnRight();shouldTurn = true;return;}else if(h>800) {//向左转Serial.println("turn left");turnLeft();shouldTurn = true;return;} else {shouldTurn = false;}if(v<300) {//向前运动goForward();shouldMove = true;Serial.println("forward");return;}else if(v>800) {//向后运动goBackward();shouldMove = true;Serial.println("backward");return;} else {shouldMove = false;}if(!shouldTurn && !shouldMove){//没有按摇杆,停止运动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 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;}}
