Arduino:Примеры/ConsoleRead: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
м (Замена текста — «<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">»)
 
Нет описания правки
Строка 24: Строка 24:
Подключаем класс '''Console''' (он является наследником '''Bridge''').
Подключаем класс '''Console''' (он является наследником '''Bridge''').


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
#include <Console.h>
#include <Console.h>
</syntaxhighlight>
</syntaxhighlight>
Строка 30: Строка 30:
Создаем строку, в которой будем хранить информацию, присланную от Bridge.
Создаем строку, в которой будем хранить информацию, присланную от Bridge.


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
String name;
String name;
</syntaxhighlight>
</syntaxhighlight>
Строка 36: Строка 36:
В секции setup() инициализируем '''Console''' и '''Bridge'''. Ждем подключения консоли, а затем запрашиваем информацию.
В секции setup() инициализируем '''Console''' и '''Bridge'''. Ждем подключения консоли, а затем запрашиваем информацию.


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
void setup() {
void setup() {
   Bridge.begin();
   Bridge.begin();
Строка 49: Строка 49:
В секции loop() проверяем, есть ли какие-нибудь байты в буфере консоли. Если есть, считываем самый старый символ в локальную переменную.  
В секции loop() проверяем, есть ли какие-нибудь байты в буфере консоли. Если есть, считываем самый старый символ в локальную переменную.  


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
void loop() {
void loop() {
   if (Console.available() > 0) {
   if (Console.available() > 0) {
Строка 57: Строка 57:
Если этим символом является символ новой строки ('''«\n»'''), то это самый последний символ пришедшей строки. Выводим на консоль сообщение, запрашиваем еще информации, очищаем строку.
Если этим символом является символ новой строки ('''«\n»'''), то это самый последний символ пришедшей строки. Выводим на консоль сообщение, запрашиваем еще информации, очищаем строку.


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
if (c == '\n') {
if (c == '\n') {
       Console.print("Hi ");  // "Привет "
       Console.print("Hi ");  // "Привет "
Строка 71: Строка 71:
Если в пришедшей строке нет символа новой строки, то добавляем его к концу строки.
Если в пришедшей строке нет символа новой строки, то добавляем его к концу строки.


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
else {       
else {       
       name += c;  
       name += c;  
Строка 81: Строка 81:
Весь скетч полностью – ниже:
Весь скетч полностью – ниже:


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
/*
/*
   Считывание текста в консоли
   Считывание текста в консоли

Версия от 18:18, 14 мая 2023

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Считывание текста в консоли [1]

Данный пример показывает, как сделать так, чтобы Arduino Yun при помощи функции Console.read() считывать данные, идущие от Bridge, а затем записывать их в строку.

Чтобы увидеть консоль, откройте Arduino IDE и, зайдя в пункт меню Tools > Port, выберите для Yun имя и IP-адрес. После этого откройте Port Monitor. Кроме того, консоль можно увидеть, открыв окно терминала, вписав ssh root@ yourYúnsName.local 'telnet localhost 6571' и нажав Enter. Когда у вас попросят пароль, впишите его.

Запуская скетч, убедитесь, что компьютер и Yun находятся в одной беспроводной сети.

Необходимое оборудование

  • Плата Arduino Yun;
  • Компьютер и Arduino должны находиться в одной сети;

Цепь

Для этого примера цепи строить не нужно.

Код

Подключаем класс Console (он является наследником Bridge).

#include <Console.h>

Создаем строку, в которой будем хранить информацию, присланную от Bridge.

String name;

В секции setup() инициализируем Console и Bridge. Ждем подключения консоли, а затем запрашиваем информацию.

void setup() {
  Bridge.begin();
  Console.begin(); 

  while (!Console); 

  Console.println("Hi, what's your name?");  // "Привет, как тебя зовут?"
}

В секции loop() проверяем, есть ли какие-нибудь байты в буфере консоли. Если есть, считываем самый старый символ в локальную переменную.

void loop() {
  if (Console.available() > 0) {
    char c = Console.read();

Если этим символом является символ новой строки («\n»), то это самый последний символ пришедшей строки. Выводим на консоль сообщение, запрашиваем еще информации, очищаем строку.

if (c == '\n') {
      Console.print("Hi ");  // "Привет "
      Console.print(name);
      Console.println("! Nice to meet you!");  // "! Приятно познакомиться!"
      Console.println();
      Console.println("Hi, what's your name?");  // "Привет, как тебя зовут?"
      name = "";
    }
}

Если в пришедшей строке нет символа новой строки, то добавляем его к концу строки.

else {      
      name += c; 
    }
  }
}

Весь скетч полностью – ниже:

/*
  Считывание текста в консоли

  Считывает данные, идущие от Bridge, при помощи функции Console.read(),
  а затем записывает их в строку. 
 
  Чтобы увидеть консоль, откройте меню Port, впишите имя и IP-адрес Yun, а затем откройте Port Monitor.

 Кроме того, консоль можно увидеть, открыв окно терминала и вписав 
ssh root@ yourYunsName.local 'telnet localhost 6571', а затем нажав Enter. 
 Когда вас попросят о введении пароля, введите его.

 Создан 13 июня 2013 Анжело Сцилабба (Angelo Scialabba) 
 модифицирован 16 июня 2013 Томом Иго (Tom Igoe).

 Этот код не защищен авторским правом.

 */

#include <Console.h>

String name;

void setup() {
  // Инициализируем Console и ждем открытия порта:
  Bridge.begin();
  Console.begin(); 

  // Ждем открытия порта консоли:
  while (!Console); 

  Console.println("Hi, what's your name?"); // "Привет, как тебя зовут?"
} 

void loop() {
  if (Console.available() > 0) {
    char c = Console.read(); // считываем следующий символ
    // Ищем, нет ли символа новой строки.
    // Это должен быть последний символ в строке. 
    if (c == '\n') {
    // Выводим на консоль текст с присланным именем:
      Console.print("Hi ");  // "Привет "
      Console.print(name);
      Console.println("! Nice to meet you!");  // "! Приятно познакомиться!"
      Console.println();
      // Запрашиваем имя еще раз и очищаем старое имя:
      Console.println("Hi, what's your name?");  // "Привет, как тебя зовут?"
      name = "";  // очищаем строку с именем
    } 
    else {       // если буфер пуст, Cosole.read() возвращает -1
      name += c; // добавляем к строке с именем символ новой строки 
    }
  }

См.также

Внешние ссылки