Файл: Методическое пособие для преподавателей Обучение робототехническому программированию на основе комплексной платформы Arduino.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 27.04.2024

Просмотров: 55

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
void loop() будет повторятся бесконечно.
7.1. Основы программирования Arduino.

Тип и форма занятия: Ознакомления с новым материалом (лекция, практические занятия, беседа, демонстрация).

Основные понятия, рассматриваемые на занятии:

• Переменные.

• Типы данных (см.таб.№7).

• Операторы (см.таб.№8).

• Комментарии.

• Встроенные функции.
Язык программирования отладочных плат Arduino основан на C/C++, но имеет ряд особенностей, связанных с управлением устройствами реального мира и электронными схемами.


Таблица №7

Доступные типы данных

Тип

Размер (байт)

Диапазон значений

bool

1

true или false

byte

1

от 0 до 255

char

1

-128 до 127

int

2

от -32 768 до 32 767

unsigned int

2

от 0 до 65535

long

4

от -2,147,483,648 до 2,147,483,647

float

4

от -3.4028235E+38 до 3.4028235E+38




Таблица №7

Операторы действия над переменными.

Оператор

Назначение

=

Присваивания.

+

Сумма. Например, int i = 5+5. После выполнения этой строчки кода в

переменной i будет храниться значение 10.

-

Разность. Например, int i = 10-5. После выполнения этой строчки кода

в переменной i будет храниться значение 5.

*

Умножение. Например, int i = 5*3. После выполнения этой строчки кода в переменной i будет храниться значение 15.

/

Деление. Например, float i = 10/4. После выполнения этой строчки

кода в переменной i будет храниться значение 2.5.

%

Остаток от деления нацело. Например, int i = 5/2. После выполнения

этой строчки кода в переменной i будет храниться значение 1.

//

Комментарий, служит для написания пояснений к коду

/* до */

Комментарий на несколько строк




Рассмотрим некоторые встроенные функции, для удобства разбиты на группы.

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

delay(x) - остановка программы на x миллисекунд.

delayMicroseconds(x) - остановка программы на x микросекунд.

millis() - возвращает количество миллисекунд, прошедших от запуска программы. Работа

с контактами (пинами) платы.

pinMode(x,mode) - устанавливает режим работы пина x в режим вывода

(mode=’OUTPUT’) или ввод (mode=’INPUT’).

digitalWrite(x,value) - подает логическую единицу (можно записывать как HIGH, true, 1)

или логический 0 (можно записывать как LOW. false, 0) значение на

цифровой выход x.

digitalRead(x) - считывает значение (логическую 1 или 0) с входа х.

analogRead(х) - считывает значение с аналогового входа х, преобразуя уровень напряжения в цифровое значение. В большинстве плат Arduino аналоговый вход принимает на вход от 0 до 5 вольт. Этот диапазон будет разбит на 1024 участка от 0 до 1023, с шагом около (0.0049 Вольт). Таким образом, можно считывать, например, уровень освещенности.

analogWrite(x,value) - формирует заданное аналоговое напряжение

(value) на выводе номер х в виде ШИМ-сигнала.
Математические функции

min(x,y) - функция возвращает минимальное значение из двух значений x и y.

max(x,y) - функция возвращает максимальное значение из двух значений x и y.

random(x,y) - функция возвращает случайное значение в диапазоне от x до y.

abs(x) - возвращает модуль числа x.

map(x, fromLow, fromHigh, toLow, toHigh) - возвращает значение x, в новом диапазоне.

Например, map(5, 0, 10, 0, 100) вернет 50.

pow(x, exponent) - возводит число х в указанную степень.

sqrt(x) - вычисление квадратного корня из числа х.

sin(x) - вычисление синуса х.

cos(x) - вычисление косинуса х.

Serial позволяет плате Arduino обмениваться данными с компьютером и выводить сообщения в монитор последовательного интерфейса (Serial monitor).

Serial.begin(speed) - открывает соединение с заданной скоростью передачи данных в

бит/c. Часто используют скорость 9600 бит/с.

Serial.end() - закрывает соединение.

Serial.print(s) - передает значение переменной s.

Serial.read() - считывает байт данных из буфера последовательного

соединения.
7.2. Основы программирования Arduino.

Тип и форма занятия: Ознакомления с новым материалом (лекция, практические занятия, беседа, демонстрация).

Язык можно разделить на четыре раздела: операторы, данные, функции и библиотеки. В таблице №9 представлены функции операторов языка программирования с примерами и описаниями.




Таблица №9

Операторы

Примеры

Описание

setup()

void setup()

{

pinMode(3, INPUT);

}

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

loop()

void loop() {

digitalWrite(3, HIGH);

delay(1000);

digitalWrite(3, LOW); }


