Millis не могу осилить.

AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

А то что в дефайнах int-овые значения это как? В этой задаче нормально, а в общем случае?

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Да, с дефайнами у вас ничего не меняется, хотя почему их рекомендуют заменить, я тоже не понимаю. Тут нужна помощь мудрых ))  

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

v258 пишет:

Да, с дефайнами у вас ничего не меняется, хотя почему их рекомендуют заменить, я тоже не понимаю. Тут нужна помощь мудрых ))  

Садман же уже написал, почему:

sadman41 пишет:
Перешёл с define на const, чтобы размерности переменных считались корректно. А то так в запале UL забудешь и мозги кипятишь. .

AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

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

Dumper
Offline
Зарегистрирован: 21.09.2020

Тема про одно, а всплывает много полезностей для саморазвития. Дефайн... У меня много дефайнов. Подслушаю.

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

sadman41 пишет:
Тернарный оператор с двумя присваиваиваниями волшебен, конечно: ledOn ? (onOffTime = OffTime) : (onOffTime = OnTime);

А так?

onOffTime = ledOn ? OffTime : OnTime;

 

AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

Так тогда:

#define StartDelay 2000UL
#define OnTime 100UL
#define OffTime 1000UL

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  static uint32_t oldMillis = millis();
  static uint32_t onOffTime = StartDelay;
  boolean ledOn = digitalRead(LED_BUILTIN);

  if (millis() - oldMillis >= onOffTime) {
    oldMillis = millis();
    onOffTime = ledOn ? OffTime : OnTime;
    digitalWrite(LED_BUILTIN, !ledOn);
  }
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

v258 пишет:

sadman41 пишет:
Тернарный оператор с двумя присваиваиваниями волшебен, конечно: ledOn ? (onOffTime = OffTime) : (onOffTime = OnTime);

Сразу вспоминается сцена на заправке из "Бумера".

Эмм, а в чем проблема? Ну так, для самообразования ))


Нет проблем, все должно работать.

Просто выглядит вот так: https://youtu.be/RLNwovNIA-s

sadman41
Offline
Зарегистрирован: 19.10.2016

AndreyD, лично я считаю, что перекинуть один байт дешевле, чем читать пин каждый луп.

AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

sadman41 пишет:
AndreyD, лично я считаю, что перекинуть один байт дешевле, чем читать пин каждый луп.

В рамках этой задачи согласен, а если задача усложниться и пин поменяет своё значение дальше в loop-е?

sadman41
Offline
Зарегистрирован: 19.10.2016

А для чего он будет менять значение? Сигнализация состояния системы должна осуществляться в одном месте, чтобы быть предсказуемой. Иначе начнется китайский новый год.

AndreyD
AndreyD аватар
Offline
Зарегистрирован: 07.10.2018

Ну а вдруг измениться. ) А "кошерно" будет переместить строку 12 после 14? #119

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

v258 пишет:

1) Константы в 1-3 строках не нужны в принципе. Каждая из них занимает два байта. Если заменить их дефайнами, то занимать не будут ничего, а на функционале не скажется

Ты ошибаешься, обьявленные так константы совсем не занимают память, пока ты не захочешь получить на них ссылку.  Т.е ведут себя точно так же как определённые через #define с 2 существенными отличиями, они 

1. Типизированные, т.е тип константы ты не отдаёшь на откуп не очень умному препроцессору 70-х (а он с тех пор мало изменился), а задаёшь сам

2. Подчиняются, в отличие от определённых в #define, области видимости. 

Я всегда использую const и consexpr вместо устаревшего #define, чего и тебе желаю

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

AndreyD пишет:

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

Как явно объявить тип byte? и int (а то мало ли он щас дефолтный а потом изменится и будет по дефолту не int)

Я знаю только 0xFFE3A300UL = unsigned long. и ещё знаю что F в конце это float.

Больше ничо не знаю.

DetSimen, деда, покажы какойнибуть скетч из своих. Я, пи██юк такой, должен учиться у старших, вместо того чтобы бухлостримы и видео с котами по ютубу смотреть.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Voodoo Doll пишет:

DetSimen, деда, покажы какойнибуть скетч из своих. Я, пи██юк такой, должен учиться у старших, вместо того чтобы бухлостримы и видео с котами по ютубу смотреть.

https://github.com/DetSimen

Учиться надо не у меня, а у ЕвгенияП. 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

DetSimen пишет:

v258 пишет:

1) Константы в 1-3 строках не нужны в принципе. Каждая из них занимает два байта. Если заменить их дефайнами, то занимать не будут ничего, а на функционале не скажется

Ты ошибаешься, обьявленные так константы совсем не занимают память, пока ты не захочешь получить на них ссылку.  Т.е ведут себя точно так же как определённые через #define с 2 существенными отличиями, они 

1. Типизированные, т.е тип константы ты не отдаёшь на откуп не очень умному препроцессору 70-х (а он с тех пор мало изменился), а задаёшь сам

2. Подчиняются, в отличие от определённых в #define, области видимости. 

Я всегда использую const и consexpr вместо устаревшего #define, чего и тебе желаю

Да, уже понял, спасибо ))