Бегущий огонь. Нужен совет програмиста

10mills
Offline
Зарегистрирован: 17.02.2018

Здравствуйте! 

Сам я новичек, програмирование изучал по статьям к Ардуино, поэтому не судите строго :)

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

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

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

На delay не делал специально, там будут еще разные функции.


int ledPins[]={3, 5, 6, 9, 10, 13}; // используемые пины с ШИМ 13 не используется, он для паузы
int briLevel=127; // значения 1-127 яркости
  
class Light {

  public:
  int currPin;
  unsigned long pushTime, pushPause;
   
  int pushUp(){   // функция "двигает" пины
    if (currPin>5 || currPin<0) currPin=0;
    if (currPin<5){
      currPin=currPin+1;
    }
    else {
      currPin=0;
    }
    return currPin;
  }
  
  int prevPin(){  // функция возвращает номер предидущего пина
    if (currPin<0) currPin=0;
    if (currPin==0) return 5;
    else return currPin-1;
  } 
  
  void nextLight(){  // функция зажигает следующий и гасит предидущий пин
    if (millis() - pushPause > 300){ // пауза между циклами
      if (millis() - pushTime > 100){ // пауза между огнями
       analogWrite(ledPins[pushUp()], briLevel*2);
       analogWrite(ledPins[prevPin()], briLevel);
       pushTime = millis();
       if (currPin==5) pushPause=millis();
      }
   }
  }
};

Light bulb;

void setup() {

  for (int i=0; i<6; i++){
    pinMode(ledPins[i], OUTPUT);
  }
}

void loop() {
  
  bulb.nextLight();
}

 

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

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

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

10mills пишет:

не будет ли проблем с переполнением счетчика millis 

Вы тоже из секты свидетелей Святого Переполнения?

http://arduino.ru/forum/programmirovanie/vopros-po-ispolzovaniyu-millis#comment-267581

http://arduino.ru/forum/programmirovanie/velikoe-perepolnenie-millis

10mills
Offline
Зарегистрирован: 17.02.2018

Jeka_M пишет:

Вы тоже из секты свидетелей Святого Переполнения?

http://arduino.ru/forum/programmirovanie/vopros-po-ispolzovaniyu-millis#comment-267581

http://arduino.ru/forum/programmirovanie/velikoe-perepolnenie-millis

Спасибо за ссылки, очень полезные. Я понимаю, что на каждом форуме есть "Супер Тема"... я сорвал Джек Пот :D

Кстати, у вас есть минутка чтоб поговорить о Великом Переполнении?

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

10mills пишет:

Кстати, у вас есть минутка чтоб поговорить о Великом Переполнении?

Погодите, мужики, мне за попкорном сбегать надо.

Иван_123
Offline
Зарегистрирован: 17.01.2018

Я правильно понял, что millis() просто обнуляется при достижении максимума и переполнения не происходит? Или неправильно? На ссылках, особенно на второй, все рассказано очень непопулярным и недоступным для понимания простых обывателей языком(Ин Май Хамбл Опинион).

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

Иван_123 пишет:

Я правильно понял, что millis() просто обнуляется при достижении максимума и переполнения не происходит? Или неправильно? На ссылках, особенно на второй, все рассказано очень непопулярным и недоступным для понимания простых обывателей языком(Ин Май Хамбл Опинион).

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

Ответить на Ваш вопрос в первом предложении не представляетсяч возможным, если Вы не поясните, что именно Вы подразумевавете под "переполнением миллис". Могу лишь констатировать, что Ваше понимание "переполнения" отличается от общепринятого.

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

Иван_123 пишет:

Я правильно понял, что millis() просто обнуляется при достижении максимума и переполнения не происходит? Или неправильно? На ссылках, особенно на второй, все рассказано очень непопулярным и недоступным для понимания простых обывателей языком(Ин Май Хамбл Опинион).

