Определение режима работы цифровых выводов, input и output 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Определение режима работы цифровых выводов, input и output



Цифровые выводы могут работать как входные INPUT или выходные (OUTPUT). Установка соответствующего режима осущестляется функцие pinMode().

Выводы определены как входные

Выводы Arduino (Atmega) сконфигурированные как входные при помощи pinMode() имеют высокое входное сопротивление. Таким образом возможно чтение значения с датчиков. но не питание выводом светодиода.

Выводы определены как выходные

Выводы, определенные как выходные имеют низкий импеданс. Это значит, что мы можем подавать через вывод большие токи, достаточные для питания устройств/схем.Максимальный ток через выводы Atmega 40 мА. Учтите, что вывод, определенный как выходной, может быть поврежден в случае замыкания на противоположную по уровню шину питания.

 

Целочислительные константы

Обычно, цифровые константы имеют основание 10, однако в некоторых случаях требуется другая система счисления

Основание Пример Формат Комментарий

10 (десятичное) 123 нет

2 (двоичное) B1111011 добавляем 'B' работает только с 8-бит значениями(0 до 255), допустимые символы 0 и 1

8 (восьмеричное) 0173 добавляем "0" допустимые символы 0-7

16 (шестнадцатеричное) 0x7B добавляем "0x" допустимые символы 0-9, A-F, a-f

 

Пример:

101 // равен числу 101 в десятичной системе счисления ((1 * 10^2) + (0 * 10^1) + 1)

B101 // равен числу 5 в десятичной системе счисления ((1 * 2^2) + (0 * 2^1) + 1)

Двоичный формат работает только для байт (8 бит), от 0 (B0) до 255 (B11111111). Если необходимо обработать в двоичном формате int (16бит) это можно сделать в два шага:

myInt = (B11001100 * 256) + B10101010; // B11001100 старший байт

0101 // равен числу 65 в десятичной системе счисления ((1 * 8^2) + (0 * 8^1) + 1)

 

Внимание:

Возможно создание труднонаходимой ошибки, записывая незначащие нули в старших разрядах - компилятор может ошибчно принять ваше число за восьмеричное.

0x101 // равен числу 257 в десятичной системе счисления ((1 * 16^2) + (0 * 16^1) + 1)

 

U & L форматы

По умолчанию, целочислительные константы объявлены как int с соответствующими ограничесниями. Для определения таких константс другим типом данных пользуются следующими форматами записи:

'u' или 'U' определяет константу как положительную (unsigned). Например: 33u

'l' или 'L' определяет костанту в формат long. Пример: 100000L

'ul' или 'UL' определяет константу в формат unsigned long. Пример: 32767ul

 

Константы с плавающей точкой.

Также как и целочислительные константы, константы с плавающей точкой случат для создания более удобочитаемого кода.

Пример:

n =.005;

Константы с плавающей точкой можно указывать в научном виде, используя букву E или e.

константа эквивалентна: также эквивалентна:

10.0 10

2.34E5 2.34 * 10^5 234000

67e-12 67.0 * 10^-12.000000000067

 

Типы данных

 

Void

Тип void используется только для объявления функций. Он показывает, что функция не возвращает никакого значения вызвавшей ее функции.

Boolean

Может принимать одно из двух состояний - true или false (хотя и занимает целый байт ОЗУ)

От переводчика - поскольку тип boolean характерен для флагов, целесообразно использовать определенные биты какой-то переменной, етм самым более полно используя оперативную память.

 

Char

Описание:

Даный тип данных занимает 1 байт ОЗУ и хранит символ. Единичные символы выделяются в одинарные кавычки, например 'A'. Для объявления многобуквенных символьных переменных используются вдойные кавычки "ABC".

Символы хранятся в виде числа, соответсвующего по таблице ASCII определенному символу. Это значит, что с символьными переменнымии можно совершать арифметические операции. Таким образом 'A'+1 имеет значение 66, когда символу A по ASCII соответсвует 65.

Тип данных char кодирует в диапазоне от -128 до 127, т.к. является переменной типа signed. Для использования 8-бит переменной типа unsigned, используйте тип данных byte.

 

Unsigned char

Описание

символьная переменная типа unsigned занимает 1 байт памяти также как и byte.

unsigned char КОдирует числа в диапазоне от 0 до 255.

Предпочтительнее использовать тип byte вместо этого типа.

 

Byte

Описание:

byte хранит 8-бит положительное число, от 0 до 255.

 


Int

Описание:

Целочисленный тип данных. Занимает 2 байта и может хранить значения от -32 768 до 32767.

Отрицательные значения хранятся в т.н. дополнительном коде, когда старший бит показывает, что число отрицательное. При этом биты переменной инвертируются и прибавляется 1.

Unsigned int

Описание

Unsigned ints (положительное целочислительное) такая же переменная что и int, также занимает 2 байта. Однако она хранит только положительные числа, поэтому вмещает диапазон чисел от 0 до 65,535 (2^16) - 1).

 

Word

Описание

word хранит 16-бит положительное число, от 0 до 65536. Также как и unsigned int.

 

Long

Описание:

