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