Связь между 2 платами arduino
Я на самом деле не уверен на 100%, как это сделать, но я пытаюсь заставить мой arduino UNO взаимодействовать с моим arduino MEGA. Причина, по которой мне нужно было это сделать, заключалась в том, что я использовал RFID-модуль вместе с TFT-дисплеем, и проблема, с которой я столкнулся, заключалась в том, что на arduino mega им обоим требовался вывод 53. К счастью, у меня есть arduino UNO, поэтому я просто выбрал его вместо дисплея. Я пытаюсь использовать функцию analogWrite()
для отправки аналоговых сигналов с моего MEGA на UNO, чтобы TFT-дисплей на UNO мог отображать результаты. UNO также будет считывать аналоговые входы, поступающие от MEGA. Это сработало не очень хорошо. Аналоговые входы отправляются с MEGA, но UNO не принимает их. Я использую вывод PWN на MEGA для отправки аналогового выхода на UNO.
Эта диаграмма показывает, что я имею в виду:
Вот 2 компотента, которые я использую:
https://i.stack.imgur.com/CqXdB.png TFT-дисплей
RFID - технология
Это показывает, как библиотека устанавливает пины. Я всего лишь новичок, поэтому лично я не хочу возиться с библиотекой.
2 ответа
Лучший ответ:
Вы можете использовать интерфейс I2C.
TX:
// Мастер записи проводов
// автор : Николас Замбетти <http://www.zambetti.com >
// Демонстрирует использование библиотеки Wire
// Записывает данные на подчиненное устройство I2C/TWI
// См. Пример "Проводного подчиненного приемника" для использования с этим
// Создано 29 марта 2006 года
// Этот пример кода находится в общественном достоянии.
#include <Wire.h>
void setup() {
Wire.begin(); // присоединиться к шине i2c (адрес необязателен для master)
}
byte x = 0;
void loop() {
Wire.beginTransmission(8); // передача на устройство #8
Wire.write("x is "); // отправляет пять байт
Wire.write(x); // отправляет один байт
Wire.endTransmission(); // прекратить передачу
x++;
delay(500);
}
RX:
// Проводной подчиненный приемник
// автор : Николас Замбетти <http://www.zambetti.com >
// Демонстрирует использование библиотеки Wire
// Получает данные как подчиненное устройство I2C/ TWI
// Обратитесь к примеру "Мастер записи проводов" для использования с этим
// Создано 29 марта 2006 года
// Этот пример кода находится в общественном достоянии.
#include <Wire.h>
void setup() {
Wire.begin(8); // присоединиться к шине i2c с адресом #8
Wire.onReceive(receiveEvent); // событие регистрации
Serial.begin(9600); // запустить последовательный для вывода
}
void loop() {
delay(100);
}
// функция, которая выполняется всякий раз, когда данные поступают от ведущего
// эта функция зарегистрирована как событие, см. раздел setup()
void receiveEvent(int howMany) {
while (1 < Wire.available()) { // перебираем все
char c = Wire.read(); // получаем байт в виде символа
Serial.print(c); // вывести символ
}
int x = Wire.read(); // получить байт как целое число
Serial.println(x); // вывести целое число
}
Схема:
Изображение от Dronebot Workshop; ознакомьтесь с их руководством для получения дополнительной информации: https://dronebotworkshop.com/i2c-arduino-arduino /
Это прекрасно! Большое вам спасибо! :), @The_Indestructible_Cat
Добро пожаловать!, @DragonflyRobotics
Что такое часть адреса 8?, @The_Indestructible_Cat
Это просто любой адрес, по которому обе платы обмениваются данными. Это может быть любое число, но оно должно быть одинаковым с обеих сторон., @DragonflyRobotics
Разве вывод RX не является выводом 0, а вывод TX - выводом 1, или наоборот?, @The_Indestructible_Cat
Можете ли вы показать схему, которая показывает это? Это могло бы помочь мне лучше понять., @The_Indestructible_Cat
Да, так что это проводная библиотека, которая может не использовать последовательный ввод. Я включу схему в ответ., @DragonflyRobotics
Может ли он работать с разными платами? Я использую arduino MEGA и arduino UNO, @The_Indestructible_Cat
Да, для mega, прямо рядом с последовательными контактами, есть контакты SDA и SCL. Используй их. Кроме того, не забудьте соединить оба их основания вместе, иначе это НЕ сработает., @DragonflyRobotics
Есть ли у вас потенциально схема с использованием mega и uno? (Я совсем новичок в arduino), @The_Indestructible_Cat
Я включил схему в ответ., @DragonflyRobotics
Что делать, если вы хотите только одностороннюю связь, @The_Indestructible_Cat
Это один из способов. Один из них - TX, а другой - RX., @DragonflyRobotics
Пин 53 - это просто контакт "slave select" по умолчанию. В этом нет ничего особенного. Вы можете использовать любой другой пин в качестве ведомого выбора, если это позволяют библиотеки для ваших устройств (ознакомьтесь с документацией и руководствами по этим библиотекам).
Вы не можете передавать информацию с помощью analogWrite()
, поскольку она на самом деле не является аналоговой (это PWM), а analog в любом случае не имеет достаточного определения для надежного представления более чем нескольких дискретных значений.
Я понимаю, что я здесь позже, но: как мастер AVR SPI, вы не можете допустить, чтобы ваш SS-ввод был низким в качестве входного сигнала. Таким образом, если вы выбрали что-то другое, кроме 53 (или SS в AVR в целом), в качестве подчиненной строки выбора, вы все равно захотите установить 53 как OUTPUT , или INPUT_PULLUP, или INPUT и подтянуть его извне. В противном случае вы можете быть выведены из основного режима из-за шума на выводе. Не то чтобы это противоречило вашему основному тезису, но вот еще одна вещь, о которой следует помнить, которая является особенной в 53 / SS в отношении SPI master., @timemage
- Отправка значения с одного Arduino на другой
- Ошибка в связи I2C Между Arduino и Raspberry Pi
- Колебания в 4-х полумостовой тензодатчике через комбинатор
- Последовательная связь между Arduino
- Проблемы Serial.write и Serial.read
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
Используйте последовательный, I2C или SPI. Никогда не пытайтесь проделывать подобные вещи с аналогом, это просто нереально., @Majenko
Как вы их используете? Я совершенно новичок во всем этом., @The_Indestructible_Cat
Начните с поиска в Google некоторых руководств. Здесь нет недостатка., @Majenko
В чем заключалась сделка с контактом 53? Для чего они его использовали? Звучит как SPI, и в этом случае они могут просто поделиться им. Возможно, сначала выяснить это было бы разумнее, и в итоге вы не получите такой запутанный дизайн. Если речь идет не о SPI, то, скорее всего, вы можете переключить один из них на, @Delta_G
Также обратите внимание, что ШИМ-сигнал представляет собой чередование напряжения 5 В и заземления. Это не настоящий аналоговый сигнал. Когда вы попытаетесь прочитать его с помощью другого Arduino, вы не получите аналоговых показаний. Иногда вы получите 0, а иногда 5V., @Delta_G
@Delta_G контакт 53 используется для модуля RFID, @The_Indestructible_Cat
@Delta_G Знаете ли вы вообще, как вы можете отправлять аналоговые сигналы на arduino, потому что есть функция `analogWrite ()', @The_Indestructible_Cat
Вывод 53 - это просто вывод выбора ведомого устройства по умолчанию для SPI. Вы можете выбрать буквально любой вывод вместо 53. В этом нет ничего особенного (если только вы не используете подчиненный режим SPI)., @Majenko
@Majenko Я думаю, что RFID-модуль использует SPI. Проблема в том, что у меня есть дисплей, который использует SPI, и RFID-модуль, который использует SPI, и они оба не могут использовать его одновременно., @The_Indestructible_Cat
Да, они могут. В этом весь смысл SPI. Единственный вывод, который должен быть уникальным, - это вывод SS, все остальные могут быть общими. И вы можете изменить вывод 53 на * любой другой вывод*, @Majenko
У меня есть те модули, которые я использую выше:, @The_Indestructible_Cat
Если у вас есть "экраны", которые крепятся поверх Arduino, то отрежьте вывод 53 от первого верхнего уровня и припаяйте провод оттуда к другому выводу в другом месте. Если у вас нет "экранов", просто подключите вывод выбора ведомого устройства от одного из модулей к другому выводу., @Majenko
@Majenko У меня нет инструментов для этого!, @The_Indestructible_Cat
Затем возьмите инструменты. Это основные инструменты для работы с электроникой. Arduino - это не LEGO®, это электроника. Настоящая электроника., @Majenko
Возьмите провод, который подключается к контакту 53 RFID-модуля, и вставьте его в другое отверстие на Arduino. Посмотрите на цифру рядом с этой дыркой. Прочтите руководство к библиотеке RFID, которую вы используете, и найдите слова "выбор чипа", "конструктор" или "выбор ведомого устройства", и оно подскажет вам, куда вставить только что прочитанный номер., @Majenko
@Majenko, у меня нет шейлдов, я думаю, что в документации RFID конкретно упоминается, что необходимо использовать вывод 53, и, кроме того, это то же самое для TFT-дисплея, @The_Indestructible_Cat
@Majenko На картинке выше показано, что я имею в виду, @The_Indestructible_Cat
RFID не знает и не заботится о том, какой ввод он использует. Заботится только библиотека, и у большинства из них есть определенный способ сообщить ей, какой контакт вы хотите использовать. RTFM для библиотеки, а не RFID., @Majenko
@Majenko Я всего лишь новичок, поэтому лично я не хочу возиться с библиотекой., @The_Indestructible_Cat
Я не говорю вам "возиться" с библиотекой. Я говорю вам, чтобы вы прочитали руководство. Или, по крайней мере, * сообщите нам, какую библиотеку вы используете, чтобы мы могли указать вам на параграф, в котором рассказывается, как использовать другой вывод SS *!, @Majenko
@Majenko Вот библиотека: https://github.com/miguelbalboa/rfid, @The_Indestructible_Cat
Вы видите в таблице контакты на той странице, на которую вы ссылаетесь? Видите маленькую букву "[2]` рядом с выводом 53? Нажмите на нее. Это приведет вас к биту с надписью "Настраиваемый, обычно определяемый как SS_PIN в sketch / program"., @Majenko
Во всех примерах есть
#define SS_PIN ..."в них вы можете изменить вывод, который хотите использовать вместо 53. В конструкторе есть
MFRC522 mfrc522 (SS_PIN, RST_PIN)`, куда вы можете поместить любые номера контактов, которые вам нравятся (или просто переопределить макросы, чтобы они были чем-то другим)., @Majenko