Функция loop крутится в цикле, позволяя программе совершать вычисления и реагировать на них. Функции setup() и loop() должны присутствовать в каждом скетче, даже если эти операторы в программе не используются.

Управляющие операторы

if

if (x>100) digitalWrite(3,HIGH);

if (x>100) digitalWrite(3,LOW);

Оператор if используется в сочетании с операторами сравнения (==, !=, <, >) и проверяет, достигнута ли истинность условия. Например, если значение переменной x больше 100, то включается светодиод на выходе 13, если меньше — светодиод выключается.

If…else

if (x>100) digitalWrite(3,HIGH);

else digitalWrite(3,LOW);

Оператор else позволяет cделать проверку отличную от указанной в if, чтобы осуществлять несколько взаимно исключающих проверок. Если ни одна из проверок не получила результат ИСТИНА, то выполняется блок операторов в else.

switch…case

switch (x)
{
case 1: digitalWrite(3, HIGH);
case 2: digitalWrite(3, LOW);
case 3: break;
default: digitalWrite(4, HIGH);
}

Подобно if, оператор switch управляет программой, позволяя задавать действия, которые будут выполняться при разных условиях. Break является командой выхода из оператора, default выполняется, если не выбрана ни одна альтернатива

for

void setup() {
pinMode(3, OUTPUT);
}
void loop() {
for (int i=0; i <= 255; i++){
analogWrite(3, i);
delay(10);
} }

Конструкция for используется для повторения операторов, заключенных в фигурные скобки. Например, плавное затемнение светодиода. Заголовок цикла for состоит из трех частей: for (initialization; condition; increment) — initialization выполняется один раз, далее проверяется условие condition, если условие верно, то выполняется приращение increment. Цикл повторяется пока не станет ложным condition

while

void loop() {
while (x < 10) {
x = x + 1;
Serial.println(x);
delay(200); } }

Оператор while используется, как цикл, который будет выполняться, пока условие в круглых скобках является истиной. В примере оператор цикла while будет повторять код в скобках бесконечно до тех пор, пока x будет меньше 10.

do…while

voidloop() {

do
{ x = x + 1;
delay(100);
Serial.println(x); }
while(x < 10);
delay(900); }

Оператор цикла do…while работает так же, как и цикл while. Однако, при истинности выражения в круглых скобках происходит продолжение работы цикла, а не выход из цикла. В приведенном примере, при x больше 10 операция сложения будет продолжаться, но с паузой 1000 мс.

break
continue

switch (x) {
case 1: digitalWrite(3, HIGH);
case 2: digitalWrite(3, LOW);
case 3: break;
case 4: continue;
default: digitalWrite(4, HIGH); }

Break используется для принудительного выхода из циклов switch, do, for и while, не дожидаясь завершения цикла. Оператор continue пропускает оставшиеся операторы в текущем шаге цикла.

{}
(фигурные скобки)

void setup()
{
pinMode(3, INPUT);
}

Открывающая скобка “{” должна сопровождаться закрывающей скобкой “}”. Непарные скобки могут приводить к скрытым и непонятным ошибкам при компиляции скетча.

//
(комментарий)

x = 5;  // комментарий

Комментарии используются для напоминания, как работает программа. Они игнорируются компилятором и не экспортируются в процессор, не занимая место в памяти микроконтроллера.

#define

#define ledPin 3

Директива #define позволяет дать имя константе. Директива служит исключительно для удобства и улучшения читаемости программы.

#include

// библиотека для серво
#include <Servo.h>

Директива #include используется для включения сторонних библиотек в скетч. Помните, что директивы #include и #define, не требуют точки запятой.

Типы данных

boolean

boolean val = false;

Переменная boolean может принимать значение — true или false. Каждая переменная типа boolean занимает один байт в памяти микроконтроллера.

char

// оба значения эквивалентны
char val = ‘A’;
char val = ’65’;

Тип данных char хранит символьное значение и занимает в памяти 1 байт. Символы пишутся в одинарных кавычках, например: ‘A’, но в памяти символы хранятся в виде чисел

int

Int val = 32767;

Тип данных для хранения целых чисел. Переменная типа int хранит целочисленные 16-битные значения в диапазоне от -32768 до 32767.

unsigned int

unsigned int val = 65535;

Переменная типа unsigned int также может хранить двухбайтовые значения. Но вместо отрицательных чисел хранит только положительные значения в большом диапазоне от 0 до 65535.

float

float val = 25.1547;

Переменная типа float служит для хранения чисел с десятичным разделителем. Числа с плавающей точкой позволяют более точно описать аналоговые величины, чем целые числа. Точность дробных чисел составляет 6-7 знаков — это общее количество цифр, а не количество цифр после запятой.

Цифровые сигналы

digitalWrite(pin, value);

В pin, записывается номера портов.

pinMode(pin, mode);

Если порт установлен в режим

