我想自己在莱昂纳多的董事会上编译和传输一个阿杜诺程序。
在Arduino官方IDE中,一切都很好。我已经为编译和字节码传输启用了详细模式。
我可以看到每个命令行。
我想理解每一行。
除了最后一步,一切都很好:使用AVRDUDE进行传输。如果键入完全相同的命令,则会得到一个错误:
.avrdude: butterfly_recv(): programmer is not responding如果我用Arduino IDE上传代码,则不存在此错误。
我看到了一个不同之处- Arduino IDE在AVRDUDE调用之前显示了这一行:
强制使用1200 bps打开/关闭端口/dev/cu.usbmodem1431重置
如何通过命令行进行重置?
发布于 2021-02-09 12:17:16
我和arduino leonardo也有同样的问题。
我想分享我的解决方案给想要解决这个问题的人使用Qt。
下面是可以复制和粘贴的解决方案,还可以处理超时问题:
#include <QtCore/QString>
#include <QtCore/QDebug>
#include <QtCore/QThread>
#include <QtCore/QElapsedTimer>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
bool forceResetComPort(const QString& portName)
{
    QSerialPort serial;
    serial.setPortName(portName);
    serial.setBaudRate(1200);
    qDebug() << "Forcing reset using 1200bps open/close on port ") << portName;
    if(!serial.open(QIODevice::ReadWrite))
        return false;
    // This seems optional
    serial.setDataTerminalReady(false);
    qDebug() << "Waiting for the new upload port...";
    QElapsedTimer timeoutWatcher;
    qint64 timeoutMs = 10000;
    bool isPortPresent = true;
    const auto fetchIsPortPresent = [&]() -> bool
    {
        const auto ports = QSerialPortInfo::availablePorts();
        for(const auto& info : ports)
        {
            if(info.portName() == serial.portName())
                return true;
        }
        return false;
    };
    timeoutWatcher.start();
    // Wait for port to disconnect
    while(isPortPresent && !timeoutWatcher.hasExpired(timeoutMs))
    {
        isPortPresent = fetchIsPortPresent();
        if(isPortPresent)
            QThread::msleep(1);
    }
    serial.close();
    // Wait for port to reconnect
    while(!isPortPresent && !timeoutWatcher.hasExpired(timeoutMs))
    {
        isPortPresent = fetchIsPortPresent();
        if(!isPortPresent)
            QThread::msleep(1);
    }
 
    return !timeoutWatcher.hasExpired(timeoutMs);
}这都是时间的问题。我真的需要等待串口断开关闭串行。
这是dmesg:
[ 8566.623621] cdc_acm 1-8:1.0: failed to set dtr/rts
[ 8566.979697] usb 1-8: new full-speed USB device number 21 using xhci_hcd
[ 8567.133193] usb 1-8: New USB device found, idVendor=2341, idProduct=0036, bcdDevice= 0.01
[ 8567.133197] usb 1-8: New USB device strings: Mfr=2, Product=1, SerialNumber=0
[ 8567.133199] usb 1-8: Product: Arduino Leonardo
[ 8567.133200] usb 1-8: Manufacturer: Arduino LLC
[ 8567.134820] cdc_acm 1-8:1.0: ttyACM0: USB ACM devicehttps://stackoverflow.com/questions/43016993
复制相似问题