Задержка в срабатывании

Нет ответов
denbon
Offline
Зарегистрирован: 02.02.2017

Собственно говоря решил соорудить для автомобиля дополнительный стопсигнал используя ардуину и ленту WS2812, но так как я только начал изучать эту тему и быстренько написал код для реализации моей поделки, залил проверил, все хорошо работает. но вот есть проблемы с временем срабатывания стопсигнала, тоесть если в 50 строке написать delay(1) тоесть время чрабатывания 1 миллисекунду, то все нормально работает, а вот если написать 10 и более миллисекунд, то при повторном срабатывании стопсигнала идет некая задержка, а потом только стопсигнал зажигается. Но для анимации включения стопсигнала мне нужно не менее 10 миллисекунд, тоесть вопрос как можно побороть задержку во времени срабатывания?

 

#include "FastLED.h"    // Подключаем библиотеку для управления светодиодами
#define NUM_LEDS 59     // количество светодиодов в ленте
#define DATA_PIN 6
CRGB leds[NUM_LEDS];

int pinStop = A1;        // пин для стопа
int pinLeft = A2;        // пин левого поворотника
int pinRight = A3;       //  пин правого поворотника
int butStop = 1;              // переменная для хранения состояния кнопки
int butLeft = 1;              // переменная для хранения состояния кнопки
int butRight = 1;             // переменная для хранения состояния кнопки

void setup()    // Объект ленты настраивается в функции setup
          {
           pinMode(pinStop, INPUT);
           pinMode(pinLeft, INPUT);
           pinMode(pinRight, INPUT);
           digitalWrite(pinStop, HIGH); // вкл.подтягивающий резистор
           digitalWrite(pinLeft, HIGH); // вкл.подтягивающий резистор
           digitalWrite(pinRight, HIGH); // вкл.подтягивающий резистор
           FastLED.addLeds<WS2812, DATA_PIN, RGB>(leds, NUM_LEDS);      
           LEDS.setBrightness(255);   // яркость ленты (1...255)
          }

