玄之神坞 2024-10-29 00:33 采纳率: 41.7%
浏览 11

Arduino UNO L298N电机驱动板问题

这两天准备做个红外遥控uno小车,但是在使用L293D电机驱动板时无论进行前进后退左转右转M1与M2电机接口始终无响应。但是在后续逐步测试时电机,四个电机接口,单独接外接电源,外接电源与电脑同时供电都测试没问题😨
以下是我的代码部分,麻烦各位帮忙解答😊谢谢!

#include <AFMotor.h>

#include <IRremote.h>

 

AF_DCMotor motor1(1);
AF_DCMotor motor2(2);
AF_DCMotor motor3(3);
AF_DCMotor motor4(4);

int RECV_PIN = A4;
IRrecv irrecv(RECV_PIN);
decode_results results;

// 用于存储上一个按键的值
//unsigned long lastCode = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("Enabling IRin");
  irrecv.enableIRIn(); // Start the receiver
  Serial.println("Enabled IRin");
}
 
void loop() {
  if (irrecv.decode(&results)) { // 检查是否接收到红外遥控信号
    Serial.println(results.value, HEX); // 输出指令信息

    // 检查是否为重复码,如果是则忽略
    if (results.value == 0xFFFFFFFF) {
      irrecv.resume();
      return;
    }
    
    // 使用 switch 语句来判断接收到的红外值
    switch (results.value) {
      case 0xFF18E7: // 前进
        Serial.println("Moving Forward");
        motor1.setSpeed(255);
        motor2.setSpeed(255);
        motor3.setSpeed(255);
        motor4.setSpeed(255);
        motor1.run(FORWARD);
        motor2.run(FORWARD);
        motor3.run(FORWARD);
        motor4.run(FORWARD);
        break;
      case 0x3D9AE3F7: // 前进
        Serial.println("Moving Forward");
        motor1.setSpeed(255);
        motor2.setSpeed(255);
        motor3.setSpeed(255);
        motor4.setSpeed(255);
        motor1.run(FORWARD);
        motor2.run(FORWARD);
        motor3.run(FORWARD);
        motor4.run(FORWARD);
        break;

      case 0xFF4AB5: // 后退
        Serial.println("Moving Backward");
        motor1.setSpeed(255);
        motor2.setSpeed(255);
        motor3.setSpeed(255);
        motor4.setSpeed(255);
        motor1.run(BACKWARD);
        motor2.run(BACKWARD);
        motor3.run(BACKWARD);
        motor4.run(BACKWARD);
        break;
      case 0x1BC0157B: // 后退
        Serial.println("Moving Backward");
        motor1.setSpeed(255);
        motor2.setSpeed(255);
        motor3.setSpeed(255);
        motor4.setSpeed(255);
        motor1.run(BACKWARD);
        motor2.run(BACKWARD);
        motor3.run(BACKWARD);
        motor4.run(BACKWARD);
        break;

      case 0xFF10EF: // 右转
        Serial.println("Turning Right");
        motor1.setSpeed(255);
        motor2.setSpeed(255);
        motor3.setSpeed(255);
        motor4.setSpeed(255);
        motor1.run(FORWARD);
        motor2.run(BACKWARD);
        motor3.run(BACKWARD);
        motor4.run(FORWARD);
        break;
      case 0x449E79F: // 右转
        Serial.println("Turning Right");
        motor1.setSpeed(255);
        motor2.setSpeed(255);
        motor3.setSpeed(255);
        motor4.setSpeed(255);
        motor1.run(FORWARD);
        motor2.run(BACKWARD);
        motor3.run(BACKWARD);
        motor4.run(FORWARD);
        break;

      case 0xFF5AA5: // 左转
        Serial.println("Turning Left");
        motor1.setSpeed(255);
        motor2.setSpeed(255);
        motor3.setSpeed(255);
        motor4.setSpeed(255);
        motor1.run(BACKWARD);
        motor2.run(FORWARD);
        motor3.run(FORWARD);
        motor4.run(BACKWARD);
        break;
      case 0x8C22657B: // 左转
        Serial.println("Turning Left");
        motor1.setSpeed(255);
        motor2.setSpeed(255);
        motor3.setSpeed(255);
        motor4.setSpeed(255);
        motor1.run(BACKWARD);
        motor2.run(FORWARD);
        motor3.run(FORWARD);
        motor4.run(BACKWARD);
        break;

      case 0x488F3CBB:// 停止
            motor1.run(RELEASE);
            motor2.run(RELEASE);
            motor3.run(RELEASE);
            motor4.run(RELEASE);
            break;
      case 0xFF38C7:
            motor1.run(RELEASE);
            motor2.run(RELEASE);
            motor3.run(RELEASE);
            motor4.run(RELEASE);
            break;

      default:
        Serial.println("Unknown Command");
        break;
    }

    // 更新上一个指令值
    //lastCode = results.value;

    irrecv.resume(); // 接收下一指令
  }
  delay(100);
}
  • 写回答

1条回答 默认 最新

  • 无疆76 2024-10-29 00:34
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从您提供的代码和描述来看,Arduino UNO与L298N电机驱动板之间似乎没有正确通信。这里有几个可能的问题和解决方法:

    1. 供电问题:虽然您提到单独给电机供电时它们可以正常工作,但是请确保Arduino和L298N都获得稳定的电源。有时候,共享电源可能导致电压波动或不稳定,影响通信。
    2. 连接问题:检查Arduino与L298N之间的连接是否正确。确保所有接线都牢固地插入相应的接口。
    3. 库和驱动:确保您已正确安装并导入了所需的库,如AFMotorIRremote。有时候,不完整的库安装或错误的版本可能导致问题。
    4. 代码逻辑:从您的代码来看,前进和后退的指令有两个相同的代码(例如,前进有两个值为0xFF18E70x3D9AE3F7)。请确保红外遥控器的按键值与您的代码中的匹配。此外,左转和右转也有两组相似的值,这可能是您无意中设置的重复值。请检查您的遥控器是否产生了独特的代码。
    5. 串口通信:在测试过程中,可以使用Serial.printSerial.println来输出电机状态或其他调试信息,这样可以帮助您跟踪问题。确保Arduino的串口通信正常工作,并且您已经打开了串口监视器来查看输出。
    6. L298N的配置:确保L298N的配置正确。有时候,不正确的配置或跳线可能导致电机不工作。
    7. 重置Arduino和L298N:尝试断开电源,然后重新连接,看看是否可以解决问题。

    如果以上方法都不能解决问题,建议您检查硬件连接和配置是否正确,并考虑使用其他电机驱动板或红外遥控器进行测试,以确定问题是否特定于某个组件。

    评论

报告相同问题?

问题事件

  • 修改了问题 10月29日
  • 创建了问题 10月29日