Arduino:Примеры/ConsoleRead

Материал из Онлайн справочника
Версия от 21:20, 13 декабря 2016; 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">»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

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


Считывание текста в консоли [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; // добавляем к строке с именем символ новой строки 
    }
  }

См.также

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