Упрощение кода

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

Привет, можно ли как-то заменить все эти переменный одной

#include "Adafruit_NeoPixel.h"
#define LED_COUNT 14
#define LED_PIN 12
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
int a = 0;
int b = 1;
int c = 2;
int d = 3;
int e = 4;
int f = 5;
int g = 6;
int h = 7;
int i = 8;
int k = 9;
int m = 10;
int n = 11;
int l = 12;
int p = 13;
uint32_t pausa;
void setup() {
 strip.begin();
Serial.begin(9600);
}

void loop() {
    strip.setPixelColor(a, strip.Color(255,0,0));
    strip.setPixelColor(b, strip.Color(255,0,0));
    strip.setPixelColor(c, strip.Color(255,125,0));
    strip.setPixelColor(d, strip.Color(255,125,0));
    strip.setPixelColor(e, strip.Color(255,255,0));
    strip.setPixelColor(f, strip.Color(255,255,0));
    strip.setPixelColor(g, strip.Color(0,255,0));
    strip.setPixelColor(h, strip.Color(0,255,0));
    strip.setPixelColor(i, strip.Color(0,255,255));
    strip.setPixelColor(k, strip.Color(0,255,255));
    strip.setPixelColor(m, strip.Color(0,0,255));
    strip.setPixelColor(n, strip.Color(0,0,255));
    strip.setPixelColor(l, strip.Color(255,0,255));
    strip.setPixelColor(p, strip.Color(255,0,255));
    strip.setBrightness(255);
    strip.show();
    
    if (millis()-pausa>200) {
    pausa = millis();
    a++;
    b++;
    c++;
    d++;
    e++;
    f++;
    g++;
    h++;
    i++;
    k++;
    m++;
    n++;
    l++;
    p++;
    if(a>13) a=0;
    if(b>13) b=0;
    if(c>13) c=0;
    if(d>13) d=0;
    if(e>13) e=0;
    if(f>13) f=0;
    if(g>13) g=0;
    if(h>13) h=0;
    if(i>13) i=0;
    if(k>13) k=0;
    if(m>13) m=0;
    if(n>13) n=0;
    if(l>13) l=0;
    if(p>13) p=0;

}
}
 

 

sadman41
Offline
Зарегистрирован: 19.10.2016
RxMaxx
Offline
Зарегистрирован: 10.04.2020

Просили же одной переменной, а не массивом... можно и одной, например так:

 

i=0;    
strip.setPixelColor(i%14, strip.Color(255,0,0));
******************
strip.setPixelColor((i+13)%14, strip.Color(255,0,255));
*************
i++;

или вообще без переменных

 

strip.setPixelColor((millis()/200)/%14, strip.Color(255,0,0));
******************
strip.setPixelColor((millis()/200+13)%14, strip.Color(255,0,255));

 

 

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

А что значит i%14?

RxMaxx
Offline
Зарегистрирован: 10.04.2020

Нет, ну, справочник то все равно читать надо http://arduino.ru/Reference

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

А што значит  /%14 ?

RxMaxx
Offline
Зарегистрирован: 10.04.2020

DetSimen пишет:

А што значит  /%14 ?

Может еще спросите что ***** значат? Обыкновенную опечатку распознать не можете? Я как бы не готовый код даю, а лишь идею. Если его тупо закопипастить - он не заработает.

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

Я думал, мошт я пропустил чо...

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Как-то так, но не проверял ))

#include "Adafruit_NeoPixel.h"
#define LED_COUNT 14
#define LED_PIN 12
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
uint8_t color[14][3];
// здесь надо назначить элементы массива! Мне лень.
int i=0;
int k=0;
uint32_t pausa;

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

void loop() {

   for(i=0;i<14;i++){
      int j = i+k;
    if ( j<14){
      strip.setPixelColor(a, strip.Color(color[j][0],color[j][1],color[j][2]));
     } else{
       strip.setPixelColor(a, strip.Color(color[k][0],color[k][1],color[k][2]));
     }
    k++;
  if (k>13) k=0; 
     

    strip.show();
    
    if (millis()-pausa>200) {
    pausa = millis();
   }

}
 

 

RxMaxx
Offline
Зарегистрирован: 10.04.2020

mykaida пишет:

Как-то так, но не проверял ))

 А чему a то равно? Самое интересное то и не написали...

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

RxMaxx пишет:

 А чему a то равно? Самое интересное то и не написали...

А вот тут не досмотрел... Да пусть ТС разбирается, чему там а равно и почему. Да и нафига там вообще это а нужно.

Vitali-71
Offline
Зарегистрирован: 25.04.2017

Добрый всем день! подскажите пожалуйста, почему у меня в программе - симуляторе вот такая проблема. в скетче "бегущих поворотников" при включении симуляции, появляются десятые числа после секунд. Нажимая кнопку, включаются поворотники, а десятые числа, пропадают!

int timer = 200;          

int switchPin1 = A1;



void setup() {
  
  for (int thisPin1 = 8; thisPin1 < 14; thisPin1++) {
    pinMode(thisPin1, OUTPUT);
  }
  pinMode (switchPin1, INPUT);
  
  }




void loop() {
 
  if (digitalRead(switchPin1) == HIGH)
  {

  // loop from the lowest pin to the highest:
  for (int thisPin1 = 8; thisPin1 <  14; thisPin1++) {
    // turn the pin on:
    digitalWrite(thisPin1, HIGH);
    delay(timer);
  }
  for (int thisPin1 = 8; thisPin1 <  14; thisPin1++) {
    // turn the pin off:
    digitalWrite(thisPin1, LOW); 
  }
delay(timer);
    
  
}
}

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Vitali-71 пишет:

Добрый всем день! подскажите пожалуйста, почему у меня в программе - симуляторе вот такая проблема. в скетче "бегущих поворотников" при включении симуляции, появляются десятые числа после секунд. Нажимая кнопку, включаются поворотники, а десятые числа, пропадают!

Видать косяк симулятора.

Vitali-71
Offline
Зарегистрирован: 25.04.2017

Ага, ясннно, спасибо! Кстати, с праздниками!!!

 

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

Спасибо всем, буду пробовать