Помогите заменить delay() на millis()

MAGRA
Offline
Зарегистрирован: 09.12.2016
void righttrn ()
 {
      for(int k = 0; k < 3; k++)
      {  
        // цикл до трех - сигнал "перестроения" , при кратковременном включении мигает 3 раза,  
        for(int i = 0; i < PixBig+1; i++)
        {
          for(int j = 0; j < i; j++)
          {
            if ((digitalRead(A3) == LOW) and (digitalRead(A4) == HIGH)) 
            {
              k = 0;
            }
            strip0.setPixelColor(j, strip0.Color(40, 255, 0, 0)); // G=40, R=255, B=0, W=0 — цвет светодиодаа
          }
          delay(relay);
          strip0.show();
        }
        for(int i = 0; i < PixBig+3; i++)
        {
          for(int j = 0; j < i; j++)
          { 
            // в этом цикле плавно тушим предыдущий светодиод, делаем его наполовину тусклее, чтобы движение было плавнее
            strip0.setPixelColor(j-2, strip0.Color(0, 0, 0, 0));   // G=0, R=0, B=0, W=0 — цвет светодиодаа
            strip0.setPixelColor(j-1, strip0.Color(10, 63, 0, 0)); // G=10, R=63, B=0, W=0 — цвет светодиода
            strip0.setPixelColor(j, strip0.Color(20, 127, 0, 0));  // G=20, R=127, B=0, W=0 — цвет светодиода   
          }
          delay(relay);
          strip0.show();
        }
      }
 }

 

 

MAGRA
Offline
Зарегистрирован: 09.12.2016

Куда я только не вставлял этот millis() корректно работать не стал.

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

Так надо не миллис вставлять, а сначала фор вытаскивать и на ифы переделывать. Фор с миллисом плохо уживаются.

MAGRA
Offline
Зарегистрирован: 09.12.2016
Типо так?  
 
int j = 0
 if (j < i) {
  j++;
 }

 

 

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

Берете свои форы и пишете аналог, но с помощью ифов. Когда все заработает добавляете перед нужными иф-ветками проверки на интервал с миллисом. Про миллис здесь неплохо описано. Дальше там есть еще поподробнее.

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

MAGRA пишет:

Куда я только не вставлял этот millis() корректно работать не стал.

Точно везде вставлять пробовали? Ничего не пропустили? :)))))

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

Не так: переменная должна быть глобальной или статической.

А в целом - почитайте про конечные автоматы.

MAGRA
Offline
Зарегистрирован: 09.12.2016

Оке, щас попробую все заменить. 

MAGRA
Offline
Зарегистрирован: 09.12.2016
Перелилил на IF, что что то теперь не корректно работает.
// nofor
     void nofor()
 {

      if (k < 3)
      { 
        k++; 
        // цикл до трех - сигнал "перестроения" , при кратковременном включении мигает 3 раза,  
        if(i < PixBig+1)
        {
          i++;
          if (j < i)
          {
            j++;
            if ((digitalRead(A3) == LOW) and (digitalRead(A4) == HIGH)) 
            {
              k = 0;
            }
            strip0.setPixelColor(j, strip0.Color(40, 255, 0, 0)); // G=40, R=255, B=0, W=0 — цвет светодиодаа
          }
          delay(relay);
          strip0.show();
        }
        if (i < PixBig+3)
        {
          i++;
          if (j < i)
          { 
            j++;
            // в этом цикле плавно тушим предыдущий светодиод, делаем его наполовину тусклее, чтобы движение было плавнее
            strip0.setPixelColor(j-2, strip0.Color(0, 0, 0, 0));   // G=0, R=0, B=0, W=0 — цвет светодиодаа
            strip0.setPixelColor(j-1, strip0.Color(10, 63, 0, 0)); // G=10, R=63, B=0, W=0 — цвет светодиода
            strip0.setPixelColor(j, strip0.Color(20, 127, 0, 0));  // G=20, R=127, B=0, W=0 — цвет светодиода
          }
          delay(relay);
          strip0.show();
        }
      }
 }

 

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

// в этом цикле плавно тушим предыдущий светодиод,

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

забудь о циклах совсем - ты уже находишься в цикле лооп.

а, это нафиг? delay(relay);

MAGRA
Offline
Зарегистрирован: 09.12.2016

delay(relay); задержка включения каждого светика. 20мс

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

MAGRA пишет:

delay(relay); задержка включения каждого светика. 20мс

убери.

MAGRA
Offline
Зарегистрирован: 09.12.2016

дак мне собственно и нужно по итогу delay() заменить на millis(), Но так как я ещё не добавил millis(), delay() остается .

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

MAGRA пишет:

дак мне собственно и нужно по итогу delay() заменить на millis(), Но так как я ещё не добавил millis(), delay() остается .

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

Та, ладно, чего на человека наехали. Это я ему сказал, сперва все переписать на иф-ы, чтобы заработало, а потом перед нужными добавить проверку с бабулькой Миллис. Корявенько, но если сделает сам, тогда действительно зачет. ИМХО.

MAGRA
Offline
Зарегистрирован: 09.12.2016

Всем спасибо, решил свою проблему, все работает и с delay()

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Ну вот. Раз зачет есть - значить работаит.. :)