Прерывание с 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, и все прерывания отключены, и вы блокируете ВСЕ. Здесь не нужно ни лоллигаг, ни лукавить. Сделай что-нибудь быстрое и уходи.