Прерывание с SoftwareSerial на Arduino

Я использую профиль последовательного порта Bluetooth для связи с Arduino. Модуль Bluetooth (HC-06) подключен к моим цифровым контактам 10 и 11 (RX, TX). Модуль работает нормально, но мне нужно прерывание при получении данных. Я не могу периодически проверять входящие данные, так как Arduino работает над чувствительной ко времени задачей (воспроизведение музыки через пассивный зуммер), и мне нужны управляющие сигналы для немедленного прерывания при получении. Я просмотрел много документов, включая собственный сайт Arduino, и все они объясняют, как установить регулярное общение, используя проверку serialPort.available() периодически. Я нашел один вопрос о последовательных прерываниях Arduino, но это слишком сложно для моего уровня. Любые предложения по чтению ввода в реальном времени через серийный?

1 ответ

Обратите внимание, что текущая версия SoftSerial фактически использует PCINT для обнаружения отдельных битов. Следовательно, я считаю, что определение его снова в главном цикле будет противоречить фактическому обнаружению битов SoftSerial.

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

в

\arduino-1.5.7\hardware\arduino\avr\libraries\SoftwareSerial\SoftwareSerial.cpp.

//
// The receive routine called by the interrupt handler
//
void SoftwareSerial::recv()
{
...
    // if buffer full, set the overflow flag and return
    if ((_receive_buffer_tail + 1) % _SS_MAX_RX_BUFF != _receive_buffer_head) 
    {
      // save new data in buffer: tail points to where byte goes
      _receive_buffer[_receive_buffer_tail] = d; // save new byte
      _receive_buffer_tail = (_receive_buffer_tail + 1) % _SS_MAX_RX_BUFF;
#ifdef YOUR_THING_ENABLE
      // Quickly check if it is what you want and DO YOUR THING HERE!
#endif
    } 
...
}

Но будьте осторожны, вы все еще в ISR, и все прерывания отключены, и вы блокируете ВСЕ. Здесь не нужно ни лоллигаг, ни лукавить. Сделай что-нибудь быстрое и уходи.

Другие вопросы по тегам