Проблемы с аппаратным последовательным интерфейсом (UART) на Nano 33 BLE Sense

мой новый Nano 33 BLE Sense прибыл сегодня. Я работаю над проектом по отправке данных из Nano через модуль Xbee S2C в модуль приемника, подключенный к IoT Nano 33. У меня был проект, работающий до того, как я использовал плату MPU6050 и Mega 2560, которая работала (используя программное обеспечение Serial на Mega). На стороне IoT я использую 'Uart XBeeRx (&sercom0, 5, 6, SERCOM_RX_PAD_1, UART_TX_PAD_0);' для обработки данных из Xbee. Попробовав этот синтаксис на BLE Sense, я столкнулся с проблемами и после некоторого Гугления нашел другой синтаксис. Однако мой новый код не работает до тех пор, пока он компилируется, загружается, а затем выходит из строя BLE Sense (последовательный порт исчезает из инструментов, а встроенный светодиод мигает медленно и беспорядочно). Мне нужно продолжать сбрасывать плату и подозревать, что есть какая-то проблема с моей аппаратной последовательной реализацией. Я сократил код, чтобы просто отправить данные акселерометра. Мой код выглядит следующим образом - библиотека EasyTransfer упрощает связь Xbee. Любая помощь ценится!

#include <EasyTransfer.h>
#include <Arduino_LSM9DS1.h> 

 
UART XBeeTx (digitalPinToPinName(6), digitalPinToPinName(5), NC, NC);


EasyTransfer ET;

struct SEND_DATA_STRUCTURE {

  float xAcc;
  float yAcc;
  float zAcc;
    
};

SEND_DATA_STRUCTURE myData;



// ================================================================
// ===                      INITIAL SETUP                       ===
// ================================================================

void setup() {

XBeeTx.begin(9600);

ET.begin(details(myData), &XBeeTx);      
  
}


// ================================================================
// ===                    MAIN PROGRAM LOOP                     ===
// ================================================================

void loop() {

  float x, y, z;

if (IMU.accelerationAvailable()) {
    IMU.readAcceleration(x, y, z);
    
  }

  myData.xAcc = x;
  myData.yAcc = y;
  myData.zAcc = z;

  
  ET.sendData();
  
}

, 👍1

Обсуждение

почему бы не использовать Сериал1? (и на Мега тоже), @Juraj

Привет, я попробовал подключить мой Xbee к контактам D0 и D1 (UART Rx и Tx), но возникла та же проблема, и я использовал Serial1.begin(9600) и &Serial1 в инструкции ET.begin в приведенном выше коде. Кажется, что Nano Sense теряет свое USB - соединение и блокируется. Действительно не могу понять, почему так должно работать. Я думаю, что плата в порядке, так как я могу нормально запускать некоторые примеры сценариев (например, акселерометр и печать на USB-накопителе). Google, похоже, действительно легко находит хиты для серийного оборудования UART в полном смысле этого слова!, @RobM

На двух платах используются разные ядра Arduino. IoT 33 использует семейство микросхем, общее для плат Arduino; чип Nordic Semi ARM, который в прямом смысле этого слова, намного меньше. Микросхемы ARM, используемые в этих устройствах, связаны только с этим. Имя "SERCOM_RX_PAD_1" связано с Atmel (и 33-м IoT); использование его в качестве поискового запроса для поиска решения для этого в вашем понимании может быть контрпродуктивным., @timemage

Дох! Я маппет!! Я звоню в IMU, не установив IMU.begin() в настройках. Я удалил его вместе с каким-то другим кодом, который был избыточным, но добавил его обратно, и проект работает как мечта! Блок BLE Sense работает правильно, и теперь блок приемника получает данные по каналу связи Xbee. Тем не менее, спасибо за комментарии., @RobM

@RobM, если это что-то, что имеет смысл из вопроса, таким образом, чтобы это могло быть полезно кому-то другому, вы можете опубликовать ответ на свой собственный вопрос. Если решение не имеет ничего общего с заданным вопросом, то, вероятно, лучше всего просто удалить вопрос., @timemage


1 ответ


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

2

Вы не можете звонить в IMU, если вы не инициализировали его с помощью IMU.begin()

,

Вы должны иметь возможность отметить свой собственный ответ как принятый., @timemage