Сделал, переделал на машину бегующие огни

souelle
Offline
Зарегистрирован: 25.11.2018

Ребят привет всем :) Сделал на машину бегающие огни (я не в России, так что можете не ругаться по этому поводу,что мол понаставят лампочек фиг разберешь, на дороге не встретимся) 

 

Суть кода. при старте ардуинки (следовательно нужно будет запитывать так,что бы она стартовала при зажигании)

появляются огни и потом затухают. (эффект на подобие как у шкоды со спидометром, но у меня на фарах задних). При условии,если нет ни поворотника ни реверса назад. 

Отдельная лента (их две на каждой фаре. одна длинее другой стоят столбиком) реверс назад (сияет только белым, не бегает и только светит, бежит только при зажигании белым) в темное время суток (а тут где я нахожусь - постоянно темно и дождливо. ) ничего не видно куда еду задом. Ставлю не для красоты а реально для нужды.

ну и поворотник - он бегающий. 

 

суть ошибки такова. не кооректно работает (где то ошибки) 

 

проверяю путем подачи HIGH или LOW на определенные инпуты. 

Если на все инпуты ставлю LOW - левый поворотник все равно бегает. Раньше не работал правый, сейчас все два работают, но я уставил то приход LOW . по коду - не должно. 

Питаю ардуинку и ленты через ЮСБ (может быть в этом суть ?)

 

  digitalWrite(ReverseIn, LOW);
  digitalWrite(RightTurnIn, LOW);
  digitalWrite(LeftTurnIn, LOW);

сам код ниже

 

#include <Adafruit_NeoPixel.h>             // подключаем библиотеку
// how many diods on strip

const int ReverseBigCount = 8;
const int ReverseSmallCount = 6;
const int SignalCount = 14;

// inputs

const int ReverseIn = 9;
const int RightTurnIn = 5;
const int LeftTurnIn = 6;


// outputs

const int LefteightReverseOut = 4;
const int LeftsixtReverseOut = 3;
const int RightTurnOut = 7;
const int LeftTurnOut = 8;
const int RighteightReverseOut = 11;
const int RightsixtReverseOut = 10;


// Signals strips

Adafruit_NeoPixel strip = Adafruit_NeoPixel(SignalCount, RightTurnOut, NEO_GRB + NEO_KHZ800);    // output 7
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(SignalCount, LeftTurnOut,   NEO_GRB + NEO_KHZ800);  // output 8

// Reverse strips

Adafruit_NeoPixel strip3 = Adafruit_NeoPixel(ReverseBigCount, LefteightReverseOut, NEO_GRB + NEO_KHZ800);   // output 2
Adafruit_NeoPixel strip4 = Adafruit_NeoPixel(ReverseSmallCount, LeftsixtReverseOut,   NEO_GRB + NEO_KHZ800);  // output 3
Adafruit_NeoPixel strip5 = Adafruit_NeoPixel(ReverseBigCount, RighteightReverseOut, NEO_GRB + NEO_KHZ800);  // output 11
Adafruit_NeoPixel strip6 = Adafruit_NeoPixel(ReverseSmallCount, RightsixtReverseOut,   NEO_GRB + NEO_KHZ800); // output 10

void setup()
{
  pinMode(ReverseIn, INPUT);
  pinMode(RightTurnIn, INPUT);
  pinMode(LeftTurnIn, INPUT);
  // здесь я проверяю работоспособность - при всех LOW работает один поворотник все равно
  digitalWrite(ReverseIn, LOW);
  digitalWrite(RightTurnIn, LOW);
  digitalWrite(LeftTurnIn, LOW);


  pinMode(LefteightReverseOut, OUTPUT);
  pinMode(LeftsixtReverseOut, OUTPUT);
  pinMode(RightTurnOut, OUTPUT);
  pinMode(LeftTurnOut, OUTPUT);
  pinMode(RighteightReverseOut, OUTPUT);
  pinMode(RightsixtReverseOut, OUTPUT);

//Эффект зажигания

{
if( digitalRead(9) == LOW and digitalRead(5) == LOW and digitalRead(6) == LOW) 
  
 
{
 
      for (int k = 0; k < 1; k++)
     
        {
        
          for (int j = 0; j < SignalCount; j++)
          {
              k = 0;
          {
            strip.setPixelColor(j, strip.Color(255, 69, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j, strip2.Color(255, 69, 0)); // R=255, G=0, B=0 — цвет светодиода
          }
          delay(25);
          strip.show();
          strip2.show();
        }

          
     
         for (int a = 0; a < ReverseBigCount; a++)
         {
          for (int z = 0; z < ReverseSmallCount; z++)
          {
            strip3.setPixelColor(a, strip3.Color(255, 255, 255));
            strip4.setPixelColor(z, strip4.Color(255, 255, 255));
            strip5.setPixelColor(a, strip5.Color(255, 255, 255));
            strip6.setPixelColor(z, strip6.Color(255, 255, 255));   
          }
          delay(25);
          strip3.show();
          strip4.show();
          strip5.show();
          strip6.show();
         }
        }

}
 delay(2000);
         for (int a = 0; a < ReverseBigCount; a++)
         {
          for (int z = 0; z < ReverseSmallCount; z++)
          {
            strip3.setPixelColor(a, strip3.Color(0, 0, 0));
            strip4.setPixelColor(z, strip4.Color(0, 0, 0));
            strip5.setPixelColor(a, strip5.Color(0, 0, 0));
            strip6.setPixelColor(z, strip6.Color(0, 0, 0));
          }
          delay(35);
          strip3.show();
          strip4.show();
          strip5.show();
          strip6.show();
         }
 

         delay(100);
          for(int i = 0; i < SignalCount+3; i++)
        {
          for(int j = 0; j < i; j++)
          {

            strip.setPixelColor(j-2, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip.setPixelColor(j-1, strip.Color(63, 17, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip.setPixelColor(j, strip.Color(127, 34, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j-2, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j-1, strip2.Color(63, 17, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j, strip2.Color(127, 34, 0)); // R=255, G=0, B=0 — цвет светодиода
          }
          delay(25);
           
          strip.show();
          strip2.show();
        }
}

}
void loop() 
{
   
    if ((digitalRead(5) == HIGH) and (digitalRead(6) == HIGH)) 
    { 
      //Режим аварийной сигнализации, если на 5 и 6 пин приходит плюс
      for(int k = 0; k < 3; k++)
      {  
        // цикл до трех - сигнал "перестроения" , при кратковременном включении мигает 3 раза,
        for(int i = 0; i < SignalCount+1; i++)
        {
          for(int j = 0; j < i; j++)
          {
            if ((digitalRead(5) == HIGH) and (digitalRead(6) == HIGH)) 
            {
              k = 0; // если во время мигания поворотника получаем еще плюcовой сигнал, то обнуяем счетчик, чтобы поворотник мигал еще как минимум 3 раза
            } 
            strip.setPixelColor(j, strip.Color(255, 69, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j, strip2.Color(255, 69, 0)); // R=255, G=0, B=0 — цвет светодиода
          }
          delay(25);
          strip.show();
          strip2.show();
        }
        for(int i = 0; i < SignalCount+3; i++)
        {
          for(int j = 0; j < i; j++)
          {
            // в этом цикле плавно тушим предыдущий светодиод, делаем его наполовину тусклее, чтобы движение было плавнее
            strip.setPixelColor(j-2, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip.setPixelColor(j-1, strip.Color(63, 17, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip.setPixelColor(j, strip.Color(127, 34, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j-2, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j-1, strip2.Color(63, 17, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j, strip2.Color(127, 34, 0)); // R=255, G=0, B=0 — цвет светодиода
          }
          delay(12);
          strip.show();
          strip2.show();
        }
      }
    }
              
    if (digitalRead(5) == LOW and digitalRead(6) == HIGH) 
    { 
      // включается один поворотник 
      for(int k = 0; k < 3; k++)
      {  
        // цикл до трех - сигнал "перестроения" , при кратковременном включении мигает 3 раза,
        for(int i = 0; i < SignalCount+1; i++)
        {
          for(int j = 0; j < i; j++)  
          {
            if ((digitalRead(5) == LOW) and (digitalRead(6) == HIGH)) 
              {
                k = 0;
              }
              strip.setPixelColor(j, strip.Color(255, 69, 0)); // R=255, G=0, B=0 — цвет светодиода
          }
          delay(25);
          strip.show();
        }
        for(int i = 0; i < SignalCount+3; i++)
        {
          for(int j = 0; j < i; j++)
          { 
            // в этом цикле плавно тушим предыдущий светодиод, делаем его наполовину тусклее, чтобы движение было плавнее
            strip.setPixelColor(j-2, strip.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip.setPixelColor(j-1, strip.Color(63, 17, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip.setPixelColor(j, strip.Color(127, 34, 0)); // R=255, G=0, B=0 — цвет светодиода
          }
          delay(12);
          strip.show();
        }
          
      }
    }
    if (digitalRead(5) == HIGH and digitalRead(6) == LOW) 
    { // включаем второй поворотник
      for(int k = 0; k < 3; k++)
      {  
        // цикл до трех - сигнал "перестроения" , при кратковременном включении мигает 3 раза,  
        for(int i = 0; i < SignalCount+1; i++)
        {
          for(int j = 0; j < i; j++)
          {
            if ((digitalRead(5) == HIGH) and (digitalRead(6) == LOW)) 
            {
              k = 0;
            }
            strip2.setPixelColor(j, strip2.Color(255, 69, 0)); // R=255, G=0, B=0 — цвет светодиода
          }
          delay(25);
          strip2.show();
        }
        for(int i = 0; i < SignalCount+3; i++)
        {
          for(int j = 0; j < i; j++)
          { 
            // в этом цикле плавно тушим предыдущий светодиод, делаем его наполовину тусклее, чтобы движение было плавнее
            strip2.setPixelColor(j-2, strip2.Color(0, 0, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j-1, strip2.Color(63, 17, 0)); // R=255, G=0, B=0 — цвет светодиода
            strip2.setPixelColor(j, strip2.Color(127, 34, 0)); // R=255, G=0, B=0 — цвет светодиода
          }
          delay(12);
          strip2.show();
        }
      }
    }

    if ( digitalRead(9) == HIGH)
    {
      for (int i = 0; i < ReverseBigCount + 1; i++)
      {
        
          for (int z = 0; z < ReverseSmallCount + 1; z++)
          {
            // Зажигаем ходовые огни, если нетниодного сигнала
            strip3.setPixelColor(i, strip3.Color(255, 255, 255));
            strip4.setPixelColor(z, strip4.Color(255, 255, 255));
            strip5.setPixelColor(i, strip5.Color(255, 255, 255));
            strip6.setPixelColor(z, strip6.Color(255, 255, 255));
          }
          strip3.show();
          strip4.show();
          strip5.show();
          strip6.show();
        
      }
    }
  }

 

Буду очень признателен ,если кто потратит чуть-чуть своего времени личного на проверку на ошибки.. конечно я мало на это надеюсь, но все же. 

 

Однако с ардуинкой знаком совсем не давно :)

 

Спасибо ребят, заранее 

souelle
Offline
Зарегистрирован: 25.11.2018

digitalWrite(ReverseIn, HIGH); - лампы заднего не загораются, если перегрузить скетч то горят, то тогда пропадает правый поворотник и горит только левый) 

 

не пойму почему при digitalWrite(LeftTurnIn, LOW); - левый все равно бегает ? 

digitalWrite(RightTurnIn, HIGH); - пробегает 3 раза правый и все. затухает .

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

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

souelle
Offline
Зарегистрирован: 25.11.2018

bwn пишет:

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

 

Я покачто не умею этого делать;)

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

Ну тогда выкиньте из скетча все, что не умеете, и потихонечку учитесь и вставляйте то, чему научились.

souelle
Offline
Зарегистрирован: 25.11.2018

andriano пишет:

Ну тогда выкиньте из скетча все, что не умеете, и потихонечку учитесь и вставляйте то, чему научились.

 

я и вставил. наличие ошибок интересует)

ВН
Offline
Зарегистрирован: 25.02.2016

39-41 строки, запрограммируйте пины как выходы и отключите от них все внешние детали, если таковые есть (похоже нет).

выходной пин можно устанавливать и читать, входной, только читать и .....

"Если вход/выход (pin) был установлен в режим вход (INPUT), то функция digitalWrite со значением HIGH будет активировать внутренний 20K нагрузочный резистор. Подача LOW в свою очередь отключает этот резистор."

в цитате  тут не совсем правильно написано, активируется внутренний резистор подтягивающий пин входа к +5В.

т.е. если прописывается HIGH, то вход подтянется к 1, а если  LOW, вход будет болтаться в неопределенном состоянии и читаться как угодно.

souelle
Offline
Зарегистрирован: 25.11.2018

ВН пишет:

39-41 строки, запрограммируйте пины как выходы и отключите от них все внешние детали, если таковые есть (похоже нет).

выходной пин можно устанавливать и читать, входной, только читать и .....

"Если вход/выход (pin) был установлен в режим вход (INPUT), то функция digitalWrite со значением HIGH будет активировать внутренний 20K нагрузочный резистор. Подача LOW в свою очередь отключает этот резистор."

в цитате  тут не совсем правильно написано, активируется внутренний резистор подтягивающий пин входа к +5В.

т.е. если прописывается HIGH, то вход подтянется к 1, а если  LOW, вход будет болтаться в неопределенном состоянии и читаться как угодно.

 

прописал на input эти, считая, что к каждому с этого контакта будет приходить фаза подачи сигнала задний ход, или поворотники от  автомобиля

 

спасибо за разьяснения, сделаю)

souelle
Offline
Зарегистрирован: 25.11.2018

ВН пишет:

39-41 строки, запрограммируйте пины как выходы и отключите от них все внешние детали, если таковые есть (похоже нет).

выходной пин можно устанавливать и читать, входной, только читать и .....

"Если вход/выход (pin) был установлен в режим вход (INPUT), то функция digitalWrite со значением HIGH будет активировать внутренний 20K нагрузочный резистор. Подача LOW в свою очередь отключает этот резистор."

в цитате  тут не совсем правильно написано, активируется внутренний резистор подтягивающий пин входа к +5В.

т.е. если прописывается HIGH, то вход подтянется к 1, а если  LOW, вход будет болтаться в неопределенном состоянии и читаться как угодно.

Спасибо оргоменное! поставил на выходы и все заработало как надо!! спасибо!