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

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
м (Замена текста — «<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:
Создаем переменную, где будут храниться данные, выводимые в окне консоли. '''ASCII-символы''' до '''«32»''' невидимы, поэтому инициализируем переменную значением '''«33»''' (оно соответствует символу '''«!»''').
Создаем переменную, где будут храниться данные, выводимые в окне консоли. '''ASCII-символы''' до '''«32»''' невидимы, поэтому инициализируем переменную значением '''«33»''' (оно соответствует символу '''«!»''').


<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">
int thisByte = 33;
int thisByte = 33;
</syntaxhighlight>
</syntaxhighlight>
Строка 36: Строка 36:
В секции setup() инициализируем '''Bridge''' и '''Console''', а затем ждем открытия порта. Если соединение установилось, выводим небольшое сообщение о том, что произойдет дальше:
В секции setup() инициализируем '''Bridge''' и '''Console''', а затем ждем открытия порта. Если соединение установилось, выводим небольшое сообщение о том, что произойдет дальше:


<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();
Строка 53: Строка 53:
Чтобы увидеть  '''ASCII-значение''' этой переменной, воспользуемся функцией Console.write(). В результате консоль переведет все заданные нами байты в '''ASCII-символы'''.  
Чтобы увидеть  '''ASCII-значение''' этой переменной, воспользуемся функцией Console.write(). В результате консоль переведет все заданные нами байты в '''ASCII-символы'''.  


<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">
Console.write(thisByte);
Console.write(thisByte);
</syntaxhighlight>
</syntaxhighlight>
Строка 59: Строка 59:
Функция Console.print() выведет значение в виде строки '''«дешифрованных» ASCII-символов'''. Причем по умолчанию она выводит значения в десятичном виде.
Функция Console.print() выведет значение в виде строки '''«дешифрованных» ASCII-символов'''. Причем по умолчанию она выводит значения в десятичном виде.


<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">
Console.print(thisByte);
Console.print(thisByte);
</syntaxhighlight>
</syntaxhighlight>
Строка 65: Строка 65:
Функции Console.print() и Console.println() тоже могут отсылать на окно консоли строки со значениями, соответствующими тому или иному модификатору – шестнадцатеричному ('''HEX'''), восьмеричному ('''OCT''') или двоичному ('''BIN'''). Кроме того, функция Console.println() добавляет строке символы новой строки и разрыва строки – это создаст в окне консоли перевод строки.
Функции Console.print() и Console.println() тоже могут отсылать на окно консоли строки со значениями, соответствующими тому или иному модификатору – шестнадцатеричному ('''HEX'''), восьмеричному ('''OCT''') или двоичному ('''BIN'''). Кроме того, функция Console.println() добавляет строке символы новой строки и разрыва строки – это создаст в окне консоли перевод строки.


<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">
Console.print(thisByte, HEX);     
Console.print(thisByte, HEX);     
Console.print(thisByte, OCT);     
Console.print(thisByte, OCT);     
Строка 73: Строка 73:
В этом примере выводиться будут только алфавитно-цифровые символы, существующие в американской клавиатурной раскладке, поэтому завершим таблицу байтом со значением '''«126»'''. Чтобы скетч, перед тем как остановиться, отправил все необходимые данные, воспользуемся функцию Console.flush().
В этом примере выводиться будут только алфавитно-цифровые символы, существующие в американской клавиатурной раскладке, поэтому завершим таблицу байтом со значением '''«126»'''. Чтобы скетч, перед тем как остановиться, отправил все необходимые данные, воспользуемся функцию Console.flush().


<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(thisByte == 126) {   
if(thisByte == 126) {   
     Console.flush();
     Console.flush();
Строка 85: Строка 85:
Чтобы при следующем проходе через цикл скетч занялся следующим по списку символом, увеличиваем значение в переменной '''thisByte''' на один.
Чтобы при следующем проходе через цикл скетч занялся следующим по списку символом, увеличиваем значение в переменной '''thisByte''' на один.


<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">
thisByte++;
thisByte++;
</syntaxhighlight>
</syntaxhighlight>
Строка 91: Строка 91:
Весь скетч полностью – ниже:
Весь скетч полностью – ниже:


<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">
/*
/*
   Вывод ASCII-таблицы через консоль
   Вывод ASCII-таблицы через консоль

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

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


Вывод ASCII-таблицы через Console[1]

Этот пример для Arduino Yun демонстрирует, как при помощи класса Console выводить на компьютер таблицу с ASCII-значениями в десятичном, шестнадцатеричном, восьмеричном и двоичном видах. Более подробно об ASCII можно почитать, например, здесь.

Класс Console основан на библиотеке Bridge и позволяет вам отсылать информацию от Yun на компьютер. То есть он работает практически также, как и Serial, но предназначен для передачи данных беспроводным способом. Console создает безопасное соединение между Yun и вашим компьютером при помощи сетевого протокола SSH.

Когда Yun и компьютер подключатся к одной сети, запустите среду разработки Arduino, а затем откройте пункт меню «Инструменты» > «Порт» – Yun будет находиться именно здесь.

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

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

Цепь

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

Код

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

#include <Console.h>

Создаем переменную, где будут храниться данные, выводимые в окне консоли. ASCII-символы до «32» невидимы, поэтому инициализируем переменную значением «33» (оно соответствует символу «!»).

int thisByte = 33;

В секции setup() инициализируем Bridge и Console, а затем ждем открытия порта. Если соединение установилось, выводим небольшое сообщение о том, что произойдет дальше:

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

  while (!Console) {
    ; // ждем подключения порта 
  }

  Console.println("ASCII Table ~ Character Map"); // "Таблица ASCII ~ Диаграмма символов"
}

В секции loop() выводим значение в нескольких разных форматах.

Чтобы увидеть ASCII-значение этой переменной, воспользуемся функцией Console.write(). В результате консоль переведет все заданные нами байты в ASCII-символы.

Console.write(thisByte);

Функция Console.print() выведет значение в виде строки «дешифрованных» ASCII-символов. Причем по умолчанию она выводит значения в десятичном виде.

Console.print(thisByte);

Функции Console.print() и Console.println() тоже могут отсылать на окно консоли строки со значениями, соответствующими тому или иному модификатору – шестнадцатеричному (HEX), восьмеричному (OCT) или двоичному (BIN). Кроме того, функция Console.println() добавляет строке символы новой строки и разрыва строки – это создаст в окне консоли перевод строки.

Console.print(thisByte, HEX);     
Console.print(thisByte, OCT);     
Console.println(thisByte, BIN);

В этом примере выводиться будут только алфавитно-цифровые символы, существующие в американской клавиатурной раскладке, поэтому завершим таблицу байтом со значением «126». Чтобы скетч, перед тем как остановиться, отправил все необходимые данные, воспользуемся функцию Console.flush().

if(thisByte == 126) {  
    Console.flush();

    while(true) { 
      continue; 
    } 
  }

Чтобы при следующем проходе через цикл скетч занялся следующим по списку символом, увеличиваем значение в переменной thisByte на один.

thisByte++;

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

/*
  Вывод ASCII-таблицы через консоль

  Выводит на окно консоли байты со значением от 33 до 126 во всех возможных форматах:
 * в исходном двоичном значении
 * в «дешифрованных» десятичном, шестнадцатеричном, восьмеричном и двоичном значениях

 Более подробно об ASCII можно прочесть тут (http://www.asciitable.com) и тут (http://en.wikipedia.org/wiki/ASCII)

 Цепь:  Никакого внешнего оборудования не требуется.

 Создан в 2006 Николасом Замбетти (Nicholas Zambetti),
 модифицирован 9 апреля 2012 Томом Иго (Tom Igoe),
 еще раз модифицирован 22 мая 2013 Кристианом Мэгли (Cristian Maglie)

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

 <http://www.zambetti.com> 

 */

#include <Console.h>

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

  // Раскомментируйте строчку кода ниже, чтобы включить буферизацию, которая:
  // - улучшит эффективность и скорость передачи данных 
  // - потребует вызова Console.flush() для обеспечения того,  
  // чтобы скетч в любом случае отправил все необходимые данные.

  // Console.buffer(64);

  while (!Console) {
    ; // ждем подключения порта Console.
  }

  // Выводим заголовок с символом перевода строки в конце: 
  Console.println("ASCII Table ~ Character Map");  // "Таблица ASCII ~ Диаграмма символов"
}

// Первым видимым символом в таблице ASCII является «!», которому соответствует число «33»:
int thisByte = 33; 
// Впрочем, вместо чисел можно сразу указать ASCII-символ, 
// но делать это нужно в одинарных кавычках.
// Например, '!' – это то же самое, что и «33», поэтому в скетче можно написать и так:
// int thisByte = '!';  

void loop() { 
  // Сначала выводим значение в его неизменном виде, т.е. исходную бинарную версию байта.
  // Консоль переведет все байты в ASCII-символы,
  // т.е. самый первый номер, «33», будет показан как «!»:
  Console.write(thisByte);

  Console.print(", dec: "); 
  // Выводим в виде строки «дешифрованное» десятичное значение.
  // Для функций Console.print() и Console.prinIn() десятичный формат является форматом по умолчанию,
  // поэтому модификатор не требуется:
  Console.print(thisByte);
  // Впрочем, если хотите, то модификатор для десятичного формата все же можно продекларировать,
  // поэтому нижеуказанная строчка кода, если ее раскомментировать, тоже будет работать:

  // Console.print(thisByte, DEC);  

  Console.print(", hex: "); 
  // Выводим в виде строки «дешифрованное» шестнадцатеричное значение: 
  Console.print(thisByte, HEX);     

  Console.print(", oct: "); 
  // Выводим в виде строки «дешифрованное» восьмеричное значение:
  Console.print(thisByte, OCT); 

  Console.print(", bin: "); 
  // Выводим в виде строки «дешифрованное» двоичное значение, 
  // а в конце ставим символ перевода строки:
  Console.println(thisByte, BIN);

  // Если добрались до последнего видимого символа,
  // т.е. до «~» (он же «126»), останавливаемся:
  if(thisByte == 126) {     // но можно написать и if (thisByte == '~') {
    // Ставим, чтобы обеспечить отправку всех данных до единого:
    Console.flush();

    // Этот цикл длится бесконечно и ничего не делает:
    while(true) { 
      continue; 
    } 
  } 
  // Переходим к следующему символу:
  thisByte++;  
}

См.также

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