Почему я получаю avrdude: stk500v2_ReceiveMessage(): timeout error when uploading to Arduino Mega?

У меня есть клон Arduino Mega, и я давно им не пользовался. Я помню, что он не работал, поэтому, когда я подключил его и попытался загрузить в него код, он, конечно же, не сработал. Поэтому я подключил Uno, и все заработало. Мега - это Atmel 2560. Вот мой код:

#define distanceForward A0
#define distanceLeft A1
#define distanceRight A2
#define distanceRightAngle A3
#define distanceLeftAngle A4
#define distanceBack A5
int talk = 2;

void setup() {
  Serial.begin(9600);
  pinMode(talk, OUTPUT);
  pinMode(distanceForward, INPUT);
  // /\ Контакт инфракрасного датчика расстояния для входного сигнала на Arduino, передняя панель
  pinMode(distanceLeftAngle, INPUT);
  // /\ Контакт инфракрасного датчика расстояния для входного сигнала на Arduino, левый угол
  pinMode(distanceRightAngle, INPUT);
  // /\ Контакт инфракрасного датчика расстояния для входного сигнала на Arduino, под прямым углом
  pinMode(distanceLeft, INPUT);
  // /\ Контакт инфракрасного датчика расстояния для входного сигнала на Arduino, слева
  pinMode(distanceRight, INPUT);
  // /\ Контакт инфракрасного датчика расстояния для входного сигнала на Arduino, правый
  pinMode(distanceBack, INPUT);
  // /\ Контакт инфракрасного датчика расстояния для входного сигнала на ардуино, сзади
}

void hall_roam() {
  Serial.write("forward");
  if (analogRead(distanceLeftAngle) < 30) {
    Serial.write("right");
    if (analogRead(distanceLeftAngle) > 30) {
      Serial.write("forward");
    }
    if (analogRead(distanceRightAngle) < 30) {
      Serial.write("left");
      if (analogRead(distanceRightAngle) < 30) {
        Serial.write("forward");
      }
      if (analogRead(distanceForward) < 60) {
        Serial.write("stop");
        if ((analogRead(distanceLeft) < 60) && (analogRead(distanceRight) < 60)) {
          Serial.write("left");
          if (analogRead(distanceForward) > 60) {
            Serial.write("stop");
          }
        }
      }
      if ((analogRead(distanceLeft) > 60) && (analogRead(distanceRight) > 60)) {
        Serial.write("left");
        if (analogRead(distanceForward) > 60) {
          Serial.write("stop");
        }
      }
      if ((analogRead(distanceLeft) > 60) && (analogRead(distanceRight) < 60)) {
        Serial.write("left");
        if (analogRead(distanceForward) > 60) {
          Serial.write("stop");
        }
      }
      if ((analogRead(distanceLeft) > 60) && (analogRead(distanceRight) < 60)) {
        Serial.write("left");
        if (analogRead(distanceForward) > 60) {
          Serial.write("stop");
        }
      }
      if ((analogRead(distanceLeft) < 60) && (analogRead(distanceRight) > 60)) {
        Serial.write("right");
        if (analogRead(distanceForward) > 60) {
          Serial.write("stop");
        }
      } else {
        Serial.write("forward");
      }
    }
  }
}

void roam() {
  Serial.write("forward");
  if (analogRead(distanceForward) < 60) {
    Serial.write("stop");
    Serial.write("left");
    if (analogRead(distanceForward) > 60) {
      Serial.write("stop");
      Serial.write("forward");
    }
  }
}

void talkbb8() {
  pinMode(talk, HIGH);
  pinMode(talk, LOW);
}

void chill() {
  Serial.write("stop");
  talkbb8();
}

void loop() {
  if ((analogRead(distanceLeft) < 60) && (analogRead(distanceRight) < 60)) {
    hall_roam();
  } else if ((analogRead(distanceForward) < 60) && (analogRead(distanceBack) < 60)) {
    Serial.write("left");
    if ((analogRead(distanceLeft) < 60) && (analogRead(distanceRight) < 60)) {
      Serial.write("stop");
      hall_roam();
    }
  } else {
    roam();
  }
}

