Странное поведение 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.
@GotYaLoot, 👍3
1 ответ
Если вы сделаете что-то вроде
Serial.println(580);
это 5 напечатанных символов (3 цифры, затем CR и LF в конце линия). Каждый символ занимает десять бит времени передачи (один стартовый бит, 8 бит данных и один стоповый бит). Тогда все сообщение 50-битная длина последовательной линии. При скорости 9600 бит/с это занимает около 5,2 миллисекунды.
Обратите внимание, что ПК буферизует данные, которые отображаются в пакеты, каждый пакет имеет одну метку времени. Таким образом, вы видите, что на в среднем между приращениями 5,2 мс.
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Так есть ли быстрое решение этой проблемы?, @GotYaLoot
@GotYaLoot: исправить что? Если проблема заключается в том, как указано в вопросе, «_вывод [...] не имеет смысла для меня_», решение состоит в том, чтобы просто понять этот ответ. Есть ли другая проблема, которую необходимо исправить?, @Edgar Bonet
Я хочу, чтобы последовательный монитор показывал что-то вроде: время 0,001 счетчик=1 время 0,002 счетчик=2 время 0,003 счетчик=3, @GotYaLoot
Как вы ожидаете увидеть распечатку каждую мс, когда для печати одной строки требуется более 5 мс? Также, как указано выше, при работе с последовательной связью с ПК задействовано несколько буферов, а также операционная система не в реальном времени, на которой работает ваш ПК. Это означает, что с этой настройкой невозможно получить точность печатных строк в миллисекундах. Кому-то будет очень сложно дать совет, поскольку мы понятия не имеем, чего вы пытаетесь достичь (в целом)., @Chad G
Если вы увеличите скорость передачи данных с 9600 до 115200, вы увидите гораздо более быструю печать, но вы все равно будете зависеть от последовательных буферов и операционной системы вашего ПК., @Chad G
Если на выпечку торта уходит полчаса, установка таймера на 1 секунду после выпечки торта не приведет к тому, что торты будут появляться каждую секунду., @Nick Gammon