Урок 3. Создание базовых проектов с использованием Arduino

Урок 3. Создание базовых проектов с использованием Arduino

План
1. Работа с последовательным портом

 

Хочешь освоить программирование Arduino в аудитории и с преподавателем- записывайся на блиц-курс по робототехнике.

 

Теоретическая часть

Для связи компьютера с платой Arduino существует последовательный порт обмена данными(UART). Для обмена данными используется USB порт и цифровые порты ввод/вывода 0 (RX) и 1 (TX).
Важно! При работе с последовательным портом выводы 0 и 1 не могут использоваться для других целей.
Для работы с последовательным интерфейсом IDE Arduino имеет встроенный Монитор порта (Serial monitor). Внешний вид монитора порта изображен на рисунке 1.

Рисунок 1 — Диалоговое окно “Монитор порта”

 

Можно использовать другие программы для работы с COM-портом, например Terminal для Windows или CuteCom для Linux дистрибутивов.
Значение в скорости связи в мониторе порта должно соответствовать значению, указанному в параметрах в функции begin().
Для работы с последовательным портом существуют функции класса Serial. Ниже перечислены основные из них:
Serial.begin() — Задает скорость передачи данных через последовательный порт в битах в секунду (бодах). В параметрах указывается скорость передачи. Для взаимодействия с компьютером следует использовать одну из предустановленных скоростей обмена: 300, 600, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600 или 115200. Для взаимодействия с какими-либо другими устройствами через 0 и 1 выводы можно задавать другие скорости. Обычно эта функция вызывается внутри функции setup().

Serial.available() — получает количество поступивших на порт байт. Полученные байты записываются в буфер последовательного порта. В буфере может находиться до 64 байт.

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

Serial.print() — посылает данные через последовательный порт как ASCII текст.

Serial.println() — функция аналогична Serial.print(), но добавляет данным признак конца строки и возврата каретки.

Важное замечание: скорость работы функции Serial.print() всегда меньше, чем скорость работы контроллера. Следовательно, ее вызов при каждом выполнении будет существенно замедлять выполнение программы. Если необходимо, чтобы на порт непрерывно отправлялись показания с какого-либо датчика, то рациональнее всего организовать отправку данных при существенном изменении значения датчика относительно его старого значения.

 

Практическая часть

1. К плате подключен потенциометр и два светодиода: красный и зеленый. Если значение, принимаемое с потенциометра больше 512, то нужно зажечь красный светодиод, если меньше – зеленый.

 

Рисунок 2 — Схема подключения двух светодиодов и потенциометра к плате

 

Ниже представлен листинг программы:

#define red 12
#define green 13
#define res A0
void setup()
{
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
}
void loop()
{
if (analogRead(res)<=512)
{
digitalWrite(green, HIGH);
digitalWrite(red,LOW);
}
else
{
digitalWrite(red, HIGH);
digitalWrite(green,LOW);
}
}

 

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

 

Рисунок 3 — Схема, дополненная серводвигателем

 

Программа, реализующая задание 2 представлена ниже: 

#include
#define red 12
#define green 13
#define res A0
#define pinmotor 11
Servo motor;
int curr_value=0, prev_value=0;
void setup()
{
Serial.begin(9600);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
motor.attach(pinmotor);
}
void loop()
{
curr_value=analogRead(res);
if (abs(curr_value-prev_value)>=10)
Serial.println(curr_value);
if (curr_value<=512)
{
digitalWrite(green, HIGH);
digitalWrite(red,LOW);
}
else
{
digitalWrite(red, HIGH);
digitalWrite(green,LOW);
}
motor.writeMicroseconds(curr_value*1024/1850+550);
prev_value=curr_value;
}

 

 


Урок 2


Учебная программа курса


Урок 4

Центр робототехники "BOTEON".
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: