как установить задержку на 7 часов?
Для моего приложения мне нужно смоделировать солнечный свет, включая восход и настройку солнца.
У меня есть программа, которая будет подсвечивать некоторые светодиоды медленно в течение определенного периода времени, но мне нужно знать, что вводить (задержка), чтобы включить подсветку в течение 7 часов?
Будет ли он работать, если я просто заменил delay(1000)
на delay(25200000UL)
?
Я не хочу запускать что-либо еще в одно и то же время и не хочу использовать или понимать millis()
.
Спасибо за любую помощь.
4 ответа
Да, абсолютно, он должен работать. Но ваш код будет легче читать, если вы используете некоторые константы, например:
const unsigned long SECOND = 1000;
const unsigned long HOUR = 3600*SECOND;
delay(7*HOUR);
Да вы можете написать delay(25200000UL)
, и он будет откладываться на 7 часов.
Как это работает delay(x)
будет задерживаться на x количество миллисекунд.
1 секунда = 1000 миллисекунд
1 минута = 60 секунд
1 час = 60 минут
7 часов = 1000 * 60 * 60 * 7 = 25 200 000
Это число довольно велико, но оно находится в пределах длины без знака: 32 бит = (2 ^ 32) -1 = 4 294 967 295. Выполняя эти суммы, это будет продолжаться 49 дней и 17 часов.
Отсрочка для> 49 дней
Если по какой-то причине вам нужно пройти дольше 49 дней, вы можете сделать это, разместив задержку внутри цикла for
.
const unsigned long ONE_DAY = 24UL*3600*1000;
const unsigned int numOfDays = 51;
int i;
int j;
for( i=0; i<numOfDays; i++ )
{
delay(ONE_DAY);
}
delay (1000) - это задержка в ms. Поэтому для 7-часовой задержки вам нужно 7 часов * 60 минут * 60 секунд * 1000 = 52 200 000
Добавление UL является хорошим, чтобы показать, что оно длинное и неподписанное.
Также он вписывается в unsigned long, который имеет максимальное значение 2 ^ 32-1 = 4 294 967 295.
Если вы действительно хотите его протестировать, вы можете подождать 7 часов или использовать меньшее число (например, деление на 60 * 60, таким образом 7 000, которые должны быть 7 секунд, или сделать это 70 000 и проверить, что это 70 секунд.
Если вы хотите явно указать, как вычисляется 52 200 000 или хотите сделать вашу программу более гибкой, вы всегда можете создать некоторые определения (или константы):
static const uint32_t DELAY_1_S = 1000UL;
static const uint32_t DELAY_1_MINUTE = DELAY_1S * 60UL;
static const uint32_t DELAY_1_HOUR = DELAY_1MINUTE * 60UL;
, чем вы можете использовать
delay(7UL * DELAY_1_HOUR); // Delay 7 hours
Для моего приложения мне нужно смоделировать солнечный свет, включая восход и настройку солнца.
, если вам нужно симулировать эту длительную задержку, вы делаете что-то серьезно неправильно.
, но если вы хотите пойти по этому пути, что-то вроде этого может работать
#define delay_1hr() delay(1000ul * 60 * 60) //delay a hour
//delay a day
void delay_hr(uint8_t hr) {
while (hr--) delay_1hr();
}