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í.
LED Matrix
-
- Příspěvky: 7
- Registrován: 22 bře 2018, 21:55
- Reputation: 0
Re: LED Matrix
- Přílohy
-
- moje1.ino
- Zatím takhle
- (2.53 KiB) Staženo 189 x
-
- Příspěvky: 7
- Registrován: 22 bře 2018, 21:55
- Reputation: 0
Re: LED Matrix
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);
}
}
}
Re: LED Matrix
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
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);
}
}
}
-
- Příspěvky: 7
- Registrován: 22 bře 2018, 21:55
- Reputation: 0
Re: LED Matrix
No, hele, zatím mi funguje docela dobře tohle
je to -> void vlna1()
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);
}
}
}
}
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 10 hostů