LED Matrix

jandolejs1999
Příspěvky: 7
Registrován: 22 bře 2018, 21:55
Reputation: 0

Re: LED Matrix

Příspěvek od jandolejs1999 » 26 bře 2018, 21:42

No jo, ale furt nevím jak s programem.
Takhle jsem to zatím zkusil, no.
Ale namísto rozsvěcení se mi zdá že se ty diody spíše postupně zhasínají.
Přílohy
moje1.ino
Zatím takhle
(2.53 KiB) Staženo 188 x

jandolejs1999
Příspěvky: 7
Registrován: 22 bře 2018, 21:55
Reputation: 0

Re: LED Matrix

Příspěvek od jandolejs1999 » 29 bře 2018, 19:30

No takže takhle. Nějaká vylepšení? Připomínky?

Kód: Vybrat vše

/* piny */
int piny[] = {3, 5, 6, 9, 10, 11};  //  pwm piny pro výstup
int button = 2; //  interrupt-only !

int mode = 3;   //  defaultní mód
int pocetModu = 3;  //  celkový počet módů

/* Nezbytnosti - ostatní */
int pwmE[6];  //  počet výstupů
int pinCount = sizeof(piny) / 2;

void setup(){

  Serial.begin(9600);
  Serial.println("START");
  
  for(int i = 0; i < pinCount; i++){pinMode(i, OUTPUT); }

  pinMode(button, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(button), changeMode, FALLING);
  
    randomSeed(analogRead(0));

}

void changeMode(){if(mode < pocetModu){mode++;}else{mode = 1;}}

void loop(){
  switch(mode){
    case 1:
      vlna1();    //  rozsvěcí a zhasíná ledky jednu po druhé
    break;
    case 2:
      nahoda1();  //  náhodně vybere ledku a rozsvítí ji na náhodnou hodnotu
    break;
    case 3:
      nahoda2();  //  ledky postupně rozsvěcí na náhodnou hodnotu
    break;
  }
}

/* funkce jednotlivých módů: */

void vlna1(){ //  rozsvěcí a zhasíná ledky jednu po druhé

  //  nastaví hodnoty
  int pwmValues[] = {
  0,  1,  2,  3,  4,  5,  6,  7,  8,  9,   
  10, 30, 50, 70, 100,  130,  170,  220,  255,  255,   
  255,  255,  250,  230,  210,  190,  170,  150,  130,  110,   
  100,  90, 80, 70, 60, 50, 40, 30, 20, 10, 
  10, 9,  8,  7,  6,  5,  4,  3,  2,  1,   
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,   
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,   
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,   
  0,  0,  0,  0,  0,  0,  0,  0,  0,  0 
  };        //  hodnoty funkce "vlna1"

  int valuesCount = sizeof(pwmValues) /2;

  //  připraví hodnoty
  for(int i = 0; i < pinCount; i++){pwmE[i] = map(i, 0, pinCount, 0, valuesCount); }
    /*  rozloží počáteční hodnoty podle počtu použitých pinů do velikosti
      pole s hodnotami tak, aby rovnoměrně vyplnili pole s hodnotami  */

  //  tady začíná samotný program
  while(mode == 1){

    for (int i = 0; i < pinCount; i++){   //  pro každý pin
      if(pwmE[i] <= valuesCount){pwmE[i]++; }   //  zvyšuje hodnotu až do velikosti pole s hodnotami
      if(pwmE[i] >= valuesCount){pwmE[i] = 0; } //  poté ji resetuje zpět na nulu (počátek)
    }

    for(int i=0; i < pinCount; i++){      //  pro každý pin
      analogWrite(piny[i], pwmValues[pwmE[i]]); //  zapíše pwm hodnotu
    }

    for(int i=0; i < pinCount; i++){
      Serial.print(pwmValues[pwmE[i]]);
      Serial.print("\t");
    }

    Serial.print("\n");

  }

}

void nahoda1(){ //  náhodně vybere ledku a rozsvítí ji na náhodnou hodnotu

  //  nastaví hodnoty
  int minimumPWM = 0;
  int maximumPWM = 255;
  int pauzaMeziKroky = 10;

  //  tady začíná samotný program
  while(mode == 2){

    int x = random(0, pinCount);
    int y = random(minimumPWM, maximumPWM);
    analogWrite(piny[x], y);

    Serial.print("\nPin: ");
    Serial.print(piny[x]);
    Serial.print("\thodnota: ");
    Serial.print(y);

    delay(pauzaMeziKroky);

  }

}

