Cat hungry.png
Здравствуйте! Собираем деньги на перевод материалов по электронике(https://www.allaboutcircuits.com/education/). Реквизиты указаны здесь.

Arduino:Примеры/ConsoleASCIITable

Материал из Онлайн справочника
Перейти к: навигация, поиск

Перевод: Максим Кузьмин (Cubewriter)
Перевел 2686 статей для сайта.

Контакты:

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


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

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

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

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

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

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

Цепь

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

Код

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

  1. #include <Console.h>

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

  1. int thisByte = 33;

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

  1. void setup() {
  2.   Bridge.begin();
  3.   Console.begin();
  4.  
  5.   while (!Console) {
  6.     ; // ждем подключения порта
  7.   }
  8.  
  9.   Console.println("ASCII Table ~ Character Map"); // "Таблица ASCII ~ Диаграмма символов"
  10. }

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

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

  1. Console.write(thisByte);

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

  1. Console.print(thisByte);

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

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

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

  1. if(thisByte == 126) {  
  2.     Console.flush();
  3.  
  4.     while(true) {
  5.       continue;
  6.     }
  7.   }

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

  1. thisByte++;

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

  1. /*
  2.   Вывод ASCII-таблицы через консоль
  3.  
  4.   Выводит на окно консоли байты со значением от 33 до 126 во всех возможных форматах:
  5.  * в исходном двоичном значении
  6.  * в «дешифрованных» десятичном, шестнадцатеричном, восьмеричном и двоичном значениях
  7.  
  8.  Более подробно об ASCII можно прочесть тут (http://www.asciitable.com) и тут (http://en.wikipedia.org/wiki/ASCII)
  9.  
  10.  Цепь:  Никакого внешнего оборудования не требуется.
  11.  
  12.  Создан в 2006 Николасом Замбетти (Nicholas Zambetti),
  13.  модифицирован 9 апреля 2012 Томом Иго (Tom Igoe),
  14.  еще раз модифицирован 22 мая 2013 Кристианом Мэгли (Cristian Maglie)
  15.  
  16.  Этот код не защищен авторским правом.
  17.  
  18.  <http://www.zambetti.com>
  19.  
  20.  */
  21.  
  22. #include <Console.h>
  23.  
  24. void setup() {
  25.  // Инициализируем Console и ждем открытия порта:
  26.   Bridge.begin();
  27.   Console.begin();
  28.  
  29.   // Раскомментируйте строчку кода ниже, чтобы включить буферизацию, которая:
  30.   // - улучшит эффективность и скорость передачи данных
  31.   // - потребует вызова Console.flush() для обеспечения того,  
  32.   // чтобы скетч в любом случае отправил все необходимые данные.
  33.  
  34.   // Console.buffer(64);
  35.  
  36.   while (!Console) {
  37.     ; // ждем подключения порта Console.
  38.   }
  39.  
  40.   // Выводим заголовок с символом перевода строки в конце:
  41.   Console.println("ASCII Table ~ Character Map");  // "Таблица ASCII ~ Диаграмма символов"
  42. }
  43.  
  44. // Первым видимым символом в таблице ASCII является «!», которому соответствует число «33»:
  45. int thisByte = 33;
  46. // Впрочем, вместо чисел можно сразу указать ASCII-символ,
  47. // но делать это нужно в одинарных кавычках.
  48. // Например, '!' – это то же самое, что и «33», поэтому в скетче можно написать и так:
  49. // int thisByte = '!';  
  50.  
  51. void loop() {
  52.   // Сначала выводим значение в его неизменном виде, т.е. исходную бинарную версию байта.
  53.   // Консоль переведет все байты в ASCII-символы,
  54.   // т.е. самый первый номер, «33», будет показан как «!»:
  55.   Console.write(thisByte);
  56.  
  57.   Console.print(", dec: ");
  58.   // Выводим в виде строки «дешифрованное» десятичное значение.
  59.   // Для функций Console.print() и Console.prinIn() десятичный формат является форматом по умолчанию,
  60.   // поэтому модификатор не требуется:
  61.   Console.print(thisByte);
  62.   // Впрочем, если хотите, то модификатор для десятичного формата все же можно продекларировать,
  63.   // поэтому нижеуказанная строчка кода, если ее раскомментировать, тоже будет работать:
  64.  
  65.   // Console.print(thisByte, DEC);  
  66.  
  67.   Console.print(", hex: ");
  68.   // Выводим в виде строки «дешифрованное» шестнадцатеричное значение:
  69.   Console.print(thisByte, HEX);    
  70.  
  71.   Console.print(", oct: ");
  72.   // Выводим в виде строки «дешифрованное» восьмеричное значение:
  73.   Console.print(thisByte, OCT);
  74.  
  75.   Console.print(", bin: ");
  76.   // Выводим в виде строки «дешифрованное» двоичное значение,
  77.   // а в конце ставим символ перевода строки:
  78.   Console.println(thisByte, BIN);
  79.  
  80.   // Если добрались до последнего видимого символа,
  81.   // т.е. до «~» (он же «126»), останавливаемся:
  82.   if(thisByte == 126) {     // но можно написать и if (thisByte == '~') {
  83.     // Ставим, чтобы обеспечить отправку всех данных до единого:
  84.     Console.flush();
  85.  
  86.     // Этот цикл длится бесконечно и ничего не делает:
  87.     while(true) {
  88.       continue;
  89.     }
  90.   }
  91.   // Переходим к следующему символу:
  92.   thisByte++;  
  93. }

См.также

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

  1. Arduino - Console ASCII Table