Странное поведение Arduino uno в простой программе-счетчике

Итак, я только что получил свою первую плату Arduino Uno, и вывод на последовательный монитор не имеет для меня смысла. Для этого кода

int counter = 0;

void setup() {
  Serial.begin(9600);

}

void loop() {
  counter++;
  Serial.println(counter);
  delay(1);
}

Я ожидаю увеличения каждые 1 мс. Но то, что я вижу в консоли, странно

Во-первых, я ожидаю увидеть такую отметку времени: 27.270, 27.271, 27.272... Во-вторых, с 27.301 до 27.334 счетчик увеличился только на 7 вместо ~30.

, 👍3


1 ответ


5

Если вы сделаете что-то вроде

Serial.println(580);

это 5 напечатанных символов (3 цифры, затем CR и LF в конце линия). Каждый символ занимает десять бит времени передачи (один стартовый бит, 8 бит данных и один стоповый бит). Тогда все сообщение 50-битная длина последовательной линии. При скорости 9600 бит/с это занимает около 5,2 миллисекунды.

Обратите внимание, что ПК буферизует данные, которые отображаются в пакеты, каждый пакет имеет одну метку времени. Таким образом, вы видите, что на в среднем между приращениями 5,2 мс.

,

Так есть ли быстрое решение этой проблемы?, @GotYaLoot

@GotYaLoot: исправить что? Если проблема заключается в том, как указано в вопросе, «_вывод [...] не имеет смысла для меня_», решение состоит в том, чтобы просто понять этот ответ. Есть ли другая проблема, которую необходимо исправить?, @Edgar Bonet

Я хочу, чтобы последовательный монитор показывал что-то вроде: время 0,001 счетчик=1 время 0,002 счетчик=2 время 0,003 счетчик=3, @GotYaLoot

Как вы ожидаете увидеть распечатку каждую мс, когда для печати одной строки требуется более 5 мс? Также, как указано выше, при работе с последовательной связью с ПК задействовано несколько буферов, а также операционная система не в реальном времени, на которой работает ваш ПК. Это означает, что с этой настройкой невозможно получить точность печатных строк в миллисекундах. Кому-то будет очень сложно дать совет, поскольку мы понятия не имеем, чего вы пытаетесь достичь (в целом)., @Chad G

Если вы увеличите скорость передачи данных с 9600 до 115200, вы увидите гораздо более быструю печать, но вы все равно будете зависеть от последовательных буферов и операционной системы вашего ПК., @Chad G

Если на выпечку торта уходит полчаса, установка таймера на 1 секунду после выпечки торта не приведет к тому, что торты будут появляться каждую секунду., @Nick Gammon