Показания Arduino корректно обновляются в Windows, но не в Linux

Я написал простой скрипт для получения угловых измерений от магнитного датчика. Скрипт очень хорошо работает в Windows. Однако при компиляции скрипта на Linux VirtualBox (Ubuntu 20.04) датчик повторяет первое показание угла и не меняется от этого, несмотря на изменение угла. Нет никаких ошибок/предупреждений, выдаваемых Windows или Linux на любом этапе компиляции/загрузки.

Загрузка сценария в Windows и последующий просмотр в последовательном мониторе Linux работает. Однако загрузка его в Linux и последующий просмотр в мониторе последовательного порта Windows не работает ("Плата недоступна"), даже при подключении платы к Linux, а не к Windows.

Я сравнил обе системы, и все оказалось одинаковым: одна и та же плата Arduino Uno R3, Arduino IDE 1.8.19 на обеих системах, платы Arduino AVR 1.8.3 на обеих, "Arduino Uno" в качестве платы на обоих выбрана библиотека SimpleFOC v2.2.0 на обоих. Единственная разница, которую я вижу, заключается в том, что порт Windows — COM3, а порт Linux — /dev/ttyACM0.

Мой сценарий выглядит следующим образом, и я был бы признателен за любую помощь или совет, чтобы заставить его работать в Linux. Спасибо.

#include <SimpleFOC.h>

#define PI 3.1415926535897932384626433832795

// Экземпляр магнитного датчика
MagneticSensorSPI AS5x4x = MagneticSensorSPI(8, 14, 0x3FFF);

void setup() {
  // инициализируем оборудование магнитного датчика
  AS5x4x.init();

  // используем мониторинг с серийным номером
  Serial.begin(9600);

  Serial.println("Ready.");
  _delay(1000);
}

void loop() {
  Serial.println(AS5x4x.getAngle()); // отображаем угол
}

, 👍1

Обсуждение

Скомпилируйте/загрузите под Linux, а затем переместите плату в систему Windows и откройте последовательный монитор. И наоборот. Сообщите нам, связано ли такое поведение с системой, из которой оно было скомпилировано/загружено, или с системой, к которой оно подключено. Если он соответствует системе, из которой он был собран/загружен, возможно, укажите номера версий для всех IDE, библиотек, ядра платы и т. д., @timemage

Загрузка Windows + серийный монитор Linux работает. Загрузка Linux + серийный монитор Windows не работает ("Плата недоступна"). Использование Arduino 1.8.19 как в Windows, так и в Ubuntu; Плата Ардуино Уно R3. Спасибо за любую дальнейшую помощь/предложения., @Vuro H

«**все** IDE, *библиотеки*, *ядро платы* и т. д.» На самом деле вы можете быть единственным человеком, который может окончательно ответить на этот вопрос. Нужно или нет - другой вопрос. В _любом_ случае информация, необходимая для ответа на него, должна быть в вопросе, когда на него будет дан ответ. Вы почти наверняка обнаружите разницу в том, что вы установили. Но простое указание на это само по себе не является полезным ответом. «Ядро платы», о котором я упоминал, — это версия, которая указана в вашем диспетчере плат для любой платы, которую вы используете., @timemage

Хорошо, я сравнил обе системы, но все кажется одинаковым... Arduino IDE 1.8.19 на обеих системах, Arduino AVR Boards 1.8.3 на обеих, библиотека SimpleFOC v2.2.0 на обеих. Дайте мне знать, если у вас есть другие предложения, еще раз спасибо за помощь., @Vuro H

Пожалуйста, сравните также выбранную плату Arduino. Компиляция и загрузка работали без ошибок в Linux? Работала ли загрузка Linux и последовательный монитор Linux до того, как вы подключили Arduino к Windows? _Пожалуйста_ добавьте эту важную информацию к своему вопросу, [отредактировав] его, _не_ оставляйте комментарии. Я предлагаю совершить [экскурсию], чтобы узнать, как работает этот сайт. Это не форум., @the busybee

Хорошо, я отредактировал и обновил исходный вопрос с этими деталями. Будем признательны за любую помощь или предложения, которые вы можете предоставить., @Vuro H


1 ответ


Лучший ответ:

0

Оказалось, что диспетчер библиотек Arduino давал мне неверную информацию об установленной версии библиотеки. Если удалить библиотеку, которую он использовал, а затем установить правильную библиотеку, соответствующую требуемому номеру версии, код теперь работает хорошо.

,