Связь между Genuino Zero и Arduino Uno с использованием UART

Я хочу, чтобы мои Arduino Uno и Genuino Zero взаимодействовали с помощью UART. Мой Genuino Zero — это передатчик, а приемник — Arduino Uno.

Для Arduino Uno я использую библиотеку SoftSerial. Я загрузил коды передатчика и приемника.

Мое подключение следующее:

Genuino Zero (RX) контакт 0 ---------------- Arduino Uno контакт 11

Подлинный нулевой (TX) контакт 1 ---------------- Arduino Uno контакт 10

Земля ---------------------------------- Земля

Пин 10 Arduino Uno — Rx, а контакт 11 — Tx, при использовании SoftSerial.

Передатчик передает «а». Приемник получает «а» и включает светодиод. Моя проблема в том, что на получателе я ничего не получаю.

Мой код здесь:

https://www.dropbox.com/s/4w8o2h2k4zs0it5/transmitter.txt?dl =0 https://www.dropbox.com/s/d50uizoz3iove9w/receiver.txt?dl=0

---приемник-------------------------------------

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // прием, передача

/* Простой сценарий последовательного ECHO: Написано ScottC 07.03.2012 */

/* Используйте переменную byteRead для временного хранения
данные, поступающие с компьютера */
byte byteRead;

void setup() {                
// Включаем последовательный протокол
  Serial.begin(9600);
   mySerial.begin(9600);
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  char a[8];
  /*  check if data has been sent from the computer: */
  if (Serial.available()) {
    /* read the most recent byte */
    byteRead = Serial.read();
    Serial.print("rushin\r\n");
    /*ECHO the value that was read, back to the serial port. */
    if(byteRead == 0x61) {
      digitalWrite(LED_BUILTIN, HIGH);
      Serial.write(byteRead);
    }
  }
  if (mySerial.available()) {
    /* read the most recent byte */
    byteRead = mySerial.read();
    mySerial.print("rushin\r\n");
    /*ECHO the value that was read, back to the serial port. */
    if(byteRead == 0x61) {
      digitalWrite(LED_BUILTIN, HIGH);
      mySerial.write(byteRead);
     }
  }
}

-------------------transmitter----------------------------------

/*
  DigitalReadSerial
 Reads a digital input on pin 2, prints the result to the serial monitor
 This example code is in the public domain.
 */

// к цифровому выводу 2 прикреплена кнопка. Дайте ему имя:
int pushButton = 7;
// процедура настройки запускается один раз, когда вы нажимаете кнопку сброса:
void setup() {
  // инициализируем последовательную связь со скоростью 9600 бит в секунду:
  Serial.begin(9600);
  // делаем вывод кнопки входом:
  pinMode(pushButton, INPUT);
}

// процедура цикла выполняется снова и снова, вечно:
void loop() {
  // читаем входной контакт:
  int buttonState = digitalRead(pushButton);
  // распечатываем состояние кнопки:
  Serial.println("a");
  delay(1000);
  // задержка между чтениями для стабильности
}

, 👍1

Обсуждение

Опубликуйте код здесь. Ссылки имеют тенденцию исчезать., @gre_gor

извини. не могу сюда загрузить текстовый файл. и ссылка в порядке, @Beginner

Просто скопируйте и вставьте код сюда и отформатируйте его в [блок кода](http://arduino.stackexchange.com/editing-help)., @gre_gor

Что говорит информация о продукте? «В отличие от большинства плат Arduino и Genuino, Zero работает при напряжении 3,3 В. Максимальное напряжение, которое могут выдержать контакты ввода-вывода, составляет 3,3 В. Подача напряжения выше 3,3 В на любой контакт ввода-вывода может повредить плату»., @Mikael Patel

Да, я знаю это. и я работаю с 3,3 В, @Beginner

А Уно? Как ты это подключил? По крайней мере, на контакте 11/TX будет 5 В, если вы не использовали какое-либо преобразование сигнала., @Mikael Patel

Ваш код приемника ничего не скажет ПК в ответ на данные по последовательному программному обеспечению — вы только отправляете обратно индикацию. Вероятно, вместо этого вы захотите отправить какое-то указание на ПК. Также будьте осторожны с запуском сообщений, которые длиннее отправленных, поскольку их передача займет больше времени и может привести к потере новых входящих данных., @Chris Stratton


1 ответ


1

Код вашего передатчика Arduino Zero передается только через последовательный порт USB («Последовательный»). Если вы хотите, чтобы он передавал данные на последовательный порт на контактах 0 и 1, вам необходимо, чтобы он записывал данные на Serial1. (Проверьте файл options.cpp), вы увидите, что Serial1 использует SERCOM0, который находится на контактах 0 и 1.

Итак, ваш код должен выглядеть следующим образом (нот «Serial» заменяется на «Serial1»):

void setup() {
  // инициализируем последовательную связь со скоростью 9600 бит в секунду:
  Serial1.begin(9600);
  // делаем вывод кнопки входом:
  pinMode(pushButton, INPUT);
}

// процедура цикла выполняется снова и снова, вечно:
void loop() {
  // читаем входной контакт:
  int buttonState = digitalRead(pushButton);
  // распечатываем состояние кнопки:
  Serial1.println("a");
  delay(1000);
  // задержка между чтениями для стабильности
}
,