цикличность программы.

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

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

Alexandr0202 пишет:

Осталось разобраться как не ждать когда подойдет очередь кнопки а нажать и отпустить ее в момент горения диода.

Боюсь Вас разочаровать, но это невозможно. Тут надо выбирать, либо вставлять паузы, либо обрабатывать кнопки. А Вы хотите всё и сразу - так не бывает :-)

Буду опрашивать кнопки (попытаюсь по крайней мере )

Гриша
Offline
Зарегистрирован: 27.04.2014

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

Alexandr0202 пишет:

Осталось разобраться как не ждать когда подойдет очередь кнопки а нажать и отпустить ее в момент горения диода.

Боюсь Вас разочаровать, но это невозможно. Тут надо выбирать, либо вставлять паузы, либо обрабатывать кнопки. А Вы хотите всё и сразу - так не бывает :-)

варианты:

1) флаг. а) по фронту б) по лог уровню в) с перезапуском таймера г) без перезапуска

2)  после события всегда выполняется только одно условие по таймеру (или задержке).

3) он всегда есть, просто не все его могут заметить...  

возможно это рановато... класс титановый велосипед для delay без delay() ;

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

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

Гриша пишет:

варианты:

1) флаг. а) по фронту б) по лог уровню в) с перезапуском таймера г) без перезапуска

2)  после события всегда выполняется только одно условие по таймеру (или задержке).

3) он всегда есть, просто не все его могут заметить...  

возможно это рановато... класс титановый велосипед для delay без delay() ;

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

Я еще вариант придумал (самый простой на мой взгляд), но он почему то не работает (нигде не написано что нельзя делать повторение одной и той же функции). Т.е. горят диоды и  идет опрос на HIGH входного пина, как только пин получил питание, переход по goto. Почему то с одним разом работает а с множеством нет....

[code]
if (digitalRead(inPin) == HIGH ) // если на пин 2 подано напряжение
{
  goto lab ;
}
analogWrite (ledPin, 255), analogWrite (ledPin1, 255), analogWrite (ledPin2, 0);// включаем светодиод 1 и 2, выход 13 отключаем
delay (1000); //  время горения диода
if (digitalRead(inPin) == HIGH ) // если на пин 2 подано напряжение
{
  goto lab ;
}
analogWrite (ledPin, 255), analogWrite (ledPin1, 255), analogWrite (ledPin2, 0);// включаем светодиод 1 и 2, выход 13 отключаем
delay (1000); //  время горения диода
if (digitalRead(inPin) == HIGH ) // если на пин 2 подано напряжение
{
  goto lab ;
}
analogWrite (ledPin, 255), analogWrite (ledPin1, 255), analogWrite (ledPin2, 0);// включаем светодиод 1 и 2, выход 13 отключаем
delay (1000); //  время горения диода
if (digitalRead(inPin) == HIGH ) // если на пин 2 подано напряжение
{
  goto lab ;
}
analogWrite (ledPin, 255), analogWrite (ledPin1, 255), analogWrite (ledPin2, 0);// включаем светодиод 1 и 2, выход 13 отключаем
delay (1000); //  время горения диода
if (digitalRead(inPin) == HIGH ) // если на пин 2 подано напряжение
{
  goto lab ;
}

[/code]

Я еще трехколесный не осилил а Вы уже на титановом предлагаете ;)

inspiritus
Offline
Зарегистрирован: 17.12.2012

.

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

Alexandr0202 пишет:

еще вариант придумал (самый простой на мой взгляд), но он почему то не работает

если вариант не работает, значит это не вариант :)

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

b707 пишет:

Alexandr0202 пишет:

еще вариант придумал (самый простой на мой взгляд), но он почему то не работает

если вариант не работает, значит это не вариант :)

 Почему не работает? ведь логично, программа прошла один оператор ничего не совпало, перешла к другому и т.д. Почему по времени отрабатывает а перейти не хочет?

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

Alexandr0202, примете как данность: оператор delay() несовместим с быстрым опросом кнопок. Чтобы вы там не комбинировали с кучей условий или переходами по меткам - работать не будет

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

b707 пишет:

Alexandr0202, примете как данность: оператор delay() несовместим с быстрым опросом кнопок. Чтобы вы там не комбинировали с кучей условий или переходами по меткам - работать не будет

