Arduino:Примеры/YunSerialTerminal: различия между версиями
Myagkij (обсуждение | вклад) м (Замена текста — «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">» на «<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">») |
Нет описания правки |
||
Строка 29: | Строка 29: | ||
Создаем две переменные. В первой будем хранить информацию о скорости передачи данных между процессорами, а во второй – о том, вошли ли мы в командный режим (т.е. режим прямого ввода команд) или нет. | Создаем две переменные. В первой будем хранить информацию о скорости передачи данных между процессорами, а во второй – о том, вошли ли мы в командный режим (т.е. режим прямого ввода команд) или нет. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
long linuxBaud = 250000; | long linuxBaud = 250000; | ||
boolean commandMode = false; | boolean commandMode = false; | ||
Строка 36: | Строка 36: | ||
В секции setup() инициализируем последовательное соединение с компьютером и '''Linux'''. | В секции setup() инициализируем последовательное соединение с компьютером и '''Linux'''. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
void setup() { | void setup() { | ||
Serial.begin(115200); | Serial.begin(115200); | ||
Строка 45: | Строка 45: | ||
В секции loop() копируем данные из одного последовательного соединения в другое. Если нажата клавиша '''«~»''', включаем командный режим. | В секции loop() копируем данные из одного последовательного соединения в другое. Если нажата клавиша '''«~»''', включаем командный режим. | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
void loop() { | void loop() { | ||
// копируем информацию с USB-соединения на UART и наоборот | // копируем информацию с USB-соединения на UART и наоборот | ||
Строка 88: | Строка 88: | ||
Весь код полностью – ниже: | Весь код полностью – ниже: | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
/* | /* | ||
Передача информации с последовательного соединения на Linux (Yun) | Передача информации с последовательного соединения на Linux (Yun) |
Версия от 12:35, 20 мая 2023
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Доступ к терминалу Linux через Serial Monitor (на Arduino Yun)[1]
Благодаря этому примеру вы научитесь использовать Yun’овский процессор 32U4 в качестве терминала для последовательной передачи данных в работе c Linux-процессором.
Загрузите этот скетч на Arduino Yun через USB (не через WiFi), а затем запустите последовательную передачу данных со скоростью 115200 бит/с, чтобы увидеть процесс начальной загрузки процессора Linux. Кроме того, в этом скетче Serial Monitor можно использовать в роли основного интерфейса командной строки для Linux.
Через Serial Monitor можно отправлять следующие команды:
- «~», а затем «0» ---> Выставляем скорость работы UART в 57 600 бод.
- «~», а затем «1» ---> Выставляем скорость работы UART в 115 200 бод.
- «~», а затем «2» ---> Выставляем скорость работы UART в 250 000 бод.
- «~», а затем «3» ---> Выставляем скорость работы UART в 500 000 бод.
- «~», а затем «~» ---> Отправляем команду разрыва соединения.
Необходимое оборудование
- Плата Arduino Yun;
Цепь
Для этого примера цепи строить не нужно.
Код
Создаем две переменные. В первой будем хранить информацию о скорости передачи данных между процессорами, а во второй – о том, вошли ли мы в командный режим (т.е. режим прямого ввода команд) или нет.
long linuxBaud = 250000;
boolean commandMode = false;
В секции setup() инициализируем последовательное соединение с компьютером и Linux.
void setup() {
Serial.begin(115200);
Serial1.begin(linuxBaud);
}
В секции loop() копируем данные из одного последовательного соединения в другое. Если нажата клавиша «~», включаем командный режим.
void loop() {
// копируем информацию с USB-соединения на UART и наоборот
if (Serial.available()) { // есть ли какая-нибудь информация от USB-соединения?
char c = (char)Serial.read(); // считываем ее
if (commandMode == false) { // если мы не находимся в командном режиме...
if (c == '~') { // если нажата клавиша «~»...
commandMode = true; // то входим в командный режим
} else {
Serial1.write(c); // в противном случае передаем символ на Linux
}
} else { // если мы находимся в командном режиме...
if (c == '0') { // если нажата клавиша «0»...
Serial1.begin(57600); // то устанавливаем скорость в 57600 бод
Serial.println("Speed set to 57600"); // "Скорость установлена в 57500"
} else if (c == '1') { // если нажата клавиша «1»...
Serial1.begin(115200); // то устанавливаем скорость в 115200 бод
Serial.println("Speed set to 115200"); // "Скорость установлена в 115200"
} else if (c == '2') { // если нажата клавиша «2»...
Serial1.begin(250000); // то устанавливаем скорость в 250000 бод
Serial.println("Speed set to 250000"); // "Скорость установлена в 250000"
} else if (c == '3') { // если нажата клавиша «3»...
Serial1.begin(500000); // то устанавливаем скорость в 50000 бод
Serial.println("Speed set to 500000"); // "Скорость установлена в 500000"
} else if (c == '~') {
Serial1.write((uint8_t *)"\xff\0\0\x05XXXXX\x0d\xaf", 11);
Serial.println("Sending bridge's shutdown command"); // "Отсылаем команду разрыва соединения"
} else { // нажата ли какая-нибудь другая клавиша?
Serial1.write('~'); // передаем на Linux «~»
Serial1.write(c); // передаем символ на Linux
}
commandMode = false; // в любом случае выходим из командного режима
}
}
if (Serial1.available()) { // есть ли какая-нибудь информация от Linux?
char c = (char)Serial1.read(); // считываем ее
Serial.write(c); // передаем на USB-соединение
}
}
Весь код полностью – ниже:
/*
Передача информации с последовательного соединения на Linux (Yun)
Позволяет использовать Yun’овский процессор 32U4 в качестве терминала для последовательной передачи данных в работе c Linux-процессором.
Загрузите этот скетч на Arduino Yun через последовательный порт (не через WiFi),
а затем откройте Serial Monitor на скорости 115200,
чтобы увидеть процесс начальной загрузки процессора Linux.
Кроме того, в этом скетчеSerial Monitor можно использовать
в качестве базового интерфейса командной строки для Linux.
Скетч настроен таким образом, что через Serial Monitor можно было давать следующие команды:
«~», а затем «0» ---> Выставляем скорость работы UART в 57 600 бод.
«~», а затем «1» ---> Выставляем скорость работы UART в 115 200 бод.
«~», а затем «2» ---> Выставляем скорость работы UART в 250 000 бод.
«~», а затем «3» ---> Выставляем скорость работы UART в 500 000 бод.
«~», а затем «~» ---> Отправляем команду разрыва соединения.
Цепь:
* Плата Arduino Yun
Создан в марте 2013 Массимо Банци (Massimo Banzi),
модифицирован Кристианом Мэгли (Cristian Maglie).
Этот код не защищен авторским правом.
*/
long linuxBaud = 250000;
void setup() {
Serial.begin(115200); // запускаем последовательную передачу данных через последовательный порт
Serial1.begin(linuxBaud); // запускаем последовательную передачу данных на Linux
}
boolean commandMode = false;
void loop() {
// копируем информацию с USB-соединения на UART и наоборот
if (Serial.available()) { // есть ли какая-нибудь информация от USB-соединения?
char c = (char)Serial.read(); // считываем ее
if (commandMode == false) { // если мы не находимся в командном режиме...
if (c == '~') { // если нажата клавиша «~»...
commandMode = true; // то входим в командный режим
} else {
Serial1.write(c); // в противном случае передаем символ на Linux
}
} else { // если мы находимся в командном режиме...
if (c == '0') { // если нажата клавиша «0»...
Serial1.begin(57600); // то устанавливаем скорость в 57600 бод
Serial.println("Speed set to 57600"); // "Скорость установлена в 57500"
} else if (c == '1') { // если нажата клавиша «1»...
Serial1.begin(115200); // то устанавливаем скорость в 115200 бод
Serial.println("Speed set to 115200"); // "Скорость установлена в 115200"
} else if (c == '2') { // если нажата клавиша «2»...
Serial1.begin(250000); // то устанавливаем скорость в 250000 бод
Serial.println("Speed set to 250000"); // "Скорость установлена в 250000"
} else if (c == '3') { // если нажата клавиша «3»...
Serial1.begin(500000); // то устанавливаем скорость в 50000 бод
Serial.println("Speed set to 500000"); // "Скорость установлена в 500000"
} else if (c == '~') {
Serial1.write((uint8_t *)"\xff\0\0\x05XXXXX\x0d\xaf", 11);
Serial.println("Sending bridge's shutdown command"); // "Отсылаем команду разрыва соединения"
} else { // нажата ли какая-нибудь другая клавиша?
Serial1.write('~'); // передаем на Linux «~»
Serial1.write(c); // передаем символ на Linux
}
commandMode = false; // в любом случае выходим из командного режима
}
}
if (Serial1.available()) { // есть ли какая-нибудь информация от Linux?
char c = (char)Serial1.read(); // считываем ее
Serial.write(c); // передаем на USB-соединение
}
}