Есть ли чистый способ отключить управление RX от USBCore в leonardo?

0

На данный момент я пытаюсь использовать sparkfun promicro для управления выводом RX по своему усмотрению, используя этот эскиз https://www.sparkfun.com/tutorials/338.

Однако я столкнулся с проблемой, которая, несмотря на контроль над RX и TX, мешает USBCore.cpp в arduino. Мне интересно, есть ли чистый способ отключить управление USBCore через RX и TX-контакты, оставаясь при этом только одним USB-портом, так что я могу управлять этими контактами напрямую, даже при получении и отправке последовательных данных.

/* Pro Micro Test Code
   by: Nathan Seidle
   modified by: Jim Lindblom
   SparkFun Electronics
   date: January 20, 2012
   license: Public Domain - please use this code however you'd like.
   It provided as a learning tool.

   This code is provided to show how to control the SparkFun
   ProMicro TX and RX LEDs within a sketch. It also serves
   to explain the difference between Serial.print() and
   Serial1.print().
*/
int RXLED = 17;  // The RX LED has a defined Arduino pin
// The TX LED was not so lucky, we'll need to use pre-defined
// macros (TXLED1, TXLED0) to control that.

void setup()
{
 pinMode(RXLED, OUTPUT);  // Set RX LED as an output
 // TX LED is set as an output behind the scenes

 Serial.begin(9600); //This pipes to the serial monitor
 Serial1.begin(9600); //This is the UART, pipes to sensors attached to board
}

void loop()
{
 Serial.println("Hello world");  // Print "Hello World" to the Serial Monitor
 Serial1.println("Hello!");  // Print "Hello!" over hardware UART

 digitalWrite(RXLED, HIGH);   // set the LED on
 TXLED1; //TX LED is not tied to a normally controlled pin
 delay(1000);              // wait for a second
 digitalWrite(RXLED, LOW);    // set the LED off
 TXLED0;
 delay(1000);              // wait for a second
}

Если нет никакого способа решить эту проблему без изменения окружающей среды arduino, то я буду изменять USBCore.cpp. Однако его плохая практика, чтобы сделать это.

Теги:
arduino

1 ответ

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

Если это возможно в вашем сценарии, вы можете использовать вывод 17 в качестве INPUT, надеясь освободить еще один штырь, который затем вы можете использовать в качестве OUTPUT.

Для этого просто используйте pinMode(), чтобы установить контакт 17 в INPUT.

Это эффективно отключает функциональность RXLED. Когда USBCore записывает высокое значение на этот вывод, он просто включает нагрузочный резистор. Пока устройство, управляющее входом, может поглощать достаточный ток, даже когда подтягивание включено, это не будет иметь никакого эффекта. И поэтому нет необходимости изменять USBCore.

Edit: светодиод загорается, когда контакт 17 низкий, что означает, что источник сигнала должен опускать ток. Этого можно избежать, если это проблема, отделив дорожку печатной платы рядом со светодиодом или отпаяв светодиод или резистор.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню