Отключить экран Ethernet

Я пытаюсь использовать Ethernet Shield и EasyVR (распознавание голоса) вместе. Экран Ethernet использует те же контакты, что и EasyVR, но easyVR работает нормально, если я не вызываю Ethernet.begin(). Есть ли способ отключить сетевой экран, чтобы снова использовать EasyVR?

Я не встречал в классе Ethernet таких методов, как "освобождение" или "отключение".

Спасибо!

, 👍5

Обсуждение

EasyVR использует только контакты 0 и 1 (UART) (или 12 и 13, если выбран SW-serial). Экран Ethernet, похоже, вообще их не использует (только SPI и несколько других цифровых контактов). Кажется более вероятным, что две библиотеки конфликтуют друг с другом., @Gerben

Ой! хорошо спасибо!. Но это работает, если я импортирую все необходимые библиотеки. easyvr перестает работать, когда я впервые использую Ethernet. Поэтому мне интересно, смогу ли я отключить экран Ethernet после его использования. Спасибо, @Gonzalo Solera

Что происходит после вызова Ethernet.begin()? Кроме того, вы уверены, что на вашей плате достаточно памяти?, @Anonymous Penguin


1 ответ


3

Вы правильно определили корень проблемы, оба шилда пытаются использовать одни и те же пины. Чтобы обойти это, нам нужно знать, какие контакты используются и для чего.

Документация Ethernet Shield раскрывает следующее:

Плата Arduino обменивается данными с шилдом по шине SPI. Это цифровые контакты 11, 12 и 13 на Uno и контакты 50, 51 и 52 на Mega. На обеих платах контакт 10 используется как SS. На Mega аппаратный контакт SS, 53, не используется для выбора микросхемы контроллера Ethernet, но его необходимо оставить в качестве выхода, иначе интерфейс SPI не будет работать.

https://www.arduino.cc/en/Reference/Ethernet

Документация к библиотеке Sparkfun EasyVR не столь явна, но один из примеров дает нам еще одну подсказку:

#if defined(__SAMD21G18A__)
  // Экранная перемычка на HW (для нуля используйте порт программирования)
  #define port SERIAL_PORT_HARDWARE
  #define pcSerial SERIAL_PORT_MONITOR
#elif defined(SERIAL_PORT_USBVIRTUAL)
  // Shield Jumper на HW (для Leonardo и Due используйте Native Port)
  #define port SERIAL_PORT_HARDWARE
  #define pcSerial SERIAL_PORT_USBVIRTUAL
#else
  // Экранирующая перемычка на SW (используя контакты 12/13 или 8/9 в качестве RX/TX)
  #include "SoftwareSerial.h"
  SoftwareSerial port(12, 13);
  #define pcSerial SERIAL_PORT_MONITOR
#endif

#include "EasyVR.h"

EasyVR easyvr(port);

EasyVR-Arduino/examples/TestEasyVR/TestEasyVR .ино

Этот блок кода определяет, как настроить последовательную связь. Первые два оператора if предназначены для разных плат, а третий настраивает последовательное соединение программного обеспечения... и говорит, что есть два варианта: контакты 12/13 ИЛИ 8/9! Если есть два варианта, должен быть способ переключить его на самой плате.

И обязательно! Обратите внимание на белую коробку с надписью «SW Serial Pins». Джекпот!

Вот что говорится в руководстве:

На нижней стороне платы есть два резистора SMD, которые можно перемещать, чтобы выбрать два контакта Arduino, к которому EasyVR будет подключен в последовательном программном режиме (перемычка режима на SW).

  • RX – контакт программного последовательного приемника.
    • D12 – использовать цифровой контакт 12 в качестве последовательного приемника (по умолчанию).
    • D8 – используйте цифровой контакт 8 в качестве последовательного приемника.
  • TX – контакт программного последовательного передатчика
    • D13 — использовать цифровой контакт 13 в качестве последовательного передатчика (по умолчанию)
    • D9 — использовать цифровой контакт 9 в качестве последовательного передатчика.

Выбор контактов 12–13 сохранен для обратной совместимости с предыдущими аппаратными версиями Щит EasyVR. Однако эти контакты также могут использоваться для интерфейса SPI, поэтому другой выбор контактов 8- 9 предоставляется. Если вы хотите использовать другие контакты, убедитесь, что контакт приемника поддерживает прерывания изменения.

,

вопрос из 2015 года, когда у EasyVR были только контакты 12 и 13 для SW Serial, @Juraj

Я взволнован, потому что этот вопрос появился в разделе «без ответа», но вы совершенно правы. Я не знала, что ему 3 года. :-/, @djbeadle