Понял, спасибо. 

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

Ура, работает мой вариант! Я старый пень провод не на тот пин подключил.

 Работает с паузой 0,05 секунды, меньше не пробовал, нет нужды.

Morroc
Offline
Зарегистрирован: 24.10.2016

А куда вы дели паузу в 5 сек во время которой опрос кнопок невозможен ? Ждете 5 сек и нажимаете ? Так то да , можно конечно.

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

Morroc пишет:
А куда вы дели паузу в 5 сек во время которой опрос кнопок невозможен ? Ждете 5 сек и нажимаете ? Так то да , можно конечно.

Вы правы, жду 5 сек и нажимаю(так задумано). Раньше нужно было ждать пока функция отработает а сейчас в любое время срабатывает. Правда код не так красив и в длину раза в 3-4 вытянулся, зато простенько и понятненько.

Morroc
Offline
Зарегистрирован: 24.10.2016

Не должно оно было никуда вытянуться, что то намудоили там. А как вы делаете "если ничего не нажали определенное время, то зажигаем все три" ?

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

Alexandr0202 пишет:

Вы правы, жду 5 сек и нажимаю(так задумано).

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

Ну да дело ваше, вы же в этой ветке учитесь...

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

Morroc пишет:
Не должно оно было никуда вытянуться, что то намудрили там. А как вы делаете "если ничего не нажали определенное время, то зажигаем все три" ?

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

Если раньше было так : 

delay (5000); //  время горения диода
if (digitalRead(inPin) == HIGH ) // если на пин 2 подано напряжение
{
  goto lab ;
}

то теперь стало так :


delay (1000); //  время горения диода
if (digitalRead(inPin) == HIGH ) // если на пин 2 подано напряжение
{
  goto lab ;
}
delay (1000); //  время горения диода
if (digitalRead(inPin) == HIGH ) // если на пин 2 подано напряжение
{
  goto lab ;
}
delay (1000); //  время горения диода
if (digitalRead(inPin) == HIGH ) // если на пин 2 подано напряжение
{
  goto lab ;
}
delay (1000); //  время горения диода
if (digitalRead(inPin) == HIGH ) // если на пин 2 подано напряжение
{
  goto lab ;
}delay (1000); //  время горения диода
if (digitalRead(inPin) == HIGH ) // если на пин 2 подано напряжение
{
  goto lab ;
}

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

Все три зажигаются в конце программы если пропустили операторы if.

analogWrite (ledPin, 255), analogWrite (ledPin1, 255), analogWrite (ledPin2, 255);

 

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

b707 пишет:

Alexandr0202 пишет:

Вы правы, жду 5 сек и нажимаю(так задумано).

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

Ну да дело ваше, вы же в этой ветке учитесь...

Исходное ТЗ уже существенно продвинулось и образовала 2 проекта....

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

Alexandr0202 пишет:

Исходное ТЗ уже существенно продвинулось и образовала 2 проекта....

да ну? :) вчера только спрашивали "как остановить цикл" - а теперь уже два проекта? :)))))

Я бы вам все-таки советовал разобраться в примере "блинк без делей". который вам уже раза три посоветовали. Он делает ровно то, чего вы пытаетесь добиться, размножая свои IF со все меньшими и меньшими задержками. Только делает он это в пять строк и реакция кнопок мгновенная

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

b707 пишет:

Я бы вам все-таки советовал разобраться в примере "блинк без делей". который вам уже раза три посоветовали. Он делает ровно то, чего вы пытаетесь добиться, размножая свои IF со все меньшими и меньшими задержками. Только делает он это в пять строк и реакция кнопок мгновенная

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

Посмотрел в примерах, там нет входного пин-а просто мигает диод по присвоенной паузе, которая через тот же if работает.

[code]
void loop() {
  // here is where you'd put code that needs to be running all the time.

  // check to see if it's time to blink the LED; that is, if the difference
  // between the current time and last time you blinked the LED is bigger than
  // the interval at which you want to blink the LED.
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }

[/code]

 

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

главное -принцип отсчета времени без delay.

Ваша задача -  внедрить этот принцип в свой код

Гриша
Offline
Зарегистрирован: 27.04.2014

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

