Два сериала can' t работают над той же самой скоростью

У меня есть устройство, которое сидит на булавках 10/11 ООН Ардуино. Я пытаюсь послать команды из своего PC, используя Ардуино, чтобы передать мои команды к устройству через Последовательный.

Проблема состоит в том, что, если я использую скорость 9600 и для устройства и для коммуникации USB, тогда мои команды повреждены. Некоторые письма заменяются странными символами и т.д. Устройство использует 9600 скоростей в бодах.

Если я изменяю скорость коммуникации PC к 4800 (или любая скорость кроме 9600), все прекрасно. Но я должен использовать различные скорости для коммуникации.

Я не доволен работой, потому что я не понимаю то, что продолжается. Кто-то мог объяснить, почему те же самые скорости последовательного порта вызывают проблемы?

Вот мой код:

#include 

#define rxPin 11
#define txPin 10

SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);

 void setup()
 {
   digitalWrite(4,HIGH);//1 - disable
   mySerial.begin(9600);
   Serial.begin(19200);
   while (!Serial) {;} //wait for serial port to connect. Needed for native USB port only
   Serial.println("Begin");
 }

 void loop()
 {
  if (mySerial.available()) 
  {
    char c = mySerial.read();
    Serial.write(c);  
  }
  if (Serial.available()) 
  {
    char c = Serial.read();
    mySerial.write(c); 
  }
 }
0
de
SoftwareSerial не мой фаворит и я didn' у t есть хороший вкус с ним. Но так или иначе возможно необходимо предоставить еще некоторую подробную информацию об устройстве, которое вы соединяете на булавке 10 и 11.
добавлено автор mike nelson, источник
Спасибо за детали устройства. Если это работает с USB к модулю TTL, то мы должны думать о коде. Пожалуйста, дайте попытке код, который я упомянул. И еще больше, попытайтесь использовать аппаратные средства, последовательные вместо этого.
добавлено автор mike nelson, источник
Но, у Uno Ардуино есть только одно аппаратное средство, последовательное с булавками 0:RX, 1:TX. Затем вы can' t используют коммуникацию PC через USB. Вы хотели бы считать также Ардуино Мега, у которого есть 4 Последовательных порта.
добавлено автор mike nelson, источник
@konstantin можно ли попытаться "вдохнуть" коммуникацию? Я имею в виду, когда коммуникация продолжается, соедините провод RX USB TTL к булавке TX Ардуино, затем к RX и проверке, где коммуникация испорчена
добавлено автор Tom Collins, источник
Возможно, перерыв от поступающего байта изменяет что-то в коммуникабельном байте SoftwareSerial. Это возможно. Возможно, сервопривод имеет некоторое программное обеспечение, последовательное также, и требует прекрасного выбора времени последовательного сигнала. Чтобы избежать столкновений, можно сначала прочитать сплошную линию как ответ шоу @Sener. Но вы лучше используете последовательный порт аппаратных средств arduino мега или arduino leonardo.
добавлено автор Standback, источник
baudrate сервопривода мог быть несколькими процентами выше или ниже. Использование SoftwareSerial зафиксировало baudrates, вы не можете изменить это. Последовательные аппаратные средства вычисляют стоимость для регистра uart. Я думаю, что последовательные аппаратные средства могут установить немного отличающуюся скорость в бодах.
добавлено автор Standback, источник
@Sener устройство является сервомотором RMCS 2201: Свяжитесь со спекуляциями Это установило 9600 скоростей в бодах. Я соединил его непосредственно с COM с конвертером TTL, и это хорошо работает. Таким образом, я предполагаю, есть проблема где-нибудь в моем коде. Попробует ваш буферизующий код.Thank you! Возможно, можно ли предложить, чтобы что-то заменило SoftwareSerial?
добавлено автор nha, источник
@Jot, буферизованные, читают didn' t помощь. Я приказал, чтобы Мега решило это.Thank you!
добавлено автор nha, источник

1 ответы

