Serial1' was not declared in this scope

Пытаюсь сделать последовательную связь между 2 Arduino Unos.

Код:

#include <SoftwareSerial.h>

int ledPin = 13;
int board;   // 1 = Uno. 2 = Mega.
int on_off;  // 1 = Вкл. 0 = Выкл.
int buzzerPin = 9;
int Ack_tx = 2; //Подтверждение tx.
int rec;

void setup()
{
  Serial.begin(9600);      // начать последовательную связь со скоростью 9600 Бит / с
  Serial1.begin(9600);     // start serial1 communication at 9600bps

  pinMode(ledPin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);

  Serial.flush();
  Serial1.flush();

} // Завершение настройки

void loop()
{

  Serial.println("Enter Uno=1/Mega=0 ...");  //Выбрать плату
  // if(!Serial){ board = Serial.read ();}
  while(Serial.available()==0) { // Дождитесь ввода пользователем данных
  }
  board = Serial.parseInt();  //Считывает введенные пользователем данные.


  Serial.println("Enter LED On=1/Off=0 ...");  //Выберите On или Off
  while (Serial.available()==0) { // Дождитесь ввода пользователем данных
  }
  on_off = Serial.parseInt();

  Serial.println();


  switch (board) {

  case 0:  //Mega board
    if (on_off == 1) digitalWrite(ledPin, HIGH); //Select Uno LED On
    else digitalWrite(ledPin, LOW);              //Select Uno LED Off
    break;  //конечный случай

  case 1:  //UNO
    //Serial.println("Off to Uno...");
    //Отправить информацию on_off в Uno
    Serial1.write(on_off/256); //Отправить частное или значение "сколько раз" 
    Serial1.write(on_off%256); //Отправить по модулю или Остаток.
    delay(50); //Дождитесь последовательного порта.

    while(Serial1.available()<2) //Дождитесь прибытия 2 байтов
     {
      //ничего не делать
     } //End While


  byte b1=Serial1.read();  //Читать верхний байт
  byte b2=Serial1.read();  //Читать нижний байт
  rec=(b1*256)+b2; 

    if (rec == Ack_tx) tone(buzzerPin, 300, 300); //Ack_tx из Uno
    break;
  } //Корпус концевого выключателя

}  

Ошибка:

Arduino: 1.8.5 (Windows 10), Board: "Arduino/Genuino Uno"

C:\Users\Akshit\Documents\Arduino\sketch_mar06a\sketch_mar06a.ino: In function 'void setup()':

sketch_mar06a:13: error: 'Serial1' was not declared in this scope

   Serial1.begin(9600);     // start serial1 communication at 9600bps

   ^

C:\Users\Akshit\Documents\Arduino\sketch_mar06a\sketch_mar06a.ino: In function 'void loop()':

sketch_mar06a:51: error: 'Serial1' was not declared in this scope

     Serial1.write(on_off/256); //Send the Quotient or "how many times" value

     ^

Multiple libraries were found for "SoftwareSerial.h"
 Used: C:\Program Files (x86)\Arduino\hardware\arduino\avr\libraries\SoftwareSerial
 Not used: C:\Program Files (x86)\Arduino\libraries\SoftwareSerial
exit status 1
'Serial1' was not declared in this scope

This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.

Это очень простая проблема, которую я знаю, но ничто в Интернете не помогает.

, 👍6

Обсуждение

Почему вы думаете, что "Serial1" должен существовать?, @Ignacio Vazquez-Abrams

Я взял этот код из Интернета. Я чувствую, что он должен существовать, потому что нам понадобится один последовательный для связи с последовательным монитором компьютера и второй для фактической последовательной связи между двумя ардуино Пожалуйста, поправьте меня, если я ошибаюсь., @Aki

Итак... вы увидели его в случайном коде и подумали, что он будет работать везде?, @Ignacio Vazquez-Abrams

Код имел для меня смысл. Не мог придумать никаких изменений.. Я попробую ответить на вопрос Маенко, @Aki

@Aki Uno имеет только один аппаратный последовательный интерфейс (Serial). Как вы ожидаете, что будет "Serial1"?, @gre_gor

@gre_gor прочитал мой 1-й комментарий. Я в этом деле крайний нуб.., @Aki


2 ответа


10

У UNO нет Serial1. У него есть только один последовательный порт, называемый Serial. Чтобы использовать Serial1, вам понадобится более крупная плата, такая как Mega2560, или определите ее как порт SoftwareSerial и используйте для нее два других вывода ввода-вывода по вашему выбору, хотя и с более низкой скоростью передачи данных, чем Serial.

,

У меня есть arduino micro, и я могу использовать serial (форма comunication pc )и serial1 (форма com. модуль Wi-Fi)., @mustafatorun


7

Вы импортируете библиотеку SoftwareSerial, но никогда не создаете экземпляр объекта класса SoftwareSerial.

Вам просто нужно добавить строку

 SoftwareSerial Serial1(10, 11); // RX, TX

после включения заголовка библиотеки (взято отсюда)

Теперь это создает объект Serial1,над которым операции внизу должны работать так же, как и с реальным аппаратным сериалом (по API).

Примечание сбоку: Будьте осторожны с проводкой. Вы используете этот Serial1 эмулированный UART для связи между платами, поэтому, если вы используете вышеуказанные номера контактов (D10 = RX, D11 =TX), то вы должны подключить D10 (Board1) -> D11 (Board2), D11 (Board1) -> D10 (Board2), т. е. RX->TX, TX->RX.

,