Хорошая мысль... вообще, без учителя или помощника, который знает хоть немного, стартовать в программировании очень сложно. Для меня, это как учить китайски по словарю... что-то может и получится, вот только кода и что - вопрос. 

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

b707 пишет:

главное -принцип отсчета времени без delay.

Ваша задача -  внедрить этот принцип в свой код

Так там же millis используется он время задает и от него все отталкивается. Как этот принцип вписать в мой код я  не могу даже вообразить, а что я не могу представить для меня не понятно. С delay я четко знаю что делает и где может работать, это как таймер в LD.

Гриша пишет:

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

Хорошая мысль... вообще, без учителя или помощника, который знает хоть немного, стартовать в программировании очень сложно. Для меня, это как учить китайски по словарю... что-то может и получится, вот только кода и что - вопрос. 

Очень точное сравнение.

Гриша
Offline
Зарегистрирован: 27.04.2014

Пожелание: надеюсь это единственная, первая и последняя программа в которой вы используете "goto" . Не вникайте сейчас по какой причине, просто поверьте. Для вас сейчас доступны только "for" и "if", пока вы не научитесь писать мелкие программы (кодовый замок, светофор и подобное) лучше ничего более не использовать, а если очень хочется - значит у вас ошибка в логике решения поставленной задачи.

Гриша
Offline
Зарегистрирован: 27.04.2014

Alexandr0202 пишет:

Так там же millis используется он время задает и от него все отталкивается. Как этот принцип вписать в мой код я  не могу даже вообразить, а что я не могу представить для меня не понятно.

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

void loop() { // выполняется постоянно, как и положено петле  

  unsigned long currentMillis = millis(); //переменная, в которую записываем значение внутренних часов. 
                                          // обновляется при каждом витке программы

//это таймер
  if (currentMillis - previousMillis >= interval) { // проверяем, что заданное время вышло и выполняем.... 
                                                    // при каждом витке программы 
    // save the last time you blinked the LED
    previousMillis = currentMillis; // точка перезапуска таймера

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) {     ledState = HIGH;    } 
	else {      ledState = LOW;    }
}}

 

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

Гриша пишет:

Пожелание: надеюсь это единственная, первая и последняя программа в которой вы используете "goto" . Не вникайте сейчас по какой причине, просто поверьте. Для вас сейчас доступны только "for" и "if", пока вы не научитесь писать мелкие программы (кодовый замок, светофор и подобное) лучше ничего более не использовать, а если очень хочется - значит у вас ошибка в логике решения поставленной задачи.

Брюс Ли говорил : Я не боюсь человека, отработавшего 1000 приемов один раз, я боюсь человека, отработавшего один прием 1000 раз.

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

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

Alexandr0202 пишет:

Так там же millis используется он время задает и от него все отталкивается. Как этот принцип вписать в мой код я  не могу даже вообразить, а что я не могу представить для меня не понятно. С delay я четко знаю что делает и где может работать, это как таймер в LD.

Именно поэтому я Вам и посоветовал внимательно разобраться с двумя примерами.

Поверьте, полчаса/час/три часа/сутки, потраченные на разбор этих пяти строчек, дадут Вам больше, чем десятки и сотни строчек кода, написанные Вами с Вашими нынешними познаниями.

Гриша
Offline
Зарегистрирован: 27.04.2014

Alexandr0202 пишет:

Брюс Ли говорил : Я не боюсь человека, отработавшего 1000 приемов один раз, я боюсь человека, отработавшего один прием 1000 раз.

не рекомендую отрабатывать прием удара в пах и удар мизинцем по хвосту врага. Собственно вам потом бы все одно сказали много ласковых про goto . если оно будет это будущее.  

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

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

Гриша пишет:

 

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

void loop() { // выполняется постоянно, как и положено петле  

  unsigned long currentMillis = millis(); //переменная, в которую записываем значение внутренних часов. 
                                          // обновляется при каждом витке программы

//это таймер
  if (currentMillis - previousMillis >= interval) { // проверяем, что заданное время вышло и выполняем.... 
                                                    // при каждом витке программы 
    // save the last time you blinked the LED
    previousMillis = currentMillis; // точка перезапуска таймера

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) {     ledState = HIGH;    } 
	else {      ledState = LOW;    }
}}

 

 Мне не понятно, зачем программировать по времени если можно по условию в чем выгода? 

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

Гриша пишет:

 

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