OUTPUT, в него можно

записать HIGH (логическую

единицу, +5В) или LOW

(логический ноль, GND). Режим может быть или INPUT (вход) или OUTPUT (выход).

digitalRead(pin);

Если порт установлен в режим INPUT эта команда возвращает значение сигнала на входе HIGH или LOW.

Аналоговые сигналы

Arduino - цифровое

устройство, но может

работать и с аналого-выми

сигналами


analogWrite(pin,value);

Некоторые порты Arduino (3,5,6,9,10,11)

поддерживают режим ШИМ .

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

единиц и нулей и может изменяться в пределах от 0 (0В) до 255 (+5В).

analogRead(pin);

Если аналоговый порт настроен в режим INPUT, то можно измерить напряжение на нем. Может принимать

значения от 0 (0В) до 1024 (+5В



Примеры написания скетча.
Пример №1: Считываем с датчика освещенности уровень яркости и если он

меньше половины, то включаем светодиод, подключенный к выходу №9.

Скетч к примеру №1:
int analogSensorPin = 3;

int ledPin = 9;

void setup(){

pinMode(ledPin, OUTPUT);

}

void loop(){

if(analogRead(analogSensorPin)<512){

digitalWrite(ledPin, HIGH);

}

else{

digitalWrite(ledPin, LOW);

}

}
Можно объединять несколько частей условия при помощи логических операторов:

&& - И

|| - ИЛИ

! - НЕ (отрицание)
Пример №2: В условие из предыдущего примера можем добавить еще один датчик и включать свет, только, если их показания не отличаются больше, чем на 70 единиц.

Скетчкпримеру №2:

int analogSensor1Pin = 3;

int analogSensor2Pin = 4;

int ledPin = 9;

void setup(){

pinMode(ledPin, OUTPUT);

}

void loop(){

int valueSensor1 = analogRead(analogSensor1Pin);

int valueSensor2 = analogRead(analogSensor2Pin);

if((valueSensor1<512) && (abs(valueSensor1-

valueSensor2)<=70)){

digitalWrite(ledPin, HIGH);

}

else{

digitalWrite(ledPin, LOW);

}

}

Пример №3: Функции, вычисляющей среднее трех целых чисел.
float average(int x1, int x2, int x3){

int sum =x1+x2+x3;

return sum/3;

}

// Функция имеет имя “average”, возвращает значение при помощи return.
Пример №4: :-. Светодиод постепено будет тускнет.

int PWMpin = 13; //СД подключен через резистор 220 ом на 13 выводе.

void setup(){

}

void loop(){

for ((int i=0; i<=255; i++) {

analogWrite(PWMpin,i)

delay(10);

} }
Подведение итогов темы и ответы на вопросы студентов (5минут).
Контрольные вопросы:

1. Язык программирование?

2. Среда программирования IDE?

3. Из чего состоит Интерфейс программирования IDE?

4.Основная конструкция Язык программирования?

5. Что такое скетч?

6. Что такое компиляция?

7. Что такое отладка скетча?

8. Что такое плата Arduino?

9. Что такое библиотека Arduino?

10. Что такое прошивка?

11. Назначение команды pinMode?

12.Назначение команды Delay?

13. Переменные?

14. Типы данных?

15. Математические функции?


16. Назначение оператора setup()?

17. Назначение оператора loop()?

18. Назовите управляющих операторов?

Тема №8. Электронные схемы и TinkerCad.

Тип и форма занятия: Ознакомления с новым материалом (лекция, практические занятия, демонстрация).

Основные понятия, рассматриваемые на занятии:

  • Tinkercad;

  • Симуляция и эмуляция;

  • Основные элементы интерфейса Tinkercad;

  • Практические занятия.


Тинкеркад (Tinkercad Circuits Arduino) – Это эмулятор Arduino, который позволяет собирать электрические цепи и программировать Ардуино и проверить работоспособность, смоделировав процесс. Что достаточно удобно для студентов изучать Ардуино и робототехнику. Чтобы начать работы достаточно зарегистрироваться в Tinkercad интернета.

Возможности симулятора Tinkercad для разработчика Arduino


  • Онлайн платформа, для работы не нужно ничего кроме браузера и устойчивого интернета.

  • Удобный графический редактор для визуального построения электронных схем.

  • Предустановленный набор моделей большинства популярных электронных компонентов, отсортированный по типам компонентов.

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

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

  • Встроенный редактор Arduino с монитором порта и возможностью пошаговой отладки.

  • Готовые для развертывания проекты Arduino со схемами и кодом.

  • Визуальный редактор кода Arduino.

  • Возможность интеграции с остальной функциональностью Tinkercad и быстрого создания для вашего устройства корпуса и других конструктивных элементов – обрисованная модель может быть сразу же сброшена на 3D-принтер.