void nahoda2(){ //  ledky postupně rozsvěcí na náhodnou hodnotu

  //  nastaví hodnoty
  int minimumPWM = 0;
  int maximumPWM = 255;
  int pauzaMeziKroky = 500;

  //  tady začíná samotný program
  while(mode == 3){

    for(int i = 0; i < pinCount; i++){

      int y =  random(minimumPWM, maximumPWM);
      analogWrite(piny[i], y);

      Serial.print("\nPin: ");
      Serial.print(piny[i]);
      Serial.print("\thodnota: ");
      Serial.print(y);
      
      delay(pauzaMeziKroky);

    }

  }

}


Indian
Příspěvky: 16
Registrován: 20 bře 2018, 14:36
Reputation: 0

Re: LED Matrix

Příspěvek od Indian » 24 dub 2018, 12:08

A co takhle použít neopixel, připojíš jen jeden signál a ovládáš kteroukoliv diodu na pásku
nemám tu svoji poslední patlaninu, ale malej příklad denní světlo a blinkr nalitej jako u audi

Kód: Vybrat vše

#include <Adafruit_NeoPixel.h>
      #define PIN 6
      #define pocet 9
      #define pocet2 12

int cteniL = 0;
int X = 100;   //mezera u diod
int Y = 100;   //cekani po zhasnuti
int Z = 200;    //cekani na zhasnuti zlute
const int TL = 2;

// Parameter 1 = number of pixels in strip
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel(12, PIN, NEO_RGB + NEO_KHZ800);
    void setup() {
      strip.begin();
      strip.show(); // Initialize all pixels to 'off'
        pinMode (TL, INPUT);
        
    }
    void loop () {
cteniL = digitalRead(TL);

  if (cteniL == 1){
    for (int i=0; i<pocet; i++){
              strip.setPixelColor(i, 0, 0, 0);              // nastavení jedné LED     
      strip.show();                                                // přenesení dat do fyzických LED 
      delay(0);  
    }
            strip.setPixelColor(9, 75, 75, 75);
            strip.setPixelColor(10, 75, 75, 75);
            strip.setPixelColor(11, 75, 75, 75);
            
            for (int i=0; i<pocet; i++){
              strip.setPixelColor(i, 100, 250, 0);              // nastavení jedné LED     
      strip.show();                                                // přenesení dat do fyzických LED 
      delay(X);                                                 // zpomalení nalití
            }  
        delay (Z);    
            for (int i=0; i<pocet; i++){
              strip.setPixelColor(i, 0, 0, 0);              // nastavení jedné LED     
      strip.show();                                                // přenesení dat do fyzických LED 
      delay(0);
            }
      for (int i=0; i<pocet; i++){
              strip.setPixelColor(i, 100, 250, 0);              // nastavení jedné LED     
      strip.show();                                                // přenesení dat do fyzických LED 
      delay(X);                                                 // zpomalení nalití
            }
        delay (Z);       
            for (int i=0; i<pocet; i++){
              strip.setPixelColor(i, 0, 0, 0);              // nastavení jedné LED     
      strip.show();                                                // přenesení dat do fyzických LED 
      delay(0);
            }
            for (int i=0; i<pocet; i++){
              strip.setPixelColor(i, 100, 250, 0);              // nastavení jedné LED     
      strip.show();                                                // přenesení dat do fyzických LED 
      delay(X);                                                 // zpomalení nalití
            }      
        delay (Z); 
            for (int i=0; i<pocet2; i++){
              strip.setPixelColor(i, 0, 0, 0);              // nastavení jedné LED     
      strip.show();                                                // přenesení dat do fyzických LED 
      delay(0);
            }
  }
      else {
      
      for (int i=0; i<pocet2; i++){
              strip.setPixelColor(i, 200, 200, 200);              // nastavení jedné LED     
      strip.show();                                                // přenesení dat do fyzických LED 
      delay(20);
            }
    }
    }

jandolejs1999
Příspěvky: 7
Registrován: 22 bře 2018, 21:55
Reputation: 0

Re: LED Matrix

Příspěvek od jandolejs1999 » 30 dub 2018, 22:29

No, hele, zatím mi funguje docela dobře tohle
je to -> void vlna1()

Kód: Vybrat vše

#define	maxPWM		255	//	minimální a maximální
#define	minPWM		0	//	defaultní hodnoty "PWM"
#define	pinCount	6	//	počet pinů celkem

int piny[] = {3, 5, 6, 9, 10, 11};	//	pwm piny pro výstup
int pwmE[pinCount];		//	počet výstupů
int mode = 1;			//	defaultní mód
int skok;

int pauzaMeziKroky	=	10	;
int minimumPWM		=	0	;
int maximumPWM		=	255	;


