что означает тире?

VeD
Offline
Зарегистрирован: 21.02.2016

Есть код мигание светодиодом, без delay 

Там во такая строчка  if(currentMillis - previousMillis > interval)

Что означает - между 

currentMillis и previousMillis?

Если было бы так if(currentMillis && previousMillis > interval) то другое дело

VeD
Offline
Зарегистрирован: 21.02.2016
const int ledPin =  13;      // номер выхода, подключенного к светодиоду
// Variables will change:
int ledState = LOW;             // этой переменной устанавливаем состояние светодиода
long previousMillis = 0;        // храним время последнего переключения светодиода
 
long interval = 1000;           // интервал между включение/выключением светодиода (1 секунда)
 
void setup() {
  // задаем режим выхода для порта, подключенного к светодиоду
  pinMode(ledPin, OUTPUT);     
}
 
void loop()
{
  // здесь будет код, который будет работать постоянно
  // и который не должен останавливаться на время между переключениями свето
  unsigned long currentMillis = millis();
  
  //проверяем не прошел ли нужный интервал, если прошел то
  if(currentMillis - previousMillis > interval) {
    // сохраняем время последнего переключения
    previousMillis = currentMillis; 
 
    // если светодиод не горит, то зажигаем, и наоборот
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;
 
    // устанавливаем состояния выхода, чтобы включить или выключить светодиод
    digitalWrite(ledPin, ledState);
  }
}

 

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

минус

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

VeD пишет:
Если было бы так if(currentMillis && previousMillis > interval) то другое дело

опиши нам словами, какое бы дело было?

VeD
Offline
Зарегистрирован: 21.02.2016

Я понял это символ как за это. Типа сравнение. CurrentMillis и previousMillis больше interval

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

VeD пишет:

Там во такая строчка  if(currentMillis - previousMillis > interval)

если (текущаяMillis минус предыдущаяMillis больше интервала)

То есть, из значения currentMillis вычитается значение previousMillis и результат сравнивается со значением interval. Если результат вычитания больше интервала, то условие выполняется.

VeD пишет:

Если было бы так if(currentMillis && previousMillis > interval) то .....

..... то получилась бы фигня, а не то что нам надо.

VeD пишет:
Я понял это символ как за это.

Оригинальный символ "как за это" :-)

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

VeD пишет:
Я понял это символ как за это. Типа сравнение. CurrentMillis и previousMillis больше interval

ясно - купи кондиционер.

OlegM
Offline
Зарегистрирован: 14.06.2016

там переменные в скобки надо взять, а то приоритет непонятен, хотя возможно и работает..

VeD
Offline
Зарегистрирован: 21.02.2016

А зачем вообще отнимать ноль от текущего состояния? Нельзя написать if(currentMillis>interval)
{
Выполнить блок
}

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Там не всегда ноль. После первого выполнения условия, в previousMillis запишется текущее значение millis на момент  выполнения этого условия:

// сохраняем время последнего переключения
previousMillis = currentMillis;

То есть, ноль там будет только до первого срабатывания условия.

P.S. Предвидя очередное недопонимание: здесь не сравниваются значения previousMillis и currentMillis (оператор ==), здесь значение currentMillis присваивается переменной previousMillis (оператор =)

VeD пишет:
Нельзя написать if(currentMillis>interval) { Выполнить блок }

А что это тебе даст? После того, как currentMillis станет больше интервала - условие будет выполнятся бесконечно, т.к. currentMillis всегда увеличивается. Меньше интервала на некоторое время оно станет только через 50 дней, когда переполнится millis()

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

VeD пишет:
А зачем вообще отнимать ноль от текущего состояния? Нельзя написать if(currentMillis>interval) { Выполнить блок }

слушай, ты когда время засекаешь не секундомером, а часами - как ты это делаешь?

отнимаешь время старта от времени финиша... или, как-то иначе?

VeD
Offline
Зарегистрирован: 21.02.2016

я наоборот суммирую время от старта до финиша. Ну ни как не отнимаю

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

Jeka_M пишет:

Меньше интервала оно станет только через 50 дней, когда переполнится millis()

зря об этом написали, скоро последует вопрос .............  :)

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

VeD пишет:

я наоборот суммирую время от старта до финиша. Ну ни как не отнимаю

Вы наверно живёте по другим законам физики в параллельной вселенной?

Дано: старт произошел в 17 минут, финиш был в 52 минуты. Как узнать, сколько прошло минут?

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

VeD пишет:

я наоборот суммирую время от старта до финиша. Ну ни как не отнимаю

ок. и, у тебя гуманитарное образование, а по физике и математике в школе были твёрдые тройки?

VeD
Offline
Зарегистрирован: 21.02.2016

Ну да. Отнимать надо. 

Если применить это к теме, то получается.

