开发板连接方式如下图:
    项目2  线控小车 - 图1

    马达 马达驱动板
    马达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

    小车组装效果图如下:

    上部:
    项目2  线控小车 - 图2

    底部:
    项目2  线控小车 - 图3

    对应代码如下:

    1. //使用L298N驱动板
    2. // IN1连接引脚4
    3. // IN2连接引脚5
    4. // IN3连接引脚6
    5. // IN4连接引脚7
    6. int IN1=4;
    7. int IN2=5;
    8. int IN3=6;
    9. int IN4=7;
    10. //连接PS2摇杆
    11. // INX连接引脚2
    12. // INX连接引脚3
    13. int INX = 2;
    14. int INY = 3;
    15. const int WHEEL_MOVE_IDEL = 0;
    16. const int WHEEL_MOVE_FORWARD = 1;
    17. const int WHEEL_MOVE_BACKWARD = 2;
    18. void setup() {
    19. //初始化电机不动
    20. pinMode(IN1, OUTPUT);
    21. digitalWrite(IN1, HIGH);
    22. pinMode(IN2, OUTPUT);
    23. digitalWrite(IN2, HIGH);
    24. pinMode(IN3, OUTPUT);
    25. digitalWrite(IN3, HIGH);
    26. pinMode(IN4, OUTPUT);
    27. digitalWrite(IN4, HIGH);
    28. }
    29. void loop() {
    30. //读取摇杆输入信息
    31. int v = analogRead(INX);
    32. int h = analogRead(INY);
    33. bool shouldMove = false;
    34. bool shouldTurn = false;
    35. //左右运动优先判定
    36. if(h<300) {
    37. //向右转
    38. Serial.println("turn right");
    39. turnRight();
    40. shouldTurn = true;
    41. return;
    42. }
    43. else if(h>800) {
    44. //向左转
    45. Serial.println("turn left");
    46. turnLeft();
    47. shouldTurn = true;
    48. return;
    49. } else {
    50. shouldTurn = false;
    51. }
    52. if(v<300) {
    53. //向前运动
    54. goForward();
    55. shouldMove = true;
    56. Serial.println("forward");
    57. return;
    58. }
    59. else if(v>800) {
    60. //向后运动
    61. goBackward();
    62. shouldMove = true;
    63. Serial.println("backward");
    64. return;
    65. } else {
    66. shouldMove = false;
    67. }
    68. if(!shouldTurn && !shouldMove){
    69. //没有按摇杆,停止运动
    70. keepIdle();
    71. }
    72. }
    73. void keepIdle() {
    74. rightMove(WHEEL_MOVE_IDEL);
    75. leftMove(WHEEL_MOVE_IDEL);
    76. }
    77. void goForward() {
    78. rightMove(WHEEL_MOVE_FORWARD);
    79. leftMove(WHEEL_MOVE_FORWARD);
    80. }
    81. void goBackward() {
    82. rightMove(WHEEL_MOVE_BACKWARD);
    83. leftMove(WHEEL_MOVE_BACKWARD);
    84. }
    85. void turnLeft(){
    86. rightMove(WHEEL_MOVE_FORWARD);
    87. leftMove(WHEEL_MOVE_IDEL);
    88. }
    89. void turnRight(){
    90. rightMove(WHEEL_MOVE_IDEL);
    91. leftMove(WHEEL_MOVE_FORWARD);
    92. }
    93. void rightMove(int state) {
    94. switch(state){
    95. case WHEEL_MOVE_FORWARD:
    96. digitalWrite(IN1,HIGH);
    97. digitalWrite(IN2,LOW);
    98. break;
    99. case WHEEL_MOVE_BACKWARD:
    100. digitalWrite(IN1,LOW);
    101. digitalWrite(IN2,HIGH);
    102. break;
    103. case WHEEL_MOVE_IDEL:
    104. digitalWrite(IN1,LOW);
    105. digitalWrite(IN2,LOW);
    106. break;
    107. }
    108. }
    109. void leftMove(int state) {
    110. switch(state){
    111. case WHEEL_MOVE_FORWARD:
    112. digitalWrite(IN3,HIGH);
    113. digitalWrite(IN4,LOW);
    114. break;
    115. case WHEEL_MOVE_BACKWARD:
    116. digitalWrite(IN3,LOW);
    117. digitalWrite(IN4,HIGH);
    118. break;
    119. case WHEEL_MOVE_IDEL:
    120. digitalWrite(IN3,LOW);
    121. digitalWrite(IN4,LOW);
    122. break;
    123. }
    124. }