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.
Это очень простая проблема, которую я знаю, но ничто в Интернете не помогает.
@Aki, 👍6
Обсуждение2 ответа
У UNO нет Serial1
. У него есть только один последовательный порт, называемый Serial
. Чтобы использовать Serial1
, вам понадобится более крупная плата, такая как Mega2560, или определите ее как порт SoftwareSerial
и используйте для нее два других вывода ввода-вывода по вашему выбору, хотя и с более низкой скоростью передачи данных, чем Serial
.
У меня есть arduino micro, и я могу использовать serial (форма comunication pc )и serial1 (форма com. модуль Wi-Fi)., @mustafatorun
Вы импортируете библиотеку 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.
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Использовать все контакты как цифровые входы/выходы
- Float печатается только 2 десятичных знака после запятой
- Arduino как USB HID
- Очень простая операция Arduino Uno Serial.readString()
- AT-команда не отвечает на последовательный монитор
- Как очистить входной последовательный буфер в Arduino?
Почему вы думаете, что "Serial1" должен существовать?, @Ignacio Vazquez-Abrams
Я взял этот код из Интернета. Я чувствую, что он должен существовать, потому что нам понадобится один последовательный для связи с последовательным монитором компьютера и второй для фактической последовательной связи между двумя ардуино Пожалуйста, поправьте меня, если я ошибаюсь., @Aki
Итак... вы увидели его в случайном коде и подумали, что он будет работать везде?, @Ignacio Vazquez-Abrams
Код имел для меня смысл. Не мог придумать никаких изменений.. Я попробую ответить на вопрос Маенко, @Aki
@Aki Uno имеет только один аппаратный последовательный интерфейс (
Serial
). Как вы ожидаете, что будет "Serial1"?, @gre_gor@gre_gor прочитал мой 1-й комментарий. Я в этом деле крайний нуб.., @Aki