Long это расширенный тип данных целочислительной переменной. Занимает 32 бит (4 байта и может хранить числа от -2,147,483,648 до 2,147,483,647.

 

Unsigned long

Описание:

Unsigned long это расширенный тип данных положительной целочислительной переменной, занимающий 32 бит (4 байт).Может хранить положительные значения от 0 до 4,294,967,295 (2^32 - 1).

 

Float

Описание:

Тип данных для хранения чисел с плавающей точкой. Числа с плавающей точкой имеют гораздо большее разрешение чем целочисленные переменные. Такие числа могут быть величиной до 3.4028235E+38 от -3.4028235E+38. Они занимают 32 бит (4 байт) данных.

Числа с плавающей точкой не точны и операция 6,0/2,0 не всегда вернет 2,0. Вы должны учитывать погрешность при сравнении двух чисел.

Числа с плаващей точкой вычисляются гораздо медленнее чем целочисленные, поэтому при написании время-критичного кода остерегайтесь большого количества операций над переменными с плавающей точкой. Используйте функции конвертирования чисел с плавающей точкой в целочсленные для увеличения скорости работы программы.

 

Double

Описание

Double это тип данных переменной с плавающей точкой двойной точности. Однако, в Arduino на данный момент, точность double аналогична точности float - т.е. занимает 4 байта.

 

String

Описание

Строки это массивы символов, завершающиеся нулевым сиволом

Пример

Ниже представлены все правильные объявления переменных типа char.

char Str1[15];

char Str2[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o'};

char Str3[8] = {'a', 'r', 'd', 'u', 'i', 'n', 'o', '\0'};

char Str4[ ] = "arduino";

char Str5[8] = "arduino";

char Str6[15] = "arduino";

Возможности для объявления массивов

Объявление массива символов без занесения в него данных, Str1

Объявление массива символов с одной свободной ячейкой - компилятор автоматически добавит туда нулевой символ, Str2

Явное добавление нулевого символа, Str3

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

Инициализация массива я явным указанием длины массива и занесением в массив строковой константы, Str5

Инициализация массива, со свободным местом для более длинных строк, Str6

 

Нулевой символ

Как правило, строки заканчиваются нулевым символом (ASCII код 0). Этот симвлол указывает функции (например, Serial.print ()), что строка закончилась. В противном случае, функция будет продолжать чтение последующих байт памяти, которые фактически не являются частью строки.

Это означает, что ваша строка должна иметь место для еще одного символа, чем необходимое для умещения вашей строки. Вот почему Str2 и str5 необходимо восемь символов, хотя в "Arduino" только семь - последнее место автоматически заполняется нулевым символом. STR4 станет автоматически строкой с 8 символами и нулевым символом в конце В STR3, мы четко указали нулевой символ ('\ 0').

 

Одинарные или двойные кавычки?

строки всегда заключаются в двойные кавычки ("ABC"), а символы - в одинарные ('').

Строки можно объявлять по частям:

char MyString [] = "Это первая линия"

"Это вторая линия"

"Прочее";

 

Массивы строк

Наиболее удобным способом работы с большими объемами текста является использование массив. Поскольку строка - это и так массив, массивы получаются двухмерные. В коде ниже звездочкой после типа данных Char: символ "*" указывает, что это массив указателей. Все имена массива это на самом деле указатели, так что в результате мы работаем с массивом массивов. Указатели являются одними из наиболее сложных для понимания операторов в C для начинающих, однако не обязаельно знать их общее назначение для понимания назначения в данном применении.

 

Массивы

Массив представляет собой набор переменных, доступных по порядковому номеру.

Создание (объявление) Массив

Все методы, описанные ниже это правильные объявления массивов:

Int myInts [6];

Int myPins [] = (2, 4, 8, 3, 6);

Int mySensVals [6] = (2, 4, -8, 3, 2);

char message[6] = "hello";

Вы можете объявить массив без инициализации, как в myInts.

В myPins мы объявляем массив без явного выбора размера. Компилятор подсчитывает элементы и создает массив соответствующего размера.

Наконец, вы можете инициализировать как и размер вашего массива, как и в mySensVals. Обратите внимание, что при объявлении массива типа CHAR, потребуется мето для нулевого символа.

 

 

Доступ к массиву

Индекс в массивах начинается с нуля:

mySensVals [0] == 2, mySensVals [1] == 4, и так далее.

Это также означает, что в массиве с десятью элементами, последний будет под номером 9. Итак:

Int myArray [10] = () 9,3,2,4,3,2,7,8,9,11;

/ / myArray [9] содержит 11

/ / myArray [10] является недействительным и содержит случайную информацию (другой адрес памяти)

По этой причине вы должны быть осторожны в получении доступа к массивам. Доступ к несуществующим ячейкам массива приводит к чтению других областей памяти, а запись в эти области может быть критична. Такой баг считается один из сложноуловимых.

В отличие от основного или Java, компилятор С, не проверяет, существует ли ячейка с таким порядковым номером или нет

Чтобы присвоить значение элементу массива:

mySensVals [0] = 10;

Для получения значения элемента массива:

X = mySensVals [4];

 

Массивы и циклы

Массивы в основном обрабатываются при помощи циклов, где счетчиком цикла является индекс ячейки.

Например, для вывода элементов массива через последовательный порт, можно использовать следующее:

int i;

for (i = 0; i < 5; i = i + 1) {

Serial.println(myPins[i]);

}



Поделиться:


Последнее изменение этой страницы: 2016-08-15; просмотров: 313; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.131.13.37 (0.035 с.)