Как оптимизировать код

olegnezhelskiy007
Offline
Зарегистрирован: 13.09.2019

Здравствуйте, подскажите как можно оптимизировать данный код?

Не судите строго я новичок!

#include "Adafruit_NeoPixel.h"
#define LED_COUNT 14
#define LED_PIN 6
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
int x0=0;
int x1=1;
int x2=2;
int x3=3;
int x4=4;
int x5=5;
int x6=6;
int x7=7;
int x8=8;
int x9=9;
int x10=10;
int x11=11;
int x12=12;



void setup() {
 strip.begin();
 
}

void loop() {
  if (x0>13){
    x0=0;
  }
  if (x1>13){
    x1=0;
  }
  if (x2>13){
    x2=0;
  }
  if (x3>13){
    x3=0;
  }
   if (x4>13){
    x4=0;
  }
  if (x5>13){
    x5=0;
  }
  if (x6>13){
    x6=0;
  }
  if (x7>13){
    x7=0;
  }
    if (x8>13){
    x8=0;
  }
  if (x9>13){
    x9=0;
  }
  if (x10>13){
    x10=0;
  }
  if (x11>13){
    x11=0;
  }
    if (x12>13){
    x12=0;
  }
 
    for (int i = 0; i < LED_COUNT; i++)
  {
    strip.setPixelColor(x0, strip.Color(55,0,0));
    strip.show();
    strip.setPixelColor(x1, strip.Color(55,17,0));
    strip.show();  
    strip.setPixelColor(x2, strip.Color(55,35,0));
    strip.show();
    strip.setPixelColor(x3, strip.Color(55,45,0));
    strip.show();
    strip.setPixelColor(x4, strip.Color(55,55,0));
    strip.show(); 
     strip.setPixelColor(x5, strip.Color(27,55,0));
    strip.show();
     strip.setPixelColor(x6, strip.Color(0,55,0));
    strip.show();
    strip.setPixelColor(x7, strip.Color(0,55,27));
    strip.show(); 
    strip.setPixelColor(x8, strip.Color(0,55,55));
    strip.show();
     strip.setPixelColor(x9, strip.Color(0,27,55));
    strip.show();
    strip.setPixelColor(x10, strip.Color(0,0,55));
    strip.show();  
     strip.setPixelColor(x11, strip.Color(27,0,55));
    strip.show();
    strip.setPixelColor(x12, strip.Color(55,0,55));
    strip.show();
    strip.setPixelColor(x0, strip.Color(0,0,0));
    strip.show();
      
  }
   x0++;
   x1++;
   x2++;
   x3++;
   x4++;
   x5++;
   x6++;
   x7++;
   x8++;
   x9++;
   x10++;
   x11++;
   x12++;
}

 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Оптимизация по какому/каким параметрам интересует?

olegnezhelskiy007
Offline
Зарегистрирован: 13.09.2019

Ну как минимум уменьшение кода, без потери работоспособности

b707
Offline
Зарегистрирован: 26.05.2017

Организуйте вместо переменных x1-x12 массив
int x[12]

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

Я бы сказал, вместо x0-x12 : int x[13]

b707
Offline
Зарегистрирован: 26.05.2017

Ну да :)
а для чего там цикл в строке 67 - вообще не ясно, думаю это все, что осталось от прежнего более оптимального кода:)

olegnezhelskiy007
Offline
Зарегистрирован: 13.09.2019

А как задать иксам значения?

nik182
Онлайн
Зарегистрирован: 04.05.2015

http://arduino.ru/forum/programmirovanie/rabota-s-hex#comment-479087
Как то так. В книгах по програмированию это описано. Что, совсем лень читать?

MaksVV
Offline
Зарегистрирован: 06.08.2015

может вам так хотелось?

#include "Adafruit_NeoPixel.h"
#define LED_COUNT 14
#define LED_PIN 6
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

// цвета 
byte x[]
{
55,0,0,     //0
55,17,0,    //1
55,35,0,    //2
55,45,0,    //3
55,55,0,    //4
27,55,0,    //5
0,55,0,     //6
0,55,27,    //7
0,55,55,    //8
0,27,55,    //9
0,0,55,     //10
27,0,55,    //11
55,0,55     //12
}

void setup() 
{
 strip.begin();
}

void loop() 
{
   for (int i = 0; i < sizeof(x)/3; i=i+3)
    {
    strip.setPixelColor(i/3, strip.Color(i,i+1,i+2));
    strip.show();
    }
}

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

MaksVV пишет:

может вам так хотелось?

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

MaksVV
Offline
Зарегистрирован: 06.08.2015

Деда, ну поправил бы че ты.

#include "Adafruit_NeoPixel.h"
#define LED_COUNT 14
#define LED_PIN 6
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

