Задержка в срабатывании
- Войдите на сайт для отправки комментариев
Собственно говоря решил соорудить для автомобиля дополнительный стопсигнал используя ардуину и ленту 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); } } }