esp32为什么不能同时负载28BYJ-48步进电机和12864OLED屏

本人最近才开始学习arduino并遇到了问题。esp32为什么不能同时负载28BYJ-48步进电机和12864OLED屏,单独烧入驱动电机的代码,电机可以正常转动,但是加上OLED屏的代码再烧写,电机就无法转动了,uln2003电机驱动板上的指示灯走得很慢,电机只是内部有轻微抽动,无法正常转动。我已经把电机单独接入外部电源了,也共地了,还是不行。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    由于添加了OLED屏代码后电机驱动出现问题,可能是两者在使用时发生了冲突或占用了同一组I/O口,导致电机驱动出现问题。可以按照以下方法进行排查:

    1. 检查使用的I/O引脚是否有重复:查看电机驱动板上的引脚连接和OLED屏的引脚连接,确保没有重复使用了同样的I/O口。如果发现有相同的引脚被使用了,请尝试更换不同的引脚并修改相应代码。

    2. 检查需要使用到的外部库是否存在冲突:查看需要使用的OLED屏库和步进电机库是否存在冲突。可以在代码中先分别单独运行电机和OLED屏代码,确保它们分别可以正常工作。如果单独运行时也存在问题,可能是代码或者硬件问题。如果单独运行时没有问题,可以检查是否在两个代码中使用到了相同的库,如果有,尝试使用不同的库。

    3. 检查程序中是否存在卡顿或者阻塞:在程序中会有阻塞代码或者需要等待的语句。如果电机驱动和OLED屏都需要占用时间,则可能会出现卡顿或者阻塞。可以尝试使用多线程或者定时器等方式解除卡顿。如果想快速验证是否存在阻塞,可以在电机驱动和OLED屏代码中添加日志或者调试信息,查看日志输出的时间是否存在延迟。

    例如,可以在代码中添加如下日志:

    #define DEBUG_MODE 1
    
    #ifdef DEBUG_MODE
    #define LOG(...)    Serial.print(__VA_ARGS__)
    #else
    #define LOG(...)
    #endif
    
    void setup()
    {
      Serial.begin(9600);
    }
    
    void loop()
    {
      LOG("Enter loop\n");
      ... // 代码逻辑
      LOG("End loop\n");
    }
    

    通过输出日志,可以查看电机的驱动和OLED屏的驱动是否存在延迟,以便更好地排查问题。

    如果以上排查方法仍然无法解决问题,可能需要更多的硬件信息和代码细节来进一步诊断问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^