Режимы работы цифровых портов
Основные функции и понятия
Структура программы
1: // Однострочный комментарий
2: /* Многострочный комментарий (комментарии не занимают память) */
3: #include - подключить файл (библиотеку)
4: void setup() {} - всё находящееся внутри {} будет выполнено 1 раз при загрузке Ардуино
5: void loop() {} - всё находящееся внутри {} бесконечно повторяется сверху вниз
6: После каждого «действия» ставится точка запятой;
Типы данных
1: <тип данных> <имя>;
2: int my_val; // объявить переменную my_val)
3: <тип данных> <имя> = <значение>;
4: int my_val = 2300; // объявить переменную my_val и присвоить ей число 2300
Особенности использования переменных
1: • Внимательно следите за значением, которое принимает переменная. Если значение превысит максимальное или принизит минимальное (выйдет из диапазона) для этого типа данных, то переменная сбросится в 0, либо выдаст вообще случайное число. Такую ошибку потом будет трудно отследить.
2: • Тип данных указывается при объявлении переменной ТОЛЬКО ОДИН РАЗ, далее переменная
3: используется чисто по имени (обращение к переменной). При попытке сменить тип
4: переменной (переобъявить переменную) вы получите ошибку. Но только в том случае, если
5: переменная глобальная, либо когда локальная переобъявляется внутри функции, в которой
6: она была объявлена.
Типы переменных
1: • Глобальная переменная – объявляется ВНЕ функций, например в самом начале скетча. Обращаться к глобальной переменной (использовать её значение) можно использовать ВЕЗДЕ.
|
|
2: • Локальная переменная – объявляется ВНУТРИ функции, и обращаться к ней можно только внутри этой функции.
Математические операторы
1: +, -, *, / - сложить, вычесть, умножить...
2: pow(x, a); - возвести "х" в степень "а" ( xa ), pow может возводить в дробную степень!
3: sq(x); - возвести число "х" в квадрат ( x2 )
4: sqrt(x); - взять квадратный корень числа "х"
5: abs(x); - найти модуль числа, |х|
6: sin(x), cos(x), tan(x); - синус, косинус, тангенс
7: round(x); - математическое округление (если после запятой больше или равно 5, то округляем в большую сторону)
8: ceil(x); - округлить в бОльшую сторону
9: floor(x); - округлить в меньшую сторону
10: x += a; - прибавить "а" к "х"
11: x -= a; - вычесть "а" из "х"
12: x *= a; - домножить "х" на "а"
13: x /= a; - разделить "х" на "а"
14: x++; - увеличить "х" на 1
15: x--; - уменьшить "х" на 1
Последовательный порт
1: Serial.begin(<скорость>); - открыть порт
2: Serial.begin(9600); // открыть порт на 9600 БОД
3: ВНИМАНИЕ! Скорость, установленная в begin(), должна быть равна скорости монитора порта (в самом мониторе правый нижний угол). Иначе в выводе получите крокозябры!
|
|
4: Serial.print(); - вывод в порт. Переменные и цифры напрямую, текст – в кавычках " "
5: Serial.println(); - вывод с переводом строки
Условный оператор if
6: if () {} - условный оператор, проверяет условие в () и выполняет код в {} если оно верно
7: if () { - проверяет условие, если верно,
8: выполняет эту часть кода
9: } else { - если неверно
10: выполняет вот эту
11: }
Операторы сравнения
1: a == b - если а равно b
2: a != b - если а не равно b
3: > - если a больше b (строго)
4: < - если a меньше b (строго)
5: >= - если a больше или равна b
6: <= - если a меньше или равна b
Логические операторы
7: && - логическое И (одно условие И второе)
8: || - логическое ИЛИ (либо одно, либо второе)
9: ! – отрицание (например if (!val) - если val - ложь, т.е. 0)
Функции таймера
1: millis() - возвращает количество миллисекунд, прошедших с момента включения МК.
2: Макс. значение: 4’294’967’295 мс или 50 суток.
3: micros() - возвращает количество микросекунд, прошедших с момента включения МК. Макс. значение: 4’294’967’295 мкс или 70 мин
4: Пример: нужно раз в пять секунд выполнять какое-то действие
5: unsigned long last_time = 0; //создаем глобальную перменную
6: if (millis() - last_time > 5000) {
7: // что-то сделать
8: last_time = millis();
|
|
9: }
Режимы работы цифровых портов
1: Аналоговые и цифровые порты могут работать как ВХОДЫ и как ВЫХОДЫ
2: По умолчанию все порты работают КАК ВХОДЫ
3: pinMode(pin, mode); - настроить порт
4: • pin - номер порта. Цифровые: 0 – 13. Аналоговые: 14 - 19, либо A0 - A5
5: • mode - режим работы порта
6: • INPUT - вход, принимает сигнал
7: • OUTPUT - выход, выдаёт 0 или 5 Вольт
8: • INPUT_PULLUP - вход с подтяжкой к 5 В
Генерация цифрового сигнала
1: digitalWrite(pin, signal); - подать цифровой сигнал
2: • pin - номер порта. Цифровые: 0 – 13. Аналоговые: 14 - 19, либо A0 - A5
3: • signal - какой сигнал подаём
4: • LOW, или 0 (ноль), или false - 0 Вольт
5: • HIGH, или 1, или true - 5 Вольт
Чтение цифрового сигнала
1: digitalRead(pin); - прочитать цифровой сигнал
2: • pin - номер порта. Цифровые: 0 – 13. Аналоговые: 14 - 19, либо A0 - A5
Чтение аналогового сигнала
1: analogRead(pin); - прочитать аналоговый сигнал (оцифровать)
2: • pin - номер пина. Аналоговые: 0 - 7
3: • Функция возвращает значение 0.. 1023 в зависимости от напряжения на пине от 0 до опорного напряжения (грубо 5 В)
Изменение диапазона значений
1: map(val, min, max, new_min, new_max); - возвращает величину в новом диапазоне
2: • val - входная величина
3: • min, max - минимальное и максимальное значение на входе в map
|
|
4: • new_min, new_max – соответственно мин. и макс. значения на выходе
5: constrain(val, min, max); - ограничить диапазон переменной val до min и max
Генерация ШИМ сигнала
1: analogWrite(pin, duty);
2: • pin – пин, На котором генерировать ШИМ
3: • duty – величина 0.. 255, соответствует скважности ШИМ 0.. 100%
4: ШИМ пины Arduino NANO, UNO: 3, 5, 6, 9, 10, 11
5: ШИМ пины Arduino MEGA: все до 13
Цикл for, «счётчик»
1: for (counter; condition; change) {} - цикл for
2: • counter – переменная счётчика, обычно создают новую «локальную», в стиле int i = 0;
3: • condition – условие, при котором выполняется цикл, например «счётчик меньше 5» i < 5;
4: • change – изменение, т.е. увеличение или уменьшение счётчика, например i++, i--, i += 10;
5: Пример:
6: for (byte i = 0; i < 100; i++) { // счётчик от 0 до 99
7: Serial.println(i); // вывести в монитор порта числа от 0 до 99
8: }
Цикл while
1: while (condition) {}
2: • condition – условие, при котором выполняется блок кода, заключённый в {}
3: Пример:
4: while (flag==1) {
5: // какой-то кусок кода, который выполняется, пока flag равен логической 1
6: }
Создание массива
1: <тип данных> <имя массива>[<число элементов>];
2: <тип данных> <имя массива>[<число элементов>] = {элемент1, элемент2…};
3: Если не указываются элементы, то обязательно нужно указать размер массива, чтобы под него выделилось место в памяти. Размер можно не указывать в том случае, если сразу указываются все элементы.
4: Примеры:
5: int myInts[6];
6: int myPins[] = {2, 4, 8, 3, 6};
7: int mySensVals[6] = {2, 4, -8, 3, 2};
8: char message[6] = "hello";
Чтение-запись массива
1: Главное помнить, что нумерация элементов НАЧИНАЕТСЯ С НУЛЯ!
2: myArray[5] = 10; // присвоить пятому элементу число 10
3: if (myArray[5] == 20) ….. // если элемент массива под номером 5 равен 20…
4: Пример. Забивка массива случайными числами
5: byte myArray[50]; // создать массив myArray на 50 ячеек
6: for (byte i = 0; i < 50; i++) { // счётчик от 0 до 49
7: myArray[i] = random(100); // присвоить случайное число от 0 до 99 элементам массива под
8: номерами 0.. 49
9: }
10: Пример трех массивов для Морзе:
11:
12: char chrMorze[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '.', ';', ',', ':', '?', '!', '-', ' ', '\n', '\r'};
13:
14: uint8_t lenMorze[] = { 2, 4, 4, 3, 1, 4, 3, 4, 2, 4, 3, 4, 2, 2, 3, 4, 4, 3, 3, 1, 3, 4, 3, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5};
15:
16: uint8_t varMorze[] = {0x1, 0x8, 0xA, 0x4, 0x0, 0x2, 0x6, 0x0, 0x0, 0x7, 0x5, 0x4, 0x3, 0x2, 0x7, 0x6, 0xD, 0x2, 0x0, 0x1, 0x1, 0x1, 0x3, 0x9, 0xB, 0xC, 0xF, 0x7, 0x3, 0x1, 0x0, 0x10, 0x18, 0x1C, 0x1E, 0x1F, 0x0, 0x2A, 0x15, 0x38, 0x0C, 0x33, 0x21, 0x11, 0x15, 0x0A};
17:
Пояснение к массиву с Морзе
· chrMorze - содержит символы;
· lenMorze - содержит количество точек или тире для символа;
· varMorze - содержит комбинацию точек и тире для символа (точка = 0, тире = 1);
Пример: возьмем второй элемент каждого массива - из массива chrMorze понятно что это символ «В», из массива lenMorze понятно что он состоит из 4 точек или тире, а из массива varMorze понятно, что комбинация равна значению 0x8 = 0b00001000 (из 16-ой системы счисления в двоичную). Берем последние 4 бита - 1000, точка = 0, тире = 1, значит в азбуке Морзе это « – • • • ».
Пример: возьмем седьмой элемент каждого массива - из массива chrMorze понятно что это символ «G», из массива lenMorze понятно что он состоит из 3 точек или тире, а из массива varMorze понятно, что комбинация равна значению 0x6 = 0b00000110. Берем последние 3 бита - 110, точка = 0, тире = 1, значит в азбуке Морзе это « – – • ».
Дата добавления: 2018-05-12; просмотров: 210; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!