Обмен данными между двумя UART
- Войдите на сайт для отправки комментариев
Вс, 01/09/2013 - 02:01
Подскажите как дублировать данные между двумя UART, т.е. я ввожу данные в терминале, и они пересылаются на софтовый UART. В тоже время если на softwareSerial приходят данные, то они попадают ко мне в терминал.
Вот такой код не работает, проверял замыкая 9 и 10 пин (Rx и Tx).
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 9); //Rx, Tx
void setup()
{
Serial.begin(9600);
mySerial.begin(9600);
pinMode(10, INPUT);
pinMode(9, OUTPUT);
}
void loop()
{
if (Serial.available())
{
mySerial.print(Serial.read());
}
if (mySerial.available())
{
Serial.print(mySerial.read());
}
delay(10);
}
скажите а вы на что заливаете?
На Arduino Uno
SoftwareSerial.h не позволяет вести одновремено прием и передачу, так как прием (так же как и передача) является блокирующим, то есть PinChenge-прерывание используются только для отслеживания стартового бита, а сам прием построен на задержках:
void SoftwareSerial::recv() { uint8_t d = 0; // If RX line is high, then we don't see any start bit // so interrupt is probably not for us if (_inverse_logic ? rx_pin_read() : !rx_pin_read()) { // Wait approximately 1/2 of a bit width to "center" the sample tunedDelay(_rx_delay_centering); DebugPulse(_DEBUG_PIN2, 1); // Read each of the 8 bits for (uint8_t i=0x1; i; i <<= 1) { tunedDelay(_rx_delay_intrabit); DebugPulse(_DEBUG_PIN2, 1); uint8_t noti = ~i; if (rx_pin_read()) d |= i; else // else clause added to ensure function timing is ~balanced d &= noti; } // skip the stop bit tunedDelay(_rx_delay_stopbit); DebugPulse(_DEBUG_PIN2, 1); if (_inverse_logic) d = ~d; // 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; } else { _buffer_overflow = true; } }saniks, по-моему, в вашем скетче есть лишние строки: 07,08,23.
И попробуйте пример с этой странички http://arduino.cc/en/Reference/SoftwareSerial
Данные строки ничего не меняют и проба примера не поможет.