Arduino:Примеры/ConsoleASCIITable: различия между версиями
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">») |
Нет описания правки |
||
Строка 24: | Строка 24: | ||
Подключаем класс '''Console''' (он является наследником библиотеки '''Bridge'''). | Подключаем класс '''Console''' (он является наследником библиотеки '''Bridge'''). | ||
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS | <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 | <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 | <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 | <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 | <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 | <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 | <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 | <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 | <syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS"> | ||
/* | /* | ||
Вывод ASCII-таблицы через консоль | Вывод ASCII-таблицы через консоль |
Версия от 18:18, 14 мая 2023
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Вывод 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++;
}