// ova datoteka sadrži funkcije opće namjene koje koriste mnogi različiti efekti // Postavlja intenzitet sve tri boje jedne LED diode za generiranje jedne od 43 boje // Ispravite # tako da svi redovi idu slijeva nadesno. void LED(byte broj, byte mojaBoja2){ byte broj2 = broj; if (broj > 0 && broj <3) broj2= 3-broj; if (broj > 5 && broj <10) broj2= 15-broj; if (broj > 14 && broj <21) broj2= 35-broj; if (broj > 27 && broj <36) broj2= 63-broj; leds.setPixelColor(broj2, uzmiBoju(mojaBoja2)); } // Isto kao LED, ali koristi Prijelaznost - ulaz je prava 32-bitna RGB boja void LED2(byte broj, uint32_t mojaBoja2){ byte broj2 = broj; if (broj > 0 && broj <3) broj2= 3-broj; if (broj > 5 && broj <10) broj2= 15-broj; if (broj > 14 && broj <21) broj2= 35-broj; if (broj > 27 && broj <36) broj2= 63-broj; leds.setPixelColor(broj2, mojaBoja2); } void LEDlijevo(byte broj, byte mojaBoja2){ // ova funkcija tretira lijevi kut kao LED 0 byte broj2 = pgm_read_byte_near(&lijevo2[broj]); LED(broj2, mojaBoja2); } void LEDdesno(byte broj, byte mojaBoja2){ // ova funkcija tretira lijevi kut kao LED 0. byte broj2 = pgm_read_byte_near(&desno2[broj]); LED(broj2, mojaBoja2); } // ispunite cijeli trokut void postaviTrokut(byte mojaBoja2) { leds.fill(uzmiBoju(mojaBoja2)); leds.show(); } void postaviMaliTrokut(int mojTri, byte mojaBoja2) { // mali trokuti 0,1,2,3 for (int j = 0; j < 15; j++) { LED(pgm_read_byte_near(&maleStvari[mojTri][j]), mojaBoja2); } leds.show(); } void postaviTreci(int mojTreci, byte mojaBoja2) { // koristi se za rotaciju for (int j = 0; j < 18; j++) { LED(pgm_read_byte_near(&trecine[mojTreci][j]), mojaBoja2); } leds.show(); } // ocisti cijeli trokut void ocistiTrokut() { leds.clear(); leds.show(); } void pauza(){ ocistiTrokut(); leds.show(); delay(1000); } // Ova rutina generira 42 različite boje oko kotača boja koristeći naš 3-bitni BAM uint32_t uzmiBoju(int taBoja) { byte mojaCrvena = 36*pgm_read_byte_near(&boja[taBoja][0]); byte mojaZelena = 36* pgm_read_byte_near(&boja[taBoja][1]); byte mojaPlava = 36*pgm_read_byte_near(&boja[taBoja][2]); return leds.Color(mojaCrvena,mojaZelena, mojaPlava); } // Ova rutina generira blijedi za primarne boje; 51 je puna; 0 je isključeno uint32_t Prijelaznost(int taBoja, int tajPrijelaz) { byte mojaCrvena = 0; byte mojaZelena = 0; byte mojaPlava = 0; if (taBoja == Red) mojaCrvena = 5* tajPrijelaz; else if (taBoja == Green) mojaZelena = 5* tajPrijelaz; else if (taBoja == Blue) mojaPlava = 5* tajPrijelaz; return leds.Color(mojaCrvena,mojaZelena, mojaPlava); } // Ova rutina rotira bilo koji uzorak do 9 LED dioda (3 po trokutu, gdje // trokut označava unutarnji, srednji i vanjski trokut.) // održavanje tri prstena LED dioda u ravnoj liniji zahtijeva neko objašnjenje // vanjski prsten ima 24 LED diode, srednji prsten 15, unutarnji prsten 6 // zajednički nazivnik ova tri broja je 120. // 120 / 24 = 5; 120/15 = 8; 120/6 = 20; dakle j modulo brojevi. // pa je puna rotacija 120 koraka. ponavljanja je višestruka od 120 // dir 0 = suprotno od kazaljke na satu; 1 = u smjeru kazaljke na satu; 2 = vanjska i unutarnja CCW; srednji CW. void rotiraj(int reps, int mydelay, byte red, int van1, int van2, int van3, int sredina1, int sredina2, int sredina3, int unutarnje1, int unutarnje2, int unutarnje3, int stupacvan1, int stupacvan2, int stupacvan3, int stupacsredina1, int stupacsredina2, int stupacsredina3, int stupacU1, int stupacU2, int stupacU3) { for (int j = 0; j < 120 * reps; j++) { LED(pgm_read_byte_near(&radijalno[0][van1]), stupacvan1); LED(pgm_read_byte_near(&radijalno[1][sredina1]), stupacsredina1); LED(pgm_read_byte_near(&radijalno[2][unutarnje1]), stupacU1); LED(pgm_read_byte_near(&radijalno[0][van2]), stupacvan2); LED(pgm_read_byte_near(&radijalno[1][sredina2]), stupacsredina2); LED(pgm_read_byte_near(&radijalno[2][unutarnje2]), stupacU2); LED(pgm_read_byte_near(&radijalno[0][van3]), stupacvan3); LED(pgm_read_byte_near(&radijalno[1][sredina3]), stupacsredina3); LED(pgm_read_byte_near(&radijalno[2][unutarnje3]), stupacU3); leds.show(); delay(mydelay); ocistiTrokut(); if (red == 0) { if (j % 5 == 0) { van1++; if (van1 > 23)van1 = 0; van2++; if (van2 > 23)van2 = 0; van3++; if (van3 > 23)van3 = 0; } if (j % 8 == 0) { sredina1++; if (sredina1 > 14)sredina1 = 0; sredina2++; if (sredina2 > 14)sredina2 = 0; sredina3++; if (sredina3 > 14)sredina3 = 0; } if (j % 20 == 0) { unutarnje1++; if (unutarnje1 > 5)unutarnje1 = 0; unutarnje2++; if (unutarnje2 > 5)unutarnje2 = 0; unutarnje3++; if (unutarnje3 > 5)unutarnje3 = 0; } } else if (red == 1) { if (j % 5 == 0) { van1--; if (van1 < 0)van1 = 23; van2--; if (van2 < 0)van2 = 23; van3--; if (van3 < 0)van3 = 23; } if (j % 8 == 0) { sredina1--; if (sredina1 < 0)sredina1 = 14; sredina2--; if (sredina2 < 0)sredina2 = 14; sredina3--; if (sredina3 < 0)sredina3 = 14; } if (j % 20 == 0) { unutarnje1--; if (unutarnje1 < 0)unutarnje1 = 5; unutarnje2--; if (unutarnje2 < 0)unutarnje2 = 5; unutarnje3--; if (unutarnje3 < 0)unutarnje3 = 5; } } else if (red == 2) { if (j % 5 == 0) { van1++; if (van1 > 23)van1 = 0; van2++; if (van2 > 23)van2 = 0; van3++; if (van3 > 23)van3 = 0; } if (j % 8 == 0) { sredina1--; if (sredina1 < 0)sredina1 = 14; sredina2--; if (sredina2 < 0)sredina2 = 14; sredina3--; if (sredina3 < 0)sredina3 = 14; } if (j % 20 == 0) { unutarnje1++; if (unutarnje1 > 5)unutarnje1 = 0; unutarnje2++; if (unutarnje2 > 5)unutarnje2 = 0; unutarnje3++; if (unutarnje3 > 5)unutarnje3 = 0; } } } }