Параллельная связь между несколькими Ардуино
Вот сообщение, в котором объясняется стандарт связи.
Мне нужно установить связь между несколькими платами 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 ответ
параллельная связь возможна с помощью 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
- Multiple Wire.write() не работает для Arduino Nano I2C
- SPI Arduino slave не получает данные правильно
- Последовательная связь между ESP8266 и Arduino Uno
- Как связаться с датчиком через порты RX/TX Arduino?
- Лазерный датчик ToF (VL53L0X) не работает
- Последовательная связь между несколькими устройствами (или ардуино)
- Программирование Arduino Micro через RX/TX
- Serial Comm. проблема синхронизации между Arduino и Pyserial
пожалуйста, объясните, что вы подразумеваете под
параллельным общением
, @jsotola@jsotola подобно тому, как 10 плат arduino nano собираются вместе и отправляют данные друг другу, топология сети полностью подключена., @ShoutOutAndCalculate
google
кластер arduino
исеть узлов arduino
, @jsotola@jsotola Это слишком велико. Весь смысл в том, чтобы использовать бортовую технологию, с которой энергия и масса проекта были бы слишком велики., @ShoutOutAndCalculate
Я думаю, что вам нужен термин "многопоточная шина", а не "параллельная". Параллельная связь относится конкретно к совершенно другому стандарту взаимодействия., @Majenko