Menu
CoddyTech

Скорость мигания через последовательный порт

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

Введите 250, и плата получит три символа: '2', '5' и '0', а затем символ новой строки. Serial.parseInt() считывает цифры и преобразует их в число 250, останавливаясь на первом символе, который не является цифрой.

Но есть нюанс: если цифры не поступают, parseInt() ждёт их до 1 секунды, а затем возвращает 0. Это происходит после каждого введённого вами числа: символ новой строки, завершивший число, всё ещё ожидает обработки, поэтому Serial.available() снова больше 0, и parseInt() не находит цифр, ждёт секунду и возвращает 0.

Поэтому считайте 0 значением «ничего полезного» и сохраняйте старое значение:

if (Serial.available() > 0) {
  int n = Serial.parseInt();
  if (n > 0) {
    wait = n;
  }
}

Вы увидите, что светодиод приостанавливается на секунду после каждого введённого вами числа: это parseInt() ждёт.

challenge icon

Задание

Средне

Светодиод на выводе 13 мигает: горит wait мс и не горит wait мс; начальное значение wait — 500. Изменяйте скорость с помощью монитора Serial:

  • когда есть ожидающие символы, считайте число с помощью Serial.parseInt()
  • если оно больше 0, сохраните его в wait

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

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

const int ledPin = 13;

int wait = 500;

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  // когда во входном буфере есть символы, считай число в wait (если оно больше 0)
  digitalWrite(ledPin, HIGH);
  delay(wait);
  digitalWrite(ledPin, LOW);
  delay(wait);
}
quiz iconПроверьте себя

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

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

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