Timing
Время в миллисекундах/микросекундах
Вообще говоря, вы можете задать время выполнения кода, вызвав millis()
или micros()
до и после интересующего события. Например:
unsigned long startTime = millis(); // отметить время начала
someLengthyThing(); // делаем то, что хотим засекать
unsigned long endTime = millis(); // отметить время окончания
unsigned long elapedTime = endTime - startTime; // вычислить прошедшее время
Для более точных измерений используйте micros()
(возвращает прошедшее время в микросекундах), а не millis()
(возвращает прошедшее время в миллисекундах).
Синхронизация с digitalWrite
Если вызывать миллисекунды/микросекунды нецелесообразно (у вас может не быть возможности увидеть результаты), вы также можете отсчитывать время, включая и выключая цифровой вывод. Например:
digitalWrite (13, HIGH); // мы собираемся что-то рассчитать - включаем D13
someLengthyThing(); // делаем то, что хотим засекать
digitalWrite (13, LOW); // готово - выключаем D13
Вы можете поместить осциллограф или логический анализатор на контакт 13 (или любой другой контакт, который вы выберете, который, естественно, должен быть установлен в режим OUTPUT
), а затем посмотреть, как долго сигнал находится на высоком уровне.
Время записи в порт
К сожалению, выполнение самой функции digitalWrite занимает около 4 мкс, поэтому для более точного определения времени используйте прямой доступ к порту. Например, на Uno:
PORTB = bit (5); // мы собираемся что-то рассчитать - включаем D13
someLengthyThing(); // делаем то, что хотим засекать
PORTB &= ~bit (5); // готово - выключаем D13
Для доступа к этим портам требуется всего 250 нс, что является гораздо меньшими затратами.
См. также таймеры port-mapping
Вопросы, связанные с [timing]:
- Программное обеспечение, устраняющее дребезг кнопки при отпускании У меня возникли проблемы с программным устранением дребезга на Arduino UNO. В моем коде есть условие, при котором нежелательный дребезг регистрируется как нажатие кнопки. Я использую прерывание…
- Нужен сигнал ШИМ частотой 10 кГц от контактов 3 и 11 с использованием таймера 2. Работа контакта 11 должна быть инверсной по отношению к контакту 3. Я использовал цифровое чтение и цифровую запись, а также простой, если еще. Но задержка составляет 10 мкс. Что мне делать? Я…
- Последовательный буфер остается пустым, как только он становится пустым один раз. У меня вопрос относительно чтения последовательного буфера. При запуске программы я посылаю последовательную команду датчику, который 1. активирует его и 2. позволяет ему отправлять данные - это…
- лучшая практика для производительности: пустой цикл () при использовании прерывания? Я работаю над небольшим аппаратным миди-проектом и использую attachInterrupt() для назначения функции обратного вызова контакту прерывания. В функции цикла ничего не делается, поэтому она…
- Проблема дрейфа таймера Arduino У меня есть два Arduino, которые обмениваются данными через последовательный порт. Каждое Arduino использует алгоритм TDMA, в котором каждому Arduino назначается один временной интервал. Ардуино…
- delayMicroseconds и время выполнения микросекунд необъяснимо Я только что поэкспериментировал с точностью синхронизации моего Arduino Uno R3, используя этот код: unsigned long beginTime; unsigned long endTime; void setup() { Serial.begin(9600); //…
- Помогите с millis, чтобы получить точное время По сути, я пытаюсь создать музыкальную шкатулку, которая активируется светом с помощью LDR. Когда он открыт, играет песня, в то время как сервопривод вращает фигурку взад и вперед, а светодиод…
- Реле просто включаются и выключаются на delay(), а не на millis(). Я использую нечеткую логику для времени работы реле, но реле просто включаются и выключаются с интервалом задержки () , который я ставлю в конце цикла. Это мой код: void loop () { ph =…
- "Защелкнуть" SPI (LE / CS / SS) для определенного количества циклов SCLK? Контекст Я работаю над проектом, который включает в себя 13 каскадных светодиодов STMicroelectronics LED1642GWs . Эти драйверы светодиодов по существу представляют собой 16-битные регистры сдвига…
- Переключился с 3-футовых на 10-футовые соединительные провода. Теперь моя установка работает неправильно. Проблемы со сроками? Работает двигатель постоянного тока(максимальный вход 6,5 А), драйвер двигателя (пиковый выход MD10C 7Amp) и Arduino Mega. Я стабилизирую объект с помощью акселерометра в качестве датчика. Я…
- Как запустить 4 светодиода последовательно на основе кнопочного входа? Я пытаюсь создать программу, которая последовательно запускает 4 светодиода, а также может делать другие вещи с разными входами и выходами. Из-за этого я использую функцию millis, а не задержку. У…
- Как остановить код Arduino через 1 секунду? Я хочу отправить сообщение NRF24L01 в NRF24L01. Я хочу посмотреть, смогу ли я послать всего одну секунду. Как я могу остановить код через 1 секунду?
- Синхронизация внутренней частоты с внешней В этом вопросе: Процедура изменения частоты Nano или аналогичная , @EdgarBonet дал очень хороший метод генерации таймингов, которые не разделяют системные часы равномерно. Он также сказал, что для…
- Arduino Мигает двумя светодиодами без задержки (количество повторений) Сообщество Arduino. У меня есть опыт работы с Arduino уже 3 года, и я, наконец, пришел к выводу, что нужно полностью избавиться от функции задержки. Ниже приведен код для полного 10-кратного…
- Можно ли перепрыгнуть задержку в цикле? #include <Servo.h> Servo myservo; int pos = 0; int servo_pin = 3; int led_pin = 4; void setup() { myservo.attach(servo_pin); Serial.begin(9600); pinMode(led_pin,OUTPUT); } …
- Как быстро Arduino выполняет код? Я использую Arduino Nano Every. Возьмем этот пример, где я измеряю две вещи A и B. Loop{// этот цикл выполняется один раз в секунду //Читать A,B //Измените что-то с помощью analogueWrite…
- Как прочитать направление таймера в фазе правильного ШИМ? Мне пришлось использовать Timer0 с корректным по фазе ШИМ и прескалером 1. Это приводит к частоте ШИМ 32 кГц и, очевидно, влияет на миллисы, задержки и микросы. (Timer1 и Timer 2 также используются,…
- Получение угловой скорости по данным кватернионов (BNO055) Я могу получить данные кватерниона от датчика BNO055 и хотел бы преобразовать их в угловую скорость для моего проекта. Я знаю, что вы можете вытащить гироскоп непосредственно для данных, но из того,…
- _delay_ms() работает намного медленнее, чем ожидалось (в 6 раз) на tinyAVR 0/1 (ATTiny1604) Я разработал специальную плату разработки AVR с использованием микроконтроллера Atmel ATTiny1604. Он принадлежит к новому семейству Tiny-0, из-за его недавности некоторые необходимые изменения в…
- Проблема с использованием micros() вместо millis() У меня есть две реализации функций, которые, как я ожидал, будут работать одинаково: #define HEAD_STEP_DELAY 1000 unsigned long HeadLastMicros; void HeadUpdate() { if…
- Запуск двигателя постоянного тока в течение заданного промежутка времени Я пытаюсь запустить двигатель постоянного тока на 100 мс, а затем полностью выключить его. Вот мой код, есть какие-нибудь предложения о том, почему он может не работать? Мой Код const int…
- Проблема с последовательностью воздушных поршней Я новичок, пытаюсь последовательно активировать 2 комплекта из 3 воздушных поршней, просматривая руководства на YouTube... Помогите, пожалуйста, очень, пожалуйста?? :-) Имеется 3 комплекта по 2…
- Как заставить ЖК-экран прокручивать текст , позволяя вводить кнопки? Вот что я хочу, чтобы мой код делал: это часть проекта по завариванию чая, который автоматизирует заваривание чая, часть этого изначально имеет выбор либо черного/травяного чая, либо…
- ESP8266 CCLOCK Странное поведение Я пытаюсь написать очень быстрый код для ESP8266, поэтому я пытаюсь понять, как рассчитать время. Я обнаружил CCLOCK , регистр, который отражает количество тактов с момента запуска. (…
- Как установить переменную, чтобы после выполнения условия цикл игнорировал ввод? У меня есть аналоговые входы для моего Uno, которые я очищаю и использую, чтобы поддерживать высокий уровень на цифровом выводе, пока выход не упадет до нуля. На этом этапе я хочу прекратить чтение…
- Аппаратное прерывание срабатывает случайным образом Итак, есть довольно общая часть моего проекта, которая включает в себя запуск ISR, который переворачивает логическое значение. Я настроил программную часть следующим образом: void setup() { …
- Зависит ли код shiftOut от (низкой) скорости Arduino? В (официальном) файле wiring_shift.c я нашел следующий код для shiftOut: void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val) { uint8_t i; for (i = 0; i…
- Использовать timer0, не влияя на millis() и micros(). Я пишу библиотеку, которой требуется ISR для выключения светодиода через некоторое время после его включения. Поскольку все дело в том, чтобы включать и выключать светодиод, нет необходимости быть…
- Время занимает больше времени, чем ожидалось Это на заказной печатной плате Arduino (32u4), которую я программирую с помощью программатора Sparkfun Pocket AVR. Другая программа, которую я писал, работала не так, как я ожидал, поэтому я…
- Могу ли я получить помощь с кодом метронома на моем arduino uno? Хорошо, значит, я ничего не знаю о программировании или электронике, кроме того, что я электрик. Это то, над чем я работал около месяца. Я могу спросить что-то глупое, но вот оно. Кроме того, я…
- Когда GPS не видит спутники, как я могу продолжать отмечать плавное время? Я получаю 10 обновлений в секунду от моего устройства GPS (MTK3339, используемого в коммутационной плате Adafruit) и использую его для обновления дисплея часов. Это работает достаточно хорошо, хотя…
- Прекращает ли DmxSerial прерывания? Я пытаюсь создать установку с помощью Arduino Mega, имеющей выход DMX (используя библиотеку DMXSimple) и библиотеку MIDI (будет сделано). Мне было интересно, если у меня возникнут проблемы.…
- Таймер Arduino для включения подачи в определенное время Я работаю над проектом для школьного технического класса. Наша цель — сделать транспортное средство, которое будет двигаться по кабелю и сбрасывать яйцо в цель, спускаясь по кабелю. Я использую…
- Использование mills() вместо задержки() на реле, не обеспечивающих надежное переключение Я знаю, что мне следует опубликовать некоторый код, который, возможно, будет чище, но на самом деле мне просто нужен ответ на проблему, с которой я часто сталкиваюсь при использовании mills() …
- Как рандомизировать задержку в коде шагового двигателя Arduino? Как добавить случайную ЗАДЕРЖКУ между 10 и 20 секундами? Например, в следующей логике шагового двигателя задержка составляет 11 секунд, что выражается в миллисекундах как: delay(11000). Что…
- 1