Если прошло N времени , отнимем от него 0 и если N больше секунды то выполняем действие?

VeD
Offline
Зарегистрирован: 21.02.2016

И двойки были.

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

VeD пишет:

Если применить это к теме, то получается.

Если прошло N времени , отнимем от него 0 и если N больше секунды то выполняем действие?

получается, что твой мозг не способен оперировать абстрактными объектами - пиши стихи.

VeD
Offline
Зарегистрирован: 21.02.2016

Хотя. Нифига. Лично я прибавляю. Например, решил я засеч время. На часах. 15.30. закончил дело в 18.25. Я прибавляю к 15 3, а минуты округляю. Так как эти пять минут не играют роли. Я думаю не сколько нужно отнять от конечной суммы, а сколько нужно прибавить к первоначальной, чтобы получилась конечная.

VeD
Offline
Зарегистрирован: 21.02.2016

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

Фантазии у меня хватает.

Ну для начала хотелось бы точности

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

VeD пишет:

Хотя. Нифига. Лично я прибавляю. Например, решил я засеч время. На часах. 15.30. закончил дело в 18.25. Я прибавляю к 15 3, а минуты округляю. Так как эти пять минут не играют роли. Я думаю не сколько нужно отнять от конечной суммы, а сколько нужно прибавить к первоначальной, чтобы получилась конечная.

ок. следующий ебанутый вопрос.

Maverik
Offline
Зарегистрирован: 12.09.2012

топикстартеру учить операторы и приоритет операций в с++ 

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

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

VeD пишет:

Фантазии у меня хватает.

фантазия и абстрактное мышление - примерно, то же самое, что стихи и мануал к автомобилю.

VeD
Offline
Зарегистрирован: 21.02.2016

Почитал гугл. И понял что такое абстракция.  Я научусь. Мне все равно для понимания некоторых вещей нужна точность, чтобы быть уверенным почему так, а не иначе.  

toc
Offline
Зарегистрирован: 09.02.2013

VeD пишет:
Лично я прибавляю. Например, решил я засеч время. На часах. 15.30. закончил дело в 18.25. Я прибавляю к 15
3, а минуты округляю. Так как эти пять минут не играют роли. Я думаю не сколько нужно отнять от конечной суммы, а сколько нужно прибавить к первоначальной, чтобы получилась конечная.

Считайте что компьютеры не умеют думать как вы.

Сколько нужно прибавить к 463684377 чтобы получилось 458422809 ?

VeD
Offline
Зарегистрирован: 21.02.2016

Речь шла о времени. В этом случае конечно проще вычесть

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

VeD пишет:

Хотя. Нифига. Лично я прибавляю. Например, решил я засеч время. На часах. 15.30. закончил дело в 18.25. Я прибавляю к 15 3, а минуты округляю

А почему прибавляете именно 3, откуда взялась эта цифра? А может надо 4 или 5? Откуда вы узнаёте, что надо прибавить именно 3?

OlegM
Offline
Зарегистрирован: 14.06.2016

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

toc
Offline
Зарегистрирован: 09.02.2013

Арифметика одна. Я же не просил бананы с километрами складывать. О времени:
Сколько нужно прибавить к 463684377 минутам чтобы получилось 458422809 минут ?

toc
Offline
Зарегистрирован: 09.02.2013

VeD, сколько вам лет?

Maverik
Offline
Зарегистрирован: 12.09.2012

это скорее всего просто тролль.

toc
Offline
Зарегистрирован: 09.02.2013

VeD,
Коль ты старый человек,
Дядей будешь нам навек.
Коли парень ты румяный,
Братец будешь нам названый.
Коль старушка, будь нам мать,
Так и станем величать.
Коли красная девица,
Будь нам милая сестрица.

Кто же? Выдь и покажися,
С нами честно подружися.

nevkon
Offline
Зарегистрирован: 20.01.2015

Ну так и заставьте компьютер тогда думать как вам надо, вместо

currentMillis - previousMillis > interval

пишите

previousMillis + interval < currentMillis

VeD
Offline
Зарегистрирован: 21.02.2016

Обязательно стебатся. Ещё троллем обозвали:) Мне тогда будет понятнее, занести в переменную int variable=currentMillis-previous; чтобы не тупить с этим минусом

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

nevkon пишет:

Ну так и заставьте компьютер тогда думать как вам надо, вместо

currentMillis - previousMillis > interval

пишите

previousMillis + interval < currentMillis

nevkon, учи арифметику, нельзя складывать.

VeD
Offline
Зарегистрирован: 21.02.2016

Нельзя складывать? А как же абстрактное мышление?

Zaliv
Offline
Зарегистрирован: 05.03.2011

Строго говоря это два разных знака
‒  это тире
- это минус

 

