Menu
CoddyTech

Угол сервопривода через Serial

Часть раздела Выходные сигналы путешествия по Arduino на Coddy. Урок 23 из 24.

Рука также может получать команды из монитора последовательного порта. Введите угол и нажмите Enter; Serial.parseInt() считывает число:

if (Serial.available() > 0) {
  int angle = Serial.parseInt();
  Serial.read();  // символ новой строки после числа
  // использовать angle
}

Символ новой строки после числа остаётся в ожидании. При следующем запуске loop() функция parseInt() не найдёт цифр, подождёт секунду и вернёт 0. Игнорировать это значение 0 можно было для скорости мигания, но 0 — это настоящий угол. Поэтому сразу после числа считайте символ новой строки с помощью одного вызова Serial.read().

Кто-нибудь может также ввести число, которое не является углом. arm.write() воспринимает любое число от 544 и выше как длительность импульса в микросекундах, поэтому значение 1000 установит руку примерно на 45 градусов. Сначала constrain() ограничивает угол диапазоном от 0 до 180:

angle = constrain(angle, 0, 180);  // передайте ей переменную, а не parseInt()
challenge icon

Задание

Средне

Перемещайте сервопривод на угол, введённый в Serial monitor:

  • когда приходит число, считайте его с помощью Serial.parseInt(), затем считайте символ новой строки (0 — это тоже угол)
  • ограничьте его диапазоном от 0 до 180 с помощью constrain()
  • переместите рычаг и выведите угол в виде Angle: 45

Нажмите Run, отправьте 45 из Serial monitor, затем нажмите Check.

Попробуйте сами

#include <Servo.h>

Servo arm;

void setup() {
  arm.attach(9);
  arm.write(90);
  Serial.begin(9600);
}

void loop() {
  // когда поступит число: считай его, затем считай символ новой строки,
  // ограничь число диапазоном от 0 до 180, поверни рычаг и выведи число
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Выходные сигналы

Потренируйтесь самостоятельно: Песочница Arduino