как установить задержку на 7 часов?

Для моего приложения мне нужно смоделировать солнечный свет, включая восход и настройку солнца.

У меня есть программа, которая будет подсвечивать некоторые светодиоды медленно в течение определенного периода времени, но мне нужно знать, что вводить (задержка), чтобы включить подсветку в течение 7 часов?

Будет ли он работать, если я просто заменил delay(1000) на delay(25200000UL)? Я не хочу запускать что-либо еще в одно и то же время и не хочу использовать или понимать millis(). Спасибо за любую помощь.

2 голоса | спросил Steve 10 PM00000030000004631 2017, 15:48:46

4 ответа


2

Да, абсолютно, он должен работать. Но ваш код будет легче читать, если вы используете некоторые константы, например:

const unsigned long SECOND = 1000;
const unsigned long HOUR = 3600*SECOND;

delay(7*HOUR);
ответил Edgar Bonet 10 PM00000060000004031 2017, 18:00:40
1

Да вы можете написать 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);
}
ответил sa_leinad 11 AM00000040000004231 2017, 04:22:42
0

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
ответил Michel Keijzers 10 PM00000050000001931 2017, 17:01:19
0
  

Для моего приложения мне нужно смоделировать солнечный свет, включая восход и настройку солнца.

, если вам нужно симулировать эту длительную задержку, вы делаете что-то серьезно неправильно.

, но если вы хотите пойти по этому пути, что-то вроде этого может работать

#define delay_1hr()  delay(1000ul * 60 * 60)  //delay a hour

//delay a day
void delay_hr(uint8_t hr) {
  while (hr--) delay_1hr();
}
ответил dannyf 11 PM00000040000004431 2017, 16:12:44

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132