Основы программирования в Arduino
Типы переменных в Arduino
Основные константы
Операторы Arduino
 Циклы
Структура программы
Цифровой ввод/вывод
Аналоговый ввод/вывод
Функции работы со временем
Основные функции библиотеки Serial
Основные функции библиотеки Servo
Дополнительные функции ввода/вывода
Функции работы с диапазонами
Функция constrain()
Функция map()
Функции для генерации случайных чисел
Функция randomSeed()
Функции работы с битами и байтами
Побитовый ввод и вывод байта
Измерение длительности сигнала
Широтно-импульсная модуляция
Широтно-импульсная модуляция
Применение
Скважность
1.23M
Category: electronicselectronics

Основы программирования в Arduino2

1. Основы программирования в Arduino

Васильева Лидия Николаевна
доцент кафедры автоматики и управления
в технических системах

2. Типы переменных в Arduino

3. Основные константы

• #define HIGH 0х1 // высокий уровень сигнала
• #define LOW 0х0 // низкий уровень сигнала
• #define INPUT 0х0 // настройка выводов на вход
• #define OUTPUT 0х1 // настройка выводов на выход
• Можно объявлять собственные константы:
• #define LEFT 0х10 // например, для поворота
налево

4. Операторы Arduino

5.

Арифметические операторы могут быть совмещены с
оператором присваивания для более короткой записи.
x+=2; // x=x+2
y*=x; // y=y*x
Инкремент и декремент могут использоваться как в
постфиксной, так и в префиксной форме.
x++; // x=x+1
--y; // y=y-1 перед выполнением операции

6.

Условный оператор
Условный оператор допускает вложения с двумя блоками,
когда условие истинно и ложно (else).
Условие обязательно должно быть заключено в круглые
скобки.
Выражение в круглых скобках может состоять из нескольких
выражений.
if ( (x>2) && (x<5) {
y=0;
}
else if (x==0) {
y=1;
}

7.  Циклы

Циклы
• Оператор цикла со счетчиком for повторяет блок команд определенное
количество раз
for ( <инициализация сч> ; <условие работы цикла> ; <изменение сч> ) {
<блок команд> ;
}
• Оператор while повторяется до тех пор, пока условие цикла истинно.
while ( <условие цикла> ) {
<блок команд> ;
}
• Цикл do… while работает таким же образом, но проверка условия происходит
после выполнения цикла
do {
<блок команд> ;
} while ( <условие цикла> )

8. Структура программы

Библиотеки
Глобальные
определения
и функции
Инициализация
Основной цикл

9. Цифровой ввод/вывод

10. Аналоговый ввод/вывод

11. Функции работы со временем

12. Основные функции библиотеки Serial

13. Основные функции библиотеки Servo

14. Дополнительные функции ввода/вывода

Схема подключения динамика:

15. Функции работы с диапазонами

16. Функция constrain()

constrain(x, a, b) проверяет, входит ли число x в диапазон (a,b) и при
необходимости корректирует значение x, чтобы оно не выходило за
границы диапазона.
Возможны 3 варианта работы функции, :
• возвращение исходного значения x, если оно входит в диапазон;
• возвращение значения a, если x<a;
• возвращение значения b, если x>b.
SensVal=constrain(x, 50, 100); // ограничиваем x интервалом 50 - 100

17. Функция map()

map(x, a, b, c, d) не ограничивает число x, а пропорционально
переводит его из текущего диапазона (a, b) в новый (c, d).
Переведем значение аналогового входа АЦП (диапазон от 0 до
1023) в диапазон от 0 до 50.
val=analogRead(0); // считываем значение
t=map(val, 0, 1023, 0, 50); // переводим в диапазон (0, 50)
диапазон может быть перевернут
t=map(val, 0, 1023, 50, 0);

18. Функции для генерации случайных чисел

19. Функция randomSeed()

Функция randomSeed(seed) инициализирует генератор псевдослучайных чисел.
Использовать ее надо в том случае, если Вы генерируете много последовательностей
случайных чисел, а они вообще то часто повторяются.
Функция random(min, max) возвращает случайное число из диапазона (min, max).
void setup() {
Serial.begin(9600); // инициализация порта вывода
}
void loop() {
Serial.println(random(0, 100));
Serial.println(random(10, 50));
}

20. Функции работы с битами и байтами

21.

Функции работы с битами и байтами

22. Побитовый ввод и вывод байта

shiftOut ( dataPin, clockPin, bitOrder, value ) – выводит байт информации (value) на
порт вход/выхода (datapin) последовательно (побитно).
Вывод может осуществляться как с первого (левого), так и с последнего (правого)
бита.
Каждый бит последовательно подается на заданный порт, после чего подается сигнал
на синхронизирующий порт (clockpin), информируя о доступности к считыванию бита.
bitOrder: используемая последовательность вывода бит. MSBFIRST — слева или
LSBFIRST — справа.
shiftIn (dataPin, clockPin, bitOrder ) – побитно считывает байт с указанного порта
shiftOut (3, 4, MSBFIRST, x);
byte b= shiftIn (5, 6, MSBFIRST);

23. Измерение длительности сигнала

24.

• pulseIn ( pin, value ) – считывает длину сигнала на заданном порту pin,
value – тип ожидаемого сигнала (HIGH или LOW). Функция ожидает пока на
порту не появиться указанный сигнал, затем включается таймер,
считающий длину сигнала. Функция возвращает длину сигнала в
микросекундах или 0 - если не дождалась сигнала за 1 сек.
• pulseIn ( pin, value, timeout ) – считывает длину сигнала с заданным
ограничением по времени ожидания timeout.
int pin = 7; // считывание будет проводится с 7го пина
unsigned long duration;
void setup() {
pinMode(pin, INPUT);
Serial.begin(9600);
}
void loop() {
duration = pulseIn(pin, HIGH, 100000); // считывает длинные положительного сигнала с пина
Serial.println(duration);
}

25. Широтно-импульсная модуляция

26. Широтно-импульсная модуляция

• Микроконтроллеры обычно не могут выдавать произвольное напряжение. Они могут
выдать либо напряжение питания (например, 5 В), либо землю (т.е. 0 В)
• Но уровнем напряжения управляется многое: например, яркость светодиода или скорость
вращения мотора. Для симуляции неполного напряжения используется ШИМ (ШиротноИмпульсная Модуляция, англ. Pulse Width Modulation или просто PWM)

27. Применение

• Выход микроконтроллера переключается между землёй и Vcc
тысячи раз в секунду. Или, как ещё говорят, имеет частоту в
тысячи герц. Глаз не замечает мерцания более 50 Гц, поэтому нам
кажется, что светодиод не мерцает, а горит в полсилы.
• Аналогично, разогнанный мотор не может остановить вал за
миллисекунды, поэтому ШИМ-сигнал заставит вращаться его в
неполную силу.

28. Скважность

Отношение полного периода к времени включения называют скважностью (англ. duty cycle).
Рассмотрим несколько сценариев при напряжении питания Vcc равным 5 вольтам.
50% — эквивалент 2,5 В
10% — эквивалент 0,5 В
90% — эквивалент 4,5 В

29.

• Не любой порт Arduino поддерживает ШИМ, для регулирования
напряжение подойдут пины, помеченные символом тильда «~».
• Для Arduino Uno это пины 3, 5, 6, 9, 10, 11
• Чтобы выдать ШИМ сигнал на одном из портов Arduino,
используют функцию analogWrite:
analogWrite( номер_контакта, уровень_сигнала );
Уровень сигнала задается числом от 0 до 255, где 0 соответствует
0% заполнения, а 255 – 100%
English     Русский Rules