Можно ли запустить две функции в arduino одновременно?

Я новичок в мире arduino, и у меня нет никакого опыта. Я просто хочу спросить, могу ли я запустить две функции в arduino одновременно. Я собираюсь сделать детектор землетрясений, но в то же время я хочу получать sms на свой телефон, когда он сигнализирует. Возможно ли это?

, 👍0

Обсуждение

Если отправка сигнала тревоги зависит от обнаружения землетрясения, вам не нужно делать две вещи одновременно, а последовательно, что достаточно просто., @ocrdu

Вы пробовали его запрограммировать? Если да, пожалуйста, покажите нам (свернутый) код и сообщите нам, где вы спотыкаетесь. Если нет, пожалуйста, попробуйте, прежде чем продолжить., @the busybee

Вы здесь сами по себе, потому что, похоже, технические ответы запрещены., @jwh20


1 ответ


1

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

Кроме того, если в некоторых случаях (прерывания, обратные вызовы, асинхронные функции и т.д.) Все кажется по-другому, код всегда выполняется шаг за шагом, например, когда вы следуете рецепту во время приготовления пищи.

Вам не нужно беспокоиться об этом, на самом деле эти шаги выполняются процессором очень быстро, и вы можете делать много вещей так, как они были бы сделаны, казалось бы, одновременно.

Arduino Uno (Atmega328) работает на частоте 16 МГц. Как вы можете прочитать здесь: "почти пустой цикл () просматривается около 150 тысяч раз в секунду".

Так что не беспокойтесь об одновременности ваших функций. Вы можете написать функцию для обнаружения землетрясения, которая вызывает другие функции (например, сигналы тревоги, процедуры и т. Д.) Без большого промежутка времени (лучшая логика, я думаю, такова: сначала проверьте событие, а затем сделайте вещи).

Единственное, что я предлагаю вам сделать, это уменьшить код, чтобы он стал как можно меньше (и быстрее), но мы говорим о нескольких миллисекундах промежутка от землетрясения до тревоги.

Если вам нужно зарегистрировать точное время землетрясения (абсолютная точность), вы можете использовать команду micros(). В этом случае не забудьте сделать это в качестве первой инструкции (чтобы уменьшить задержку, конечно).

,