А по сути программа работает, милисекунды  отсчитываются. Сама программа выполняется в цикле, раз за разом пробегая код в скобках после loop. Каждый раз в переменную currentMillis запиывается текущее время, например 100, потом оно сравнивается с сохраненным, например 45. Потом проверяется не прошел ли интервал (скажем 80), и не порали нырнуть в скобки за проверкой

1 цикл

currentMillis - previousMillis > interval 
100 - 45 > 80 (неверно, не ныряем в скобки)

2 цикл (время уже не 100, а 145 например)
currentMillis - previousMillis > interval 
145 - 45 > 80 (верно, ныряем в скобки)
в скобках запоминаем текущее вермя previousMillis становится 145 и делаем, то ради чего пришли, переключаем светодиод.

3 цикл

180-145> 80 неверно
 

4 цикл
230 - 145 верно, опять ныряем, запоминаем и переключаем светодиод

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

VeD пишет:

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

Фантазии у меня хватает.

Это заметно.

OlegM
Offline
Зарегистрирован: 14.06.2016

что вы флуд разводите по говновопросу..

VeD
Offline
Зарегистрирован: 21.02.2016

Спасибо. Хоть один нормально смог объяснить.

VeD
Offline
Зарегистрирован: 21.02.2016

И ещё почему переменная состояния ledstat int, а не boolean?

nevkon
Offline
Зарегистрирован: 20.01.2015

По сути значения не имеет будет эта переменная иметь тип boolean, byte, int, long int. Там будет хранитьтся всегда 0 (low, false, выключено) или 1 (high, true, включено). Конечно если будете писать программу с оптимизацией выбирайте тип либо bool либо byte, если не ошибаюсь эти типы занимают одинаковое количество памяти.

Maverik
Offline
Зарегистрирован: 12.09.2012

Обязательно стебатся. Ещё троллем обозвали:) Мне тогда будет понятнее, занести в переменную int variable=currentMillis-previous; чтобы не тупить с этим минусом

да, да... имя переменной variable это пять.

 потом немного поскладываешь тип int  с типом unsigned long и будут еще новые впечатления.

OlegM
Offline
Зарегистрирован: 14.06.2016

nevkon пишет:

По сути значения не имеет будет эта переменная иметь тип boolean, byte, int, long int. Там будет хранитьтся всегда 0 (low, false, выключено) или 1 (high, true, включено). Конечно если будете писать программу с оптимизацией выбирайте тип либо bool либо byte, если не ошибаюсь эти типы занимают одинаковое количество памяти.

значение есть и достаточное, тип int занимает 4 байта, а bool 1байт, смысл занимать память в 4 байта, если можно в 1 и это не существенно если одна переменная, но это изначально неверный подход..

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

OlegM пишет:

тип int занимает 4 байта, а bool 1байт

В какой системе?

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

ЕвгенийП пишет:

OlegM пишет:

тип int занимает 4 байта, а bool 1байт

В какой системе?

солнечной!

OlegM
Offline
Зарегистрирован: 14.06.2016

ЕвгенийП пишет:

В какой системе?

ну в уно это 16 битные, а в дуе уже 32 битные типы int, но в любом случае bool выгодней и правильней, для этого он и существует.

VeD
Offline
Зарегистрирован: 21.02.2016

variable = переменная. Имя её уже будет другое. И при чем тут складывание int и unsigned long? 

Что плохого, если занести вычисление времени в переменную?

По-моему ничего не изменится, а мне будет понятнее. 

 

Logik
Offline
Зарегистрирован: 05.08.2014

toc пишет:
Арифметика одна. Я же не просил бананы с километрами складывать. О времени: Сколько нужно прибавить к 463684377 минутам чтобы получилось 458422809 минут ?

Пора бы понять что надо сложить числа. 

Код 

  long a=463684377;
  long b=458422809;
  Serial.println(a);
  Serial.println(b);
  Serial.println(b+~a+1);

Результат.

463684377
458422809
-5261568
 
Ответ. Чтобы получилось 458422809 минут к 463684377 минутам надо прибавить -5261568 минут. И нахрена было выбирать ещё такие числа, чтоб ответ отрицательный вышел )))
Насколько помню структуры АЛУ - сумматоры есть а "вычитателей" не встречал.
 
ПС. VeD, держитесь там, хорошего настроения,  гуманизм победит бездушные машины.
Клапауций 232
Offline
Зарегистрирован: 05.04.2016

Logik пишет:

Ответ. Чтобы получилось 458422809 минут к 463684377 минутам надо прибавить -5261568 минут.

что бы прибавить -5261568 минут, нужно иметь -5261568 минут, а у нас нет машины времени, что бы оперировать отрицательным временем.

Logik
Offline
Зарегистрирован: 05.08.2014

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