void loop() {
  butStop = digitalRead(pinStop);  // считываем значения с входа кнопки
  butLeft = digitalRead(pinLeft);  // считываем значения с входа кнопки
  butRight = digitalRead(pinRight);  // считываем значения с входа кнопки

  // условие для стопа
  if (butStop == LOW) {  // если кнопка СТОПА нажата (замкнута на землю)
    delay(5); // Устранение дребезга
    if (butStop == LOW) {  
      for(int whiteLed = 0; whiteLed < NUM_LEDS; whiteLed = whiteLed + 1) {
        leds[whiteLed] = CRGB::Green;
        leds[NUM_LEDS - whiteLed] = CRGB::Green;
        FastLED.show();  
        delay(1);
      }
    }
    }
    
  if (butStop == HIGH) {  // если кнопка стопа выключена
    delay(5); // Устранение дребезга
    if (butStop == HIGH) { 
    for(int whiteLed = 0; whiteLed < NUM_LEDS; whiteLed = whiteLed + 1) {
      leds[whiteLed] = CRGB::Black;
      leds[NUM_LEDS - whiteLed] = CRGB::Black;
      FastLED.show();
      delay(10);
      }
    }
    }

  // условие для левого поворотника
  if (butLeft == LOW && butRight == HIGH) {  // если левый поворотник включен
    delay(5); // Устранение дребезга
    if (butLeft == LOW && butRight == HIGH) {
      for(int whiteLeft = 59; whiteLeft >= 47; whiteLeft = whiteLeft - 1) {
        leds[whiteLeft] = CHSV( HUE_YELLOW, 255, 255);
        FastLED.show();
        delay(30);
        }
      }
    }
  if (butLeft == LOW && butRight == HIGH) {  // если левый поворотник выключен
    delay(5); // Устранение дребезга
    if (butLeft == LOW && butRight == HIGH) {
      for(int whiteLeft = 59; whiteLeft >= 47; whiteLeft = whiteLeft - 1) {
        leds[whiteLeft] = CRGB::Black;
        FastLED.show();
        delay(10);
        }
      }
    }

   // условие для правого поворотника
  if (butRight == LOW && butLeft == HIGH) {  // если левый поворотник включен
    delay(5); // Устранение дребезга
    if (butRight == LOW && butLeft == HIGH) {
      for(int whiteRight = 0; whiteRight <= 13; whiteRight = whiteRight + 1) {
        leds[whiteRight] = CRGB::GreenYellow;
        FastLED.show();
        delay(30);
        }
      }
    }
  if (butRight == LOW && butLeft == HIGH) {  // если правый поворотник выключен
    delay(5); // Устранение дребезга
    if (butRight == LOW && butLeft == HIGH) {
      for(int whiteRight = 0; whiteRight <= 13; whiteRight = whiteRight + 1) {
        leds[whiteRight] = CRGB::Black;
        FastLED.show();
        delay(10);
        }
      }
    }

   // условие для аварийки
  if (butLeft == LOW && butRight == LOW) {  // если аварийка включена
    delay(5); // Устранение дребезга
    if (butLeft == LOW && butRight == LOW) {
        leds[0] = CRGB(255, 255, 0);
        leds[59] = CRGB(255, 255, 0);
        FastLED.show();
        delay(30);
        leds[1] = CRGB(255, 255, 0);
        leds[58] = CRGB(255, 255, 0);
        FastLED.show();
        delay(30);
        leds[2] = CRGB(255, 255, 0);
        leds[57] = CRGB(255, 255, 0);
        FastLED.show();
        delay(30);
        leds[3] = CRGB(255, 255, 0);
        leds[56] = CRGB(255, 255, 0);
        FastLED.show();
        delay(30);
        leds[4] = CRGB(255, 255, 0);
        leds[55] = CRGB(255, 255, 0);
        FastLED.show();
        delay(30);
        leds[5] = CRGB(255, 255, 0);
        leds[54] = CRGB(255, 255, 0);
        FastLED.show();
        delay(30);
        leds[6] = CRGB(255, 255, 0);
        leds[53] = CRGB(255, 255, 0);
        FastLED.show();
        delay(30);
        leds[7] = CRGB(255, 255, 0);
        leds[52] = CRGB(255, 255, 0);
        FastLED.show();
        delay(30);
        leds[8] = CRGB(255, 255, 0);
        leds[51] = CRGB(255, 255, 0);
        FastLED.show();
        delay(30);
        leds[9] = CRGB(255, 255, 0);
        leds[50] = CRGB(255, 255, 0);
        FastLED.show();
        delay(30);
        leds[10] = CRGB(255, 255, 0);
        leds[49] = CRGB(255, 255, 0);
        FastLED.show();
        delay(30);
        leds[11] = CRGB(255, 255, 0);
        leds[48] = CRGB(255, 255, 0);
        FastLED.show();
        delay(30);
        leds[12] = CRGB(255, 255, 0);
        leds[47] = CRGB(255, 255, 0);
        FastLED.show();
        delay(30);
        leds[13] = CRGB(255, 255, 0);
        leds[46] = CRGB(255, 255, 0);
        FastLED.show();
        delay(30);
        }
      }
    
  if (butLeft == LOW && butRight == LOW) {  // если аварийка выключена
    delay(5); // Устранение дребезга
    if (butLeft == LOW && butRight == LOW) {
       leds[0] = CRGB(0, 0, 0);
        leds[59] = CRGB(0, 0, 0);
        FastLED.show();
        delay(30);
        leds[1] = CRGB(0, 0, 0);
        leds[58] = CRGB(0, 0, 0);
        FastLED.show();
        delay(30);
        leds[2] = CRGB(0, 0, 0);
        leds[57] = CRGB(0, 0, 0);
        FastLED.show();
        delay(30);
        leds[3] = CRGB(0, 0, 0);
        leds[56] = CRGB(0, 0, 0);
        FastLED.show();
        delay(30);
        leds[4] = CRGB(0, 0, 0);
        leds[55] = CRGB(0, 0, 0);
        FastLED.show();
        delay(30);
        leds[5] = CRGB(0, 0, 0);
        leds[54] = CRGB(0, 0, 0);
        FastLED.show();
        delay(30);
        leds[6] = CRGB(0, 0, 0);
        leds[53] = CRGB(0, 0, 0);
        FastLED.show();
        delay(30);
        leds[7] = CRGB(0, 0, 0);
        leds[52] = CRGB(0, 0, 0);
        FastLED.show();
        delay(30);
        leds[8] = CRGB(0, 0, 0);
        leds[51] = CRGB(0, 0, 0);
        FastLED.show();
        delay(30);
        leds[9] = CRGB(0, 0, 0);
        leds[50] = CRGB(0, 0, 0);
        FastLED.show();
        delay(30);
        leds[10] = CRGB(0, 0, 0);
        leds[49] = CRGB(0, 0, 0);
        FastLED.show();
        delay(30);
        leds[11] = CRGB(0, 0, 0);
        leds[48] = CRGB(0, 0, 0);
        FastLED.show();
        delay(30);
        leds[12] = CRGB(0, 0, 0);
        leds[47] = CRGB(0, 0, 0);
        FastLED.show();
        delay(30);
        leds[13] = CRGB(0, 0, 0);
        leds[46] = CRGB(0, 0, 0);
        FastLED.show();
        delay(30);
      }
    }
  

}