Помогите заменить delay() на millis()
- Войдите на сайт для отправки комментариев
Ср, 25/04/2018 - 05:26
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(); } } }
Куда я только не вставлял этот millis() корректно работать не стал.
Так надо не миллис вставлять, а сначала фор вытаскивать и на ифы переделывать. Фор с миллисом плохо уживаются.
Берете свои форы и пишете аналог, но с помощью ифов. Когда все заработает добавляете перед нужными иф-ветками проверки на интервал с миллисом. Про миллис здесь неплохо описано. Дальше там есть еще поподробнее.
Куда я только не вставлял этот millis() корректно работать не стал.
Точно везде вставлять пробовали? Ничего не пропустили? :)))))
Не так: переменная должна быть глобальной или статической.
А в целом - почитайте про конечные автоматы.
Оке, щас попробую все заменить.
// в этом цикле плавно тушим предыдущий светодиод,
светодиодами рулишь не в цикле, а в ифах - проверил условие, сделал что надо и побежал к следующему светодиоду или следующей задаче.
забудь о циклах совсем - ты уже находишься в цикле лооп.
а, это нафиг? delay(relay);
delay(relay); задержка включения каждого светика. 20мс
delay(relay); задержка включения каждого светика. 20мс
убери.
дак мне собственно и нужно по итогу delay() заменить на millis(), Но так как я ещё не добавил millis(), delay() остается .
дак мне собственно и нужно по итогу delay() заменить на millis(), Но так как я ещё не добавил millis(), delay() остается .
Та, ладно, чего на человека наехали. Это я ему сказал, сперва все переписать на иф-ы, чтобы заработало, а потом перед нужными добавить проверку с бабулькой Миллис. Корявенько, но если сделает сам, тогда действительно зачет. ИМХО.
Всем спасибо, решил свою проблему, все работает и с delay()
Ну вот. Раз зачет есть - значить работаит.. :)