В таком случае это нужно чем то заменить, а чем?

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

Alexandr0202 пишет:

 Мне не понятно, зачем программировать по времени если можно по условию в чем выгода? 

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

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

Alexandr0202 пишет:

Гриша пишет:

 

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

В таком случае это нужно чем то заменить, а чем?

Вам же сказали в сообщении № 71: for и if.

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

andriano пишет:

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

Я не могу этого сделать.  

Гриша
Offline
Зарегистрирован: 27.04.2014

обратите внимание на булевый тип данных, для вас это проще понять, удобно для создания флагов.

флаг - это некая переменная, что-то делаем пока она true в нужном месте ее делаем false используется вместе с if.

Нажил кнопку - true , что-то сделали или вышел таймер она false . 

Гриша
Offline
Зарегистрирован: 27.04.2014

Alexandr0202 пишет:

Я не могу этого сделать.  

это пока не можете - знаний не хватает. 

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

Датчик препятствий и серво(бесполезная коробка) 

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

Alexandr0202 пишет:

andriano пишет:

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

Я не могу этого сделать.  

Правильно.Ппотому, что Вы еще не разобрали, чем blink отличается от blink without delay.

Сколько Вам нужно времени, чтобы разобраться в пяти строчках? Даже если несколько дней (по дню на строчку) - оно того стоит.

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

andriano пишет:

Правильно. Потому, что Вы еще не разобрали, чем blink отличается от blink without delay.

Сколько Вам нужно времени, чтобы разобраться в пяти строчках? Даже если несколько дней (по дню на строчку) - оно того стоит.

Алгоритм работы blink мне понятен и на его примере я могу строить простые схемы и программы, blink without delay некоторые моменты не понятны, например где указано сколько светится и не светится диоду в этих строках? 


 // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) // если диод отключен ;
 {
      ledState = HIGH; // включаем ;
} else
 {
      ledState = LOW; // или отключаем;
}

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

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

Гриша пишет:

 

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

Датчик препятствий и серво(бесполезная коробка) 

Для меня там слишком много переменных и прочих функций. Там человек опытный писал.

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

Alexandr0202 пишет:

 // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) // если диод отключен ;
 {
      ledState = HIGH; // включаем ;
} else
 {
      ledState = LOW; // или отключаем;
}

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

Если бы две ключевые строки (те, что перед приведенными) не выкинули, то смысл был бы, а бреда не было.

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

Alexandr0202 пишет:

Я не могу этого сделать.  

Это неправильный настрой ))

Morroc
Offline
Зарегистрирован: 24.10.2016

Alexandr0202 пишет:

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

Подозревал что то подобное :) Ваша мысль идет в обычном таком направлении, напишите и нормально в конце концов если еще время потратите на опыты.

Alexandr0202 пишет:

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

Никуда вы не денетесь от этой темы, шаг влево шаг вправо и постоянно будете натыкаться, да и не так это сложно, как только в голове щелкнет - все станет понятно и просто. Надо перейти от линейного выполнения действий одного за другим к обработке событий. Ничего прям уж таки нового, вот нажатие кнопки у вас - это событие, по нему можно зажечь светодиод, но и включение 3х светодиодов - тоже событие, но его условие - это не нажатие кнопки, а 5 секунд от начала опроса, просто засекаете время начала и проверяете таким же if как у кнопок, только (время текущее - время начала) > 5000мс. На таком принципе делаете все действия и они начинает работать без delay, параллельно друг другу. Можете про конечные автоматы почитать, но лучше после того, как свой пример так сделаете - понятнее будет.

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

Alexandr0202 пишет:
где указано сколько светится и не светится диоду в этих строках?
Нигде. Строки в которых это указано, Вы выбросили (за ненадобностью, наверное).

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

Alexandr0202 пишет:

Я не собираюсь быть профессиональным программистом ... что бы не лазить каждый раз в книжки

В таком случае (если цель "не лазить в книжки") бросьте это дело и займите чем-нибудь другим. Потому как без лазания в книжки не обходятся никакие программисты - ни профессиональные, ни непрофессиональные.

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

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

Alexandr0202 пишет:

Я не собираюсь быть профессиональным программистом ... что бы не лазить каждый раз в книжки