будильник со стрелками видел? ок. что происходит со стрелкой часов при переходе через цифру "12"?

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Проблема переполнения millis() не в том что там нет числа больше чем максимального. а в учете определеного времени. Вот к примеру у сейчас 11 часов, а надо прийти через два часа . 11+2=13. Сидим ждем пока на часах будет 13 . час ждем , день ждем , неделю ждем и наконец "Чунгачгук-зоркий глаз" увидел, что на часах нет цифры 13. Вот так и произошло Великое Часовое Переполнение .

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

OMG, опять секта переполнятелей оживилась, и прислала сюда своего адепта Ваню :)

Иван_123
Offline
Зарегистрирован: 17.01.2018

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

Иван_123
Offline
Зарегистрирован: 17.01.2018

Я написал сюда потому, что думал все элементарно (Ватсон), а увидев кучу форумов (и сект) на эту тему призадумался...

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

Иван_123 пишет:

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

Да нихрена Вам не стало понятно.

А непонятно Вам потому, что Вы ленивы. Вот в том материале, который Вы "не поняли", там ведь было нечего понимать просто потому, что там ничего и не объяснялось. Там было сказано, что если хотите понимать - изучите арифметику, а потом проверьте себя по тестовым задачам:

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

Если Вы хотите понимать как это происходит, Вам необходимо:

№1 Внимательно изучить арифметику в дополнительном коде

№2 Для проверки усвоения материала попытаться устно решить две задачи, приведённые ниже. Если задачи устно решить не удалось, обязательно вернуться к п.1 и так, пока задачи не покажутся очевидными, и не решатся устно.

Вы это проделали? Нет! Так какого ж тогда на непонятки жалуетесь? Если нихрена не делать, то нихрена и не сделается.

Иван_123
Offline
Зарегистрирован: 17.01.2018

Уважаемые Клапауций 567 и qwone, вопрос - почему Вы не "пнули" меня, в отличие от ЕвгенийП? Почему Вы решаете изменить общепринятым правилам, которым следуют Уважаемые Гуру этого форума? Я не ёрничаю. Я согласен с ЕвгенийП и критикой в мой адрес. НО почему же Вы решаете прибегнуть к несложным примерам, основанным на простых литературных приемах для объяснения столь непростой темы? Уж не значит ли это то, что для поверхностного (мне более и не требуется) понятия темы достаточно и этого? К чему же полемика тогда? Ведь такого объяснения вполне достаточно для 99,99% задающих этот вопрос. Если же недостаточно, то зачем было писать мне ответ? У. ЕвгенийП, интересно и Ваше мнение на этот счет. На, цитата: "непонятки" - жаловаться не буду боле, честно-пречестно.

P.S. Непременно изучу Тему "Великого Переполнения..." и арифметики в доп. коде

Спасибо.

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

Иван_123 пишет:
достаточно для 99,99% задающих этот вопрос

Уважаемый Иван_123,

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

Я специально написал ту статью в которой, для тех кому понимать не надо, тупо написано как делать и как не делать, для тех, кому понимать надо - написано что почитать (это как раз то, что Вы поленились сделать), а для тех, кто и после этого чего-то ещё не понял, написано куда идти (там в статье есть ссылка).

Повторяю, ешё раз, я не знаю что достаточно, а что не достаточно для "99,99% задающих этот вопрос", но я точно знаю, что "99,99% задающих этот вопрос" на данном форуме, просто посылаются на. Уж такие здесь традиции.

Вот как-то так.

Иван_123
Offline
Зарегистрирован: 17.01.2018

Хех, "послания" я уже прочувствовал и без "переполнений"(в этих 00,01% место надо заслужить). Видимо, еще захотел, раз написал сюда. Но я Вас прекрасно понимаю - отвечать на одно и то же с 2014 года, интервалом в неделю... (хоть автоответчик на ардуино собирай). Спасибо за пояснения.

bwn
Offline
Зарегистрирован: 25.08.2014