Параллельная связь между несколькими Ардуино

Вот сообщение, в котором объясняется стандарт связи.

Мне нужно установить связь между несколькими платами Arduino nano. Я использовал шину SPI на одной из плат Arduino для беспроводной связи и шину I2C для другого устройства. Оказалось, что как шина I2C, так и шина SPI поддерживают несколько устройств. Однако, поскольку я использовал как I2C, так и SPI для разных целей, установление параллельной связи с выводами RX TX казалось предпочтительным выбором.

Вопрос 1: Этот пост предоставил хорошую настройку для шины I2C в качестве ведущего и ведомого устройств. Однако можно ли настроить код на шаге 2 главного устройства с помощью

 Wire.begin(n); 

и изменить все платы Arduino как ведущие и ведомые устройства, таким образом, добиться параллельной связи?

Вопрос 2: Я прочитал этот пост, где люди упоминали RS 485. Однако можно ли обеспечить параллельную связь с выводами RX и TX, подобными тому, который использовался в вопросе 1, без использования RS 485?

, 👍-1

Обсуждение

пожалуйста, объясните, что вы подразумеваете под параллельным общением, @jsotola

@jsotola подобно тому, как 10 плат arduino nano собираются вместе и отправляют данные друг другу, топология сети полностью подключена., @ShoutOutAndCalculate

google кластер arduino и сеть узлов arduino, @jsotola

@jsotola Это слишком велико. Весь смысл в том, чтобы использовать бортовую технологию, с которой энергия и масса проекта были бы слишком велики., @ShoutOutAndCalculate

Я думаю, что вам нужен термин "многопоточная шина", а не "параллельная". Параллельная связь относится конкретно к совершенно другому стандарту взаимодействия., @Majenko


1 ответ


-1

параллельная связь возможна с помощью arduino, вам нужно использовать порты, например, порт A, а затем контакты rx tx.

#include <Wire.h>
#include <Arduino.h>

byte i = 0;
int intpin = 44;
int rcv_ready = 45;

void setup() {
  DDRA = B11111111; // Вывод
  DDRC = B11111111; // Вывод
  pinMode(intpin, OUTPUT);
  pinMode(rcv_ready, INPUT);
}

void loop() {
  transmit();
}

void transmit() {
  PORTA = i++
  PORTC = i;
  digitalWrite(intpin, HIGH);
  while (rcv_ready == LOW) {}
  digitalWrite(intpin, LOW);
  
  delay(299);
}

Здесь мы настраиваем два порта DDRA и DDRC в качестве выходных портов, используя маску B11111111; Мы устанавливаем вывод прерывания на порт 44 и устанавливаем, что это выход, и мы устанавливаем вывод приема на 45 и вход. Затем мы вызываем transmit в цикле. Где затем мы устанавливаем порты A и C равными i ++ и i соответственно. А затем переключите сигнал, чтобы сказать, что мы передали новое сообщение. Это будет подхвачено подчиненным входом.

Подчиненный вход

#include <Arduino.h>

byte x = 0;
byte y = 0;
int rcv_ready = 45;

void setup() {
  DDRA = B00000000; // Ввод
  DDRC = B00000000; // Вход
  Serial.begin(19200);
  attachInterrupt(5, blink, RISING);
  pinMode(rcv_ready, OUTPUT);
  digitalWrite(rcv_ready, LOW);
}

void loop() {}

void blink() {
  x = PINA;
  y = PINC;
  delay(100);
  digitalWrite(rcv_ready, HIGH);
  delay(100);
  digitalWrite(rcv_ready, LOW);
  Serial.print(x);
  Serial.print(" , ");
  Serial.println(y);
}

Здесь мы настраиваем два порта DDRA и DDRC в качестве входных портов, используя маску B00000000; Затем мы устанавливаем скорость передачи в бодах равной 19200, которая соответствует скорости, установленной ведущим устройством

Здесь мы устанавливаем прерывание равным 5, которое является выводом 18, и говорим ему вызвать мигание при прерывании. Затем мы считываем значения из PORTA и PORTC, а затем выводим их на экран последовательного монитора. Мы также отправляем обратно подтверждение получения мастеру, используя вывод 45

,

Пожалуйста, разместите свой код в текстовом формате., @VE7JRO