Если скобка не на месте или что-то в этом роде, то, скорее всего, ничего страшного. Я говорю о символах. Есть ли в символах что-то, что могло бы запороть загрузку, как три "!!!" проблема, о которой я слышал, или что-то в этом роде. Возможно, мой iMac не распознает встроенный в него USB-чип. Если да, то как мне это исправить?

, 👍4


5 ответов


4

Сообщение об ошибке в основном означает, что программист не может связаться с загрузчиком на устройстве. Код, который вы пытаетесь загрузить, не имеет отношения к проблеме.

Это может быть вызвано одной из четырех возможных причин. Они:

  1. Выбран неверный порт:

    Если индикатор TX/RX не мигает, возможно, вы выбрали неправильный порт. Если один из них мигает, вы используете не тот порт. Однако, возможно, стоит проверить еще раз, иногда устройства USB COM устанавливаются на странные номера портов.

  2. Плата не находится в режиме Bootloader:

    По какой-то причине Arduino Mega не запускает загрузчик. Если программатор не сбрасывает микро перед попыткой подключения, это может быть причиной. Попробуйте перезагрузить плату (нажмите и отпустите кнопку), пока программатор пытается подключиться. Иногда программы, работающие в замкнутом цикле, не позволяют загрузчику подключиться. В противном случае, возможно, перегорели предохранители или стерся код. Вам нужно будет перепрошить загрузчик и правильные предохранители, опять же, см. соответствующую информационную страницу для вашего устройства.

  3. Только для Arduino Mega 2560: программное обеспечение ATmega8U/16U

    Может не работать и требует перепрограммирования. См. раздел «Программирование» на информационной странице. Вам потребуется прошивка и совместимое с Atmel программное обеспечение DFU (обновление прошивки устройства) на вашем компьютере для перепрошивки цели.

  4. Повреждение оборудования:

    Возможно аппаратное повреждение платы, AVR или чипа FTDI. Пришло время купить другую плату.

Вы можете проверить этот ответ.

,

есть только два порта, но когда я подключаю тот, который работает, появляется третий, когда с мега не работает. может дело в usb чипе, @techset

Не похоже, что это проблема, или вы не дали им решения, я не знаю., @techset


-1

Если у вас возникла проблема с тайм-аутом, убедитесь, что на плате используется резонатор с частотой 16 МГц.

изменить

mega.menu.cpu.atmega2560.upload.protocol=wiring

Кому:

mega.menu.cpu.atmega2560.upload.protocol=stk500v2

У меня возникла эта проблема после изменения значения кристалла, и изменение параметров решило указанную выше проблему.

,

1

Я попробовал все решения, перечисленные на этой странице:

  • изменены порты,
  • проверен правильный порт в Arduino IDE,
  • перезапущен,
  • повторное подключение
  • купил новый arduino mega,
  • и т. д.

Ничего не помогло.

Наконец сдался и использовал веб-версию Arduino IDE, и она отлично работала.

,

1

Если у вас возникла проблема с тайм-аутом, убедитесь, что на плате используется резонатор с частотой 16 МГц.

изменить

mega.menu.cpu.atmega2560.upload.protocol=проводка Кому:

mega.menu.cpu.atmega2560.upload.protocol=stk500v2

Спасибо! Решил мою проблему!

,

0

У меня были те же проблемы на MAC OSX El Capitan (старый iMAC) с использованием IDE 1.8.x, и, конечно же, JAVA выполнила обновление. Я регрессировал драйверы Arduino AVR до 1.6.21 (как указано в Интернете), и это не устранило ошибки тайм-аута.

Я сдался и использовал IDE 1.8.9 на своей OSX MB Pro, и она работала безупречно.

Я думаю, что проблема заключалась в версиях Java и драйверах IDE.

,