Функция availableForWrite() возвращает ошибку при компиляции для Arduino nano 33 BLE

serial arduino-nano arduino-nano-ble

В моем коде я использовал функцию availableForWrite(), как показано ниже. Когда я компилирую его для nano 33 IoT, все в порядке и отлично компилируется. Однако, когда я меняю плату на nano 33 BLE, я получаю два сценария: 1. использование Arduino IDE в качестве компилятора> не дает ошибок, но плата не после программирования. 2. используя веб-компилятор на веб-сайте Arduino > выдайте следующую ошибку:

error: 'class Arduino::USBSerial' has no member named 'availableForWrite'; did you mean 'available'?"

мой код:

NoreplyTime=millis();
TimePassed= millis()-NoreplyTime;

         while(!Serial.availableForWrite()){
         TimePassed= millis()-NoreplyTime;
         if (TimePassed>1000){
         return false;  
         }
        }

даже просто имея:

while (!Serial.availableForWrite());

выдает ошибку ТОЛЬКО для платы nano 33 BLE!

Мысли?

, 👍0

Обсуждение

"но плата не после программирования" Что не так? Нужно дальше описывать. «веб-компилятор на веб-сайте Arduino», какой сайт компилятора с какими настройками? Возможно, используемое ядро на этом сайте не реализует этот метод., @chrisl

Извините ! Мне нужно было уточнить дальше. После программирования nano 33 BLE кажется, что ЦП не может выполнить эту командную строку и не может установить последовательное соединение. Удивительно, но нет никаких проблем, когда я программирую nano 33 IOT с тем же кодом, и он отлично работает . Мне кажется, что последовательная библиотека не включает команду «Serial.availableForWrite()» для плат BLE., @Afshin


1 ответ


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

1

В новых ядрах Arduino используется общий API, поддерживаемый в отдельном репозитории. Это было давно скопировано из ядра AVR и не содержит каких-либо функций, добавленных позже в другие ядра. Функция Stream.availableForWrite была добавлена в репозиторий Arduino API 5 месяцев назад.

Для ядра Arduino Mbed они создали ветку в репозитории API Arduino для перемещения ядра Arduino. в пространстве имен С++ «arduino». Но это было до того, как был добавлен availableForWrite. Таким образом, версия API, используемая в ядре Mbed, не имеет этой функции.

Я сообщил об этом как об ошибке. Даже если они добавят функцию в API, я сомневаюсь, что они добавят ее реализацию в Serial.

,

Спасибо за объяснение. Я новичок в программировании и понятия не имею, как это исправить, но тем временем я просто удалил его из своего кода и попытался убедиться, что у меня всегда есть место для получения данных! У меня вопрос, может показаться глупым, ссылка, которую вы предоставили для репозитория, содержит инструкции по установке, я должен установить его или Arduino IDE сделал это сам?, @Afshin

@Afshin, API Arduino является частью пакета плат, который вы установили для Nano 33 BLE., @Juraj