Последовательная связь на Arduino Uno

У меня есть Raspberry Pi 3, связанный с серией моего Arduino Uno (контакты 0 и 1), но у меня также есть другое устройство, подключенное к двум другим последовательным контактам на Arduino (контакты 10 и 11, используя библиотеку SoftwareSerial) .

Что я хочу сделать, это отправить строку из RPI, затем Arduino получает ее и передает эту информацию через другой последовательный порт на мое устройство.

До сих пор Arduino может получать информацию из RPI, но я не уверен, как отправить эту же строку через другой последовательный порт, тот, который идет на устройство.

Вот код, который я использую:

#include <SoftwareSerial.h>

String b = "0";
SoftwareSerial portOne(2, 3); //RX= pin 2  TX= pin 3

void setup() {
  Serial.begin(9600, SERIAL_8N1); 
  portOne.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {
    b = Serial.readString();
    Serial.println("Data from RPI:");
  }
  portOne.listen();
  while(portOne.available() > 0){
      Serial.println("Data from port one:");
      Serial.println(b);
    }
  }

Я просто получаю данные, поступающие из RPI, но ничего не из portOne.

Любые мысли?

2 голоса | спросил Luz A 18 PMpTue, 18 Apr 2017 19:03:48 +030003Tuesday 2017, 19:03:48

3 ответа


0

Прочитав больше о SoftwareSerial, мне удалось получить сообщение, которое я хотел более простым способом. Это то, что я использовал в моем цикле void:

void loop() { // run over and over

  if (Serial.available()>0) {
    HW = Serial.read();
    mySerial.write(HW);

  }

  if (mySerial.available()>0) {
    SW = mySerial.read();
    Serial.write(SW);
  }
}

Спасибо всем за вашу помощь, ваши ответы дали мне также лучшее понимание того, что я делаю.

ответил Luz A 16 PM00000060000003831 2017, 18:06:38
2

Ваш код не читает SoftwareSerial. b заполняется только при отправке данных Pi. Цикл ниже отправляет то, что он читает из SoftwareSerial, после чего печатает новую строку println() (только потому, что это делает ваш код)

Метод listen() SoftwareSerial требуется только в том случае, если у вас более одного соединения SoftwareSerial.

#include <SoftwareSerial.h>

String b = "0";
SoftwareSerial portOne(2, 3); //RX= pin 2  TX= pin 3

void setup() {
  Serial.begin(9600, SERIAL_8N1); 
  portOne.begin(9600);
} 

void loop() {
  if (Serial.available() > 0) {
    b = Serial.readString();
    Serial.println("Data from RPI:");
  }

 //not required with only one software serial connection
 //portOne.listen();

  if (portOne.available() > 0)
  {
   while(portOne.available() > 0){
      byte byteRead = portOne.read();
      Serial.write(byteRead);
    }
    Serial.println();
   }
  }
ответил Visual Micro 18 PMpTue, 18 Apr 2017 19:15:15 +030015Tuesday 2017, 19:15:15
1

Если вы хотите передать строку из RPI через Arduino на устройство, подключенное через SoftwareSerial, вы должны сделать что-то вроде этого:

#include <SoftwareSerial.h>

String b = "0";
SoftwareSerial portOne(2, 3); //RX= pin 2  TX= pin 3

void setup() {
  Serial.begin(9600, SERIAL_8N1); 
  portOne.begin(9600);
} 

void loop() {

  if (Serial.available() > 0) { // data available on HW Serial
    b = Serial.readString();    // Read it
    portOne.print(b);           // and write it to SW Serial
  }

}
ответил Mazaryk 30 AMpSun, 30 Apr 2017 08:50:05 +030050Sunday 2017, 08:50:05

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132