void setup(){
	Serial.begin(9600);
	for(int i = 0; i < pinCount; i++){pinMode(piny[i], OUTPUT);}
	randomSeed(analogRead(0));
}

void loop(){

	switchMode();

}

void switchMode(){

	switch(mode){
		case 1:	vlna1();	break;	//	Udělá vlnu
		case 2:	nahoda1();	break;	//	Náhodně vybere ledku a okamžitě ji rozsvítí na náhodné číslo
		case 3:	nahoda2();	break;	//	Postupně rozsvítí ledky na náhodnou hodnotu 
		case 4:	nahoda3();	break;	//	Náhodně a postupně rozsvěcí a stmívá ledky
		case 5:	nahoda4();	break;	//	Ledky rozsvěcí zároveň na náhodnou hodnotu
		case 6:	nahoda5();	break;	//	Ledky rozsvěcí zároveň na náhodnou hodnotu
	}

}

void vlna1(){

	int pwmValues[] = {1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,13,13,13,13,15,15,15,15,17,17,17,17,19,19,19,19,21,21,21,24,24,24,27,27,27,30,30,30,33,33,33,36,36,36,39,39,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,95,100,105,110,115,120,125,130,135,140,145,150,155,160,165,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,250,245,240,235,230,225,220,215,210,205,200,195,190,185,180,175,170,165,160,155,150,145,140,135,130,125,120,115,110,105,100,95,90,87,84,81,78,75,72,69,66,63,60,57,54,51,48,45,42,39,36,33,30,27,24,21,19,19,19,17,17,17,15,15,15,13,13,13,11,11,11,10,10,10,9,9,9,8,8,8,7,7,7,6,6,6,5,5,5,4,4,4,3,3,3,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
	int valuesCount = sizeof(pwmValues) / 2;
	for(int i = 0; i < pinCount; i++){pwmE[i] = map(i, pinCount, 0, 0, valuesCount); }	//	rozmístí počáteční polohu v poli pro každý výstup

	while(mode == 1){
		for (int i = 0; i < pinCount; i++){
			if(pwmE[i] < valuesCount - 1){pwmE[i]++; }
			else{pwmE[i] = 0; }
			analogWrite(piny[i], pwmValues[pwmE[i]]);
		}
		delay(pauzaMeziKroky);
	}

}

void nahoda1(){

	while(mode == 2){
		analogWrite(piny[random(0, pinCount)], random(minimumPWM, maximumPWM));
		delay(pauzaMeziKroky);
	}

}

void nahoda2(){

	while(mode == 3){
		for(int i = 0; i < pinCount; i++){
			analogWrite(piny[i], random(minimumPWM, maximumPWM));
			delay(pauzaMeziKroky);
		}
	}

}

void nahoda3(){

	skok = 10;
	int wantValls[pinCount] = {};
	int nowValls[pinCount] = {};
	
	while(mode == 4){
		int num = random(minimumPWM, maximumPWM);
		int pin = random(0, pinCount);
		wantValls[pin] = num;
		for(int i = 0; i < pinCount; i++){
			if(nowValls[i] < wantValls[i]){nowValls[i] += skok; }
			if(nowValls[i] > wantValls[i]){nowValls[i] -= skok; }
			analogWrite(piny[i], nowValls[i]);
		}
		delay(pauzaMeziKroky);
	}

}

void nahoda4(){

	skok = 1;	//	musí být 1
	int wantValls[pinCount] = {};
	int nowValls[pinCount] = {};

	while(mode == 5){
		for (int i = 0; i < pinCount; i++){
			if(nowValls[i] == wantValls[i]){wantValls[i] = random(minimumPWM, maximumPWM); }
			if(nowValls[i] <  wantValls[i]){nowValls[i]++; }
			if(nowValls[i] >  wantValls[i]){nowValls[i]--; }
			analogWrite(piny[i], nowValls[i]);
		}
		delay(pauzaMeziKroky);
	}

}

void nahoda5(){

	skok = 1;	//	musí být 1
	int wantValls[pinCount] = {};
	int nowValls[pinCount] = {};

	while(mode == 6){
		for(int i = 0; i < pinCount; i++){
			wantValls[i] = random(minimumPWM, maximumPWM);
			while(nowValls[i] != wantValls[i]){
				if(nowValls[i] <  wantValls[i]){nowValls[i]++; }
				if(nowValls[i] >  wantValls[i]){nowValls[i]--; }
				analogWrite(piny[i], nowValls[i]);
				delay(pauzaMeziKroky);
			}
		}
	}

}

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 6 hostů