В таком случае (если цель "не лазить в книжки") бросьте это дело и займите чем-нибудь другим. Потому как без лазания в книжки не обходятся никакие программисты - ни профессиональные, ни непрофессиональные.

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

Возник следующий вопрос: byte, int, long, float  как определить какой тип данных применять в каждом конкретном случае? Я понимаю что это объем данных но как высчитать какой нужен. Например здесь почему применен long, как определили что нужно именно long  а не например int?

[code]
unsigned long previousMillis = 0;        // will store last time LED was updated

// constants won't change:
const long interval = 1000;           // interval at which to blink (milliseconds)

[/code]

 

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

Alexandr0202 пишет:

Возник следующий вопрос: byte, int, long, float  как определить какой тип данных применять в каждом конкретном случае?

Определять исходя из того, что именно и какого размера ты собираешься хранить в переменных. Описание каждого типа данных содержится в умных книжках или статьях по С/С++

Alexandr0202 пишет:

Например здесь почему применен long, как определили что нужно именно long  а не например int?

[code]
unsigned long previousMillis = 0;        // will store last time LED was updated

// constants won't change:
const long interval = 1000;           // interval at which to blink (milliseconds)

[/code]

unsigned long previousMillis = 0;  - Определили из описания функции millis(), которая возвращает long.
const long interval = 1000;  - А здесь long выбран неверно. Исходя из размера константы достаточно int.

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

Jeka_M пишет:

unsigned long previousMillis = 0;  - Определили из описания функции millis(), которая возвращает long.

 А как определили, где написано, что функция millis может занимать от 2147383647 до -2147383648 ?

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

Alexandr0202 пишет:

 А как определили, где написано, что функция millis может занимать от 2147383647 до -2147383648 ?

Скажите, Александр, Вы в школе арифметику проходили?

Операции умножения/деления знаете?

Так почему не хотите воспользоваться своими знаниями?

Вот в качестве упражнения посчитайте, сколько времени пройдет до переполнения переменных типа long и типа int, если каждая из них изменяется 1000 раз в секунду?

PS. Кстати. в вашем утверждении ошибка. Сами найдете или подсказать?

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

Alexandr0202 пишет:

А как определили, где написано, что функция millis может занимать от 2147383647 до -2147383648 ?

Функция millis() возвращает не long, a unsigned long (в сообщении #92 я ошибся). Это разные типы данных, поэтому функция возвращает другие значения.
Как определили тип данных: например открываем и смотрим файл wiring.c в папке c Arduino IDE. Либо гуглим и попадаем на сайт arduino.cc со справочной информацией.

 

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

andriano пишет:

Alexandr0202 пишет:

 А как определили, где написано, что функция millis может занимать от 2147383647 до -2147383648 ?

Скажите, Александр, Вы в школе арифметику проходили?

Операции умножения/деления знаете?

Так почему не хотите воспользоваться своими знаниями?

Вот в качестве упражнения посчитайте, сколько времени пройдет до переполнения переменных типа long и типа int, если каждая из них изменяется 1000 раз в секунду?

PS. Кстати. в вашем утверждении ошибка. Сами найдете или подсказать?

Арифметика была на 5 о вот с алгеброй только 3(трудно а + b было складывать). 

int наверное за 65,535 сек. long за 4 294 767,295 сек ?

Подсказать!

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

С цифрами вроде понятно, а как определили что int хватит для LOW в этой строчке?

[code]
int ledState = LOW;             // ledState used to set the LED

[/code]

 

nik182
Offline
Зарегистрирован: 04.05.2015

Больше того, хватит и байта и даже бита. Можно в одном байте сохранить восемь разных LedState. А в int вообще 16. Использовать int для хранения одного статуса это форменное расточительство.

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

nik182 пишет:
Больше того, хватит и байта и даже бита. Можно в одном байте сохранить восемь разных LedState. А в int вообще 16. Использовать int для хранения одного статуса это форменное расточительство.

А почему тогда используют int? Причем в учебниках в примерах и в самой программе.

Alexandr0202
Offline
Зарегистрирован: 13.07.2020

Alexandr0202 пишет:

Вот в качестве упражнения посчитайте, сколько времени пройдет до переполнения переменных типа long и типа int, если каждая из них изменяется 1000 раз в секунду?

А почему 1000 раз в секунду? Это быстродействие процессора (частота Atmega)?