Игры с millis(), что за символы?

Adolf_Balalaykin
Offline
Зарегистрирован: 01.02.2021

Собственно сам код таймера. 

// Переменная хранения времени (unsigned long)
uint32_t timer;
bool flag;

// Время работы 10 сек.
#define work_time 10000

// Переодичность (каждые 30 сек.)
#define period 30000

void loop() {
if (millis() - timer >= (flag ? work_time : period)) {
    timer = millis(); 
    flag = !flag;
    digitalWrite(27, flag);
    Serial.println(millis() / 1000L);
 }

Что означают символы "?" и ":" в строке (flag ? work_time : period). Как ни странно в букварях не нашел. Это сокращенная форма записи? 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

гуглить - "Тернарная операция (вопросительный знак) в C"

b707
Offline
Зарегистрирован: 26.05.2017

Adolf_Balalaykin пишет:

 Как ни странно в букварях не нашел.

плохо искал

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

b707 пишет:

плохо искал

Еще хуже искать то, чего не знаешь. Или не можешь словами описать!

Green
Offline
Зарегистрирован: 01.10.2015

- Зюйд, зюйд, ост.
- Да что ты там зюзюкаешь! Пальцем покажи!

Adolf_Balalaykin
Offline
Зарегистрирован: 01.02.2021

xDriver пишет:

гуглить - "Тернарная операция (вопросительный знак) в C"

 
Спасибо!
 
(flag ? work_time : period)
Где оперант flag (плавающего типа)
Если flag=1, то вычисляем work_time и принимаем его значение.
Если flag=0, то вычисляем period и принимаем его значение.
Грубо говоря в моем случае либо 10 сек, либо 30 сек.
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

только код привести в соответствие с логикой:
 

// Переменная хранения времени (unsigned long)
uint32_t timer;
bool flag = true;

// Время работы 10 сек.
#define work_time 10000

// Переодичность (каждые 30 сек.)
#define period 30000


void setup() {
  Serial.begin(115200);
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN,flag);
}

void loop() {
  if (millis() - timer >= (flag ? work_time : period)) {
    timer = millis();
    flag = !flag;
    digitalWrite(LED_BUILTIN, flag);
    Serial.println(millis() / 1000L);
  }
}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ua6em пишет:

только код привести в соответствие с логикой:

Так чего ж не привел?

Период по коду 40 с, а по комментариям 30.

Alexey_Rem
Offline
Зарегистрирован: 09.09.2019

OK

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Alexey_Rem пишет:

OK

у тя манера такая, врываться во все темы без объяснений?

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Ему печатать лень - и так сойдет ))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

andriano пишет:

ua6em пишет:

только код привести в соответствие с логикой:

Так чего ж не привел?

Период по коду 40 с, а по комментариям 30.

а я комментарии в коде не читаю, это жеж не ассемблер )))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ua6em пишет:

а я комментарии в коде не читаю, это жеж не ассемблер )))

А зря.

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

Поэтому несоответствие комментариев коду - первое, на что нужно обращать внимание.

Adolf_Balalaykin
Offline
Зарегистрирован: 01.02.2021

ua6em пишет:

только код привести в соответствие с логикой:

void setup() {
  Serial.begin(115200);
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN,flag);
}

 

Как жешь без однократного выполнения? Конечно в реальном коде и режимы пинов объявлены и скорость посл.порта. Просто не стал "засорять лишними буквами". Серавно спасибо за бдительность :)!!! 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Adolf_Balalaykin пишет:

Как жешь без однократного выполнения? Конечно в реальном коде и режимы пинов объявлены и скорость посл.порта. Просто не стал "засорять лишними буквами". Серавно спасибо за бдительность :)!!! 

Я же говорю - пальцы об клавиатуру вкрофь. А вы не верите )))

Green
Offline
Зарегистрирован: 01.10.2015

Так балалайкин же. Пальцы беречь надо.