Последовательная связь между 3 Arduinos не работает (Daisy-Chain)

В моем проекте мне нужно отправить строку с одного ардуино на второй arduino и заставить его отправить ту же строку в третий arduino. Я использовал UART и SoftwareSerial библиотеку и подключил ардуины следующим образом:

Во всех ардуинах: Контакт 10 - Порт RX, контакт 11 - Порт TX введите описание изображения здесь Arduino 1 контакт 11 ----> Arduino 2 pin 10 Arduino 2 pin 11 ----> Arduino 3-контактный 10 Arduino 3 ----> ПК (по серийному оборудованию)

По теории Arduino 1 отправляет строку «CA» в arduino 2, которая повторно передает ту же строку в arduino 3, которая выводит ее обратно на Serial.

Проблема заключается в том, что я получаю строку «C » вместо «CA» (эта странная «C » равна «067 255» на ASCII). Кто-нибудь знает, почему это происходит? Может быть, что-то не так с моим кодом?

Вот код для всех трех Arduinos:

Ардуино № 1:

#include <SoftwareSerial.h>

#define ADDR "CA"
SoftwareSerial tiny(10, 11); //TBD

void setup() {
  Serial.begin(9600); //debug only
  tiny.begin(9600);
  delay(2000);

  tiny.write(ADDR);
}

void loop() {
  //nothing here
}

Ардуино № 2:

#include <SoftwareSerial.h>
SoftwareSerial tiny(10, 11); //TBD
void setup() {
  Serial.begin(9600); //debug only
  tiny.begin(9600);
}
void loop() {
  if(tiny.available() > 0) {
    tiny.write(tiny.read());
  }
}

Ардуино № 3:

#include <SoftwareSerial.h>
SoftwareSerial tiny(10, 11); //TBD
void setup() {
  Serial.begin(9600); //debug only
  tiny.begin(9600);
}
void loop() {
  if(tiny.available() > 0) {
    Serial.write(tiny.read());
  }
}

Любая идея о том, что пошло не так?

2 голоса | спросил Ido Daniel 19 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 19 Sep 2016 17:41:24 +0300 2016, 17:41:24

1 ответ


2

Arduino # 2 должен иметь два экземпляра SoftwareSerial, один для прослушивания Arduino # 1 и еще один, чтобы поговорить с Arduino # 3:

// In Arduino #2
SoftwareSerial tiny1(10, 11); // Listen to Arduino #1 on pin 10
SoftwareSerial tiny2(8, 9);   // Talk to Arduino #3 on pin 9

Возможно, вам не потребуется подключать неиспользуемые сигналы (11 и 8).

Здесь приведен пример: https://www.arduino.cc/en/Tutorial /TwoPortReceive

Обратите внимание, что то, что вы пытаетесь сделать, это шина. Серийный номер в Arduino - это RS232, и это не шина, а точка-точка протокол . Вы должны рассмотреть возможность использования I²C или SPI.

ответил nico 10 42016vEurope/Moscow11bEurope/MoscowThu, 10 Nov 2016 21:38:11 +0300 2016, 21:38:11

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

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

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