Если вы уверены относительно устройства, вы соединились со своим Uno Ардуино с точки зрения его, имеет надежную работу встроенного микропрограммного обеспечения последовательной передачи его, Вам, возможно, понадобились бы некоторые буферизующие прежде, чем передать ваши команды;

#define RECORD_SIZE 100
void loop()
{
    RelayDataIfAvaliable();
}
void RelayDataIfAvaliable() {
    static char buffer[RECORD_SIZE];
    if (Serial.available())
    {
        if (readline(Serial.read(), buffer, RECORD_SIZE) > 0) {
            mySerial.write(buffer);
        }
    }
}
//Reads entire incoming data into buffer once
int readline(int readch, char *buffer, int len)
{
    static int pos = 0;//This was zero initially. But, it was missing first character!
    int rpos;
    //Serial.print(readch);
    if (readch > 0) {
        switch (readch) {
        case '\n'://Ignore new-lines
            break;
        case '\r'://Return on CR
            rpos = pos;
            pos = 0; //Reset position index ready for next time
            return rpos;
        default:
            if (pos < len - 1) {
                buffer[pos++] = readch;
                buffer[pos] = 0;
            }
        }
    }
   //No end of line has been found, so return -1.
    return -1;
}
0
добавлено
Но, там иначе прежде выходит на ту дорогу. Когда я проверил, что спецификация для двигателя, это может также общаться по I2C или SPI. Wouldn' t вы рассматривают, чтобы сделать это также? Например, тот образец выглядит довольно многообещающим: Демонстрационный пример RMC220x
добавлено автор mike nelson, источник
Ах, еще одна вещь, вы давали, это вниз голосует за мой ответ (происходящая работа)? это было единственное место, я мог поместить отформатированное кодирование, таким образом, я сделал не обязательно окончательный ответ. Я полагаю, что, по крайней мере, это заслуживает некоторого уважения.
добавлено автор mike nelson, источник
Спасибо за вашу обратную связь и маркировку моего ответа. Удача с вашим проектом.
добавлено автор mike nelson, источник
Я играл с этим подходом. Буферизованный читает doesn' t помощь. Та же самая проблема: все прекрасно, пока я не установил ту же самую скорость для обоих сериалов. Я приказал Мега правление. Это должно решить проблему наверняка.:) Большое спасибо!
добавлено автор nha, источник
не it' s не мои вниз голосуют. I' ve отметил ваш ответ как полезный. Так как я don' у t есть достаточно репутации it' s зарегистрированный, но не показанный. Ваши ответы помогают мне много!
добавлено автор nha, источник
Анархическая электроника
Анархическая электроника
1 510 участник(ов)

[около] электронные темы. без переходов на личности, стен стикеров, политики, непрошенной рекламы и всякого такого Основной чат у нас в @ru_electronics Общий информационный канал @ru_electronics_feed

Про электронику
Про электронику
1 461 участник(ов)

QA чат для решения вопросов, связанных с электроникой. без стикеров, непрошенной рекламы и игр в русский форум оформляйте вопрос в одно сообщение вопросы со словом «кто» игнорируются don't ask for ask Правила http://telegra.ph/ru-electronics-rulz-11-11

Embedded Group
Embedded Group
873 участник(ов)

Все про Embedded и электронику. Осторожно, бывают нотификейшены. #вопросподелу - Для поиска вопросов и ответов #devtools - фотки рабочих железок Работа: @rabotaembedded http://embedded.group http://vk.com/embedded_space

Hardware & Radio
Hardware & Radio
155 участник(ов)

Разговоры об электронике, микроконтроллерах, низкоуровневом программировании, реверс-инжиниринге, FPGA, квадрокоптерах, 3D-печати, Software Defined Radio, любительском радио, и всяком таком.

ARDUINO [RU]
ARDUINO [RU]
60 участник(ов)

Обсуждение Электронного конструктора Arduino. Проблемы и их решения. Ссылки на интересные статьи и проекты. ВК: https://vk.com/arduino_esp Realtek: http://vk.com/rtl8711 Чаты: IOT https://t.me/ProIOT esp8266 https://t.me/Proesp8266