// цвета 
byte x[]
{
55,0,0,     //0
55,17,0,    //1
55,35,0,    //2
55,45,0,    //3
55,55,0,    //4
27,55,0,    //5
0,55,0,     //6
0,55,27,    //7
0,55,55,    //8
0,27,55,    //9
0,0,55,     //10
27,0,55,    //11
55,0,55     //12
}

void setup() 
{
 strip.begin();
}

void loop() 
{
   for (int i = 0; i < sizeof(x)/3; i=i+3)
    {
    strip.setPixelColor(i/3, strip.Color(x[i],x[i+1],x[i+2]));
    strip.show();
    }
}

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

поправляю:  

for (int i = 0; i < sizeof(x)/3; i=i+3)

неправильно, на 3 не нада делить, надо ж дойти до конца массива, а не до его трети

for (int i = 0; i < sizeof(x); i+=3)

MaksVV
Offline
Зарегистрирован: 06.08.2015

понял, сажусь два

b707
Offline
Зарегистрирован: 26.05.2017

DetSimen пишет:

неправильно, на 3 не нада делить, надо ж дойти до конца массива, а не до его трети

и не только это, в исходном коде был сдвиг по массиву, а тут его нет

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

b707 пишет:

и не только это, в исходном коде был сдвиг по массиву

ХДЕ?  О_О    Тут от i вапще ничо не зависит  (это исходный, из #1)

    for (int i = 0; i < LED_COUNT; i++)
  {
    strip.setPixelColor(x0, strip.Color(55,0,0));
    strip.show();
    strip.setPixelColor(x1, strip.Color(55,17,0));
    strip.show();  
    strip.setPixelColor(x2, strip.Color(55,35,0));
    strip.show();
    strip.setPixelColor(x3, strip.Color(55,45,0));
    strip.show();
    strip.setPixelColor(x4, strip.Color(55,55,0));
    strip.show(); 
     strip.setPixelColor(x5, strip.Color(27,55,0));
    strip.show();
     strip.setPixelColor(x6, strip.Color(0,55,0));
    strip.show();
    strip.setPixelColor(x7, strip.Color(0,55,27));
    strip.show(); 
    strip.setPixelColor(x8, strip.Color(0,55,55));
    strip.show();
     strip.setPixelColor(x9, strip.Color(0,27,55));
    strip.show();
    strip.setPixelColor(x10, strip.Color(0,0,55));
    strip.show();  
     strip.setPixelColor(x11, strip.Color(27,0,55));
    strip.show();
    strip.setPixelColor(x12, strip.Color(55,0,55));
    strip.show();
    strip.setPixelColor(x0, strip.Color(0,0,0));
    strip.show();
      
  }
 
DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ааааа.  понял как.  не работал с этими вашими неопикселями проклятыми. :) 

Правда, сиравно не понимаю, нахрена там цикл. 

b707
Offline
Зарегистрирован: 26.05.2017

DetSimen пишет:

Правда, сиравно не понимаю, нахрена там цикл. 

я об этом уже писал в #5 :)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

b707 пишет:

я об этом уже писал в #5 :)

ну дак я же чертовски внимателен сёдня. :) 

MaksVV
Offline
Зарегистрирован: 06.08.2015

и зачем пишу... опять двойка будет

#include "Adafruit_NeoPixel.h"
#define LED_COUNT 14
#define LED_PIN 6
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

// цвета 
byte x[]
{
0,  55,0,0,     //0
1,  55,17,0,    //1
2,  55,35,0,    //2
3,  55,45,0,    //3
4,  55,55,0,    //4
5,  27,55,0,    //5
6,  0,55,0,     //6
7,  0,55,27,    //7
8,  0,55,55,    //8
9,  0,27,55,    //9
10, 0,0,55,     //10
11, 27,0,55,    //11
12, 55,0,55     //12
}

void setup() 
{
 strip.begin();
}

void loop() 
{
 
   for (int i = 0; i < sizeof(x); i+=4)
    {
    strip.setPixelColor(x[i], strip.Color(x[i+1],x[i+2],x[i+3]));
    strip.show();
    }
strip.setPixelColor(x[0], strip.Color(0,0,0));
strip.show();
   for (int i = 0; i < sizeof(x); i+=4)
    {
    x[i]++; if (x[i]>13) {x[i]=0;}
    }
}

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

4 тут вапще не в кассу.

MaksVV
Offline
Зарегистрирован: 06.08.2015

почему? блин и проверить то никак , ни библиотеки ни диодов. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

MaksVV пишет:

почему? блин и проверить то никак , ни библиотеки ни диодов. 

Аааа, нет, это я ступил.  Массив то уже переделанный.  Пойду лучше на огороде работать. 

MaksVV
Offline
Зарегистрирован: 06.08.2015

и я ))