Bir proje ödevim var ve rgb led ile arduino mega bağlantısının nasıl yapılacağını bilemiyorum. Bana bu konuda yardımcı olun lütfen. Özellikle fritzing çizimi ile yardımcı olabilirseniz çok sevinirim. Projeyi teslim etmem için sayılı günlerim kaldı.
// çeşitli beyaz tonlar #define white 0x7affff//0xffffff #define whiteHalf 0x234444//0x444444 #define whiteQuarter 0x001111 #define coolWhite 0xccffcc #define warmWhite 0xff66cc
#define nolight 0x000000
// koşu paternleri için değişkenler unsigned long pattern[5]; int length; int frames; int framerate; int edgeLength;
// button stuff için değişkenler (geri dönüşlü) const int buttonPin = 2; // basmalı pimin sayısı volatile const int limit = 7; // düğme sayacını sıfırlamak için; en yüksek durum kodu volatile int counter = 0; volatile int state = LOW; int old_counter = 0;
void setup(){ FastLED.addLeds<TM1803, 8>(leds[0], NUM_LEDS); // ilk sıradaki ledleri kontrol etmek için pin 8'i atar FastLED.addLeds<TM1803, 9>(leds[1], NUM_LEDS); FastLED.addLeds<TM1803, 10>(leds[2], NUM_LEDS); FastLED.addLeds<TM1803, 11>(leds[3], NUM_LEDS); FastLED.addLeds<TM1803, 12>(leds[4], NUM_LEDS); FastLED.addLeds<TM1803, 13>(leds[5], NUM_LEDS);
if (old_counter != counter){ // durum değişiyorsa, rengin taşınmasını önlemek için ledleri temizleyin clearLEDs(); if (counter ==4){ for (int i = 0; i<NUM_STRIPS; i++){ // şeritler arasında döngü for (int y = 0; y<NUM_LEDS; y++){ // ledleri arasında döngü leds[y] = whiteHalf; // diziden belirli led için otomatik olarak renk ayarlama } } for (int z = 0; z<8; z++){ edgeLEDs[z] = whiteHalf; } } delay(100); }
old_counter = counter;
switch (counter){ // her desen için durum; renkleri ve kare hızını tanımla
case 0: // serin kırık dalga: kenar aynı renkteki dalgadır {long pattern[] = {purple, indigo, blue, teal, green, teal, blue, indigo}; length = sizeof(pattern)/sizeof(long); // dizi uzunluğunu hesaplar frames = length; // kalıpların dizinin bir tam dönüşü olduğunu farz etmek framerate = 200;
for(int x = 0; x < frames; x++) { // kareler arasında döngü for (int i = 0; i<NUM_STRIPS; i++){ // şeritler arasında döngü // set top colors for (int y = 0; y<NUM_LEDS; y++){ // ledleri arasında döngü
leds[y] = pattern[(x+y+i)%length]; // diziden belirli led için otomatik olarak renk ayarlama } }
// kenar renkleri ayarla for (int z = 0; z<8; z++){ edgeLEDs[z] = pattern[(x+z)%length]; }
if (state == HIGH){ // düğmesine basıldığında durumdan çıkar state = LOW; break; }
FastLED.show(); delay(framerate); }} break;
case 1: // sıcak katı dalga: kenar aynı renkteki dalgadır {long pattern[] = {coral, red, orange, yellow, orange, red}; length = sizeof(pattern)/sizeof(long); // dizi uzunluğunu hesaplar frames = length; // kalıpların dizinin bir tam dönüşü olduğunu farz etmek framerate = 200;
for(int x = 0; x < frames; x++) { // kareler arasında döngü for (int i = 0; i<NUM_STRIPS; i++){ // şeritler arasında döngü for (int y = 0; y<NUM_LEDS; y++){ // ledleri arasında döngü
leds[y] = pattern[(x+y)%length]; // diziden belirli led için otomatik olarak renk ayarlama } } //if (state == HIGH){ //state = LOW; // break; }
// kenar renkleri ayarla for (int z = 0; z<8; z++){ edgeLEDs[z] = pattern[(x+z)%length]; }
if (state == HIGH){ // düğmesine basıldığında durumdan çıkar state = LOW; break; }
FastLED.show(); delay(framerate); }} break;
case 2: // kuyruklu yıldız tipi desen (ileri geri): kenar kuyruklu yıldızla aynı renkteki dalgadır {long pattern[] = {nolight, nolight, nolight, nolight, nolight, nolight, white, paleYellow, paleOrange, nolight, nolight, nolight, nolight, nolight, nolight};//nolight, nolight, nolight, nolight, nolight, nolight, whiteQuarter, whiteHalf, white, nolight}; length = sizeof(pattern)/sizeof(long); // dizi uzunluğunu hesaplar frames = length; // kalıpların dizinin bir tam dönüşü olduğunu farz etmek framerate = 75;
for (int i = 0; i<NUM_STRIPS; i++){ // şeritler arasında döngü for(int x = 0; x < frames; x++) { // kareler arasında döngü // even strips if (i%2 == 0){ for (int y = 0; y<NUM_LEDS; y++){ // ledleri arasında döngü
leds[y] = pattern[(x+y)%length]; // diziden belirli led için otomatik olarak renk ayarlama }
//FastLED.show(); // delay(framerate); }
if (state == HIGH){ break; }
// odd strips if (i%2 != 0){ for (int y = 0; y<NUM_LEDS; y++){ // loop through leds
leds[NUM_LEDS-y-1] = pattern[(x+y)%length]; // diziden belirli led için otomatik olarak renk ayarlama }
//FastLED.show(); // delay(framerate); }
if (state == HIGH){ break; }
// edge leds for (int z = 0; z<8; z++){ edgeLEDs[z] = edgePattern[(x+z)%edgeLength]; }
if (state == HIGH){ //state = LOW; break; }
FastLED.show(); delay(framerate); }
if (state == HIGH){ state = LOW; break; } }} break;
for(int x = 0; x < frames; x++) { // kareler arasında döngü for (int i = 0; i<NUM_STRIPS/2; i++){ // şeritler arasında döngü for (int y = 0; y<NUM_LEDS; y++){ // ledleri arasında döngü // ayna çerçevelerini aynı çerçevelerde olacak şekilde ayarlama leds[y] = pattern[(x+i)%frames][(y)%length]; // 0-2 iplikçikleri için doğru leds[(NUM_STRIPS -1) - i][y] = pattern[(x+i)%frames][(y)%length]; // iplikler 3-5 için doğru } } for (int z = 0; z<8; z++){ // kenar ledleri if (x == (frames-1)){ edgeLEDs[z] = white; } else{ edgeLEDs[z] = nolight; } }
if (state == HIGH){ state = LOW; break; }
FastLED.show(); delay(framerate); } } break;
case 4: // sözde rastgele parıldayan - sürekli: kenar parıldayarak dahil edilir {framerate = 200;
int i = random(NUM_STRIPS+1); // rastgele bir şeritten rastgele bir yol seç int y = random(NUM_LEDS);
int z = random(10);
if (z%2 == 0){ if (i<=NUM_STRIPS){ leds[y] = dimIndigo; // bazen açtı } else{ edgeLEDs[y%8] = dimIndigo; } } else{ if (i<=NUM_STRIPS){ leds[y] = whiteHalf; // bazen kapalı } else{ edgeLEDs[y%8] = whiteHalf; } }
FastLED.show(); delay(framerate);}
break;
case 5: // sözde rasgele pırıltı - kısa: kenar pırıltıya dahil edilir {framerate = 200;
int i = random(NUM_STRIPS+1); // rastgele bir şeritten rastgele bir yol seç int y = random(NUM_LEDS);
if (i<=NUM_STRIPS){ leds[y] = paleBlue; // LED'i açın } else{ edgeLEDs[y%8] = paleBlue; } //leds[y] = paleBlue; // ledi aç
int i = random(NUM_STRIPS); // rastgele bir şerit seç int j = random(10);
for(int x = 0; x < frames; x++) { // kareler arasında döngü if (j%2 ==0){ // even, along strips for (int y = 0; y<NUM_LEDS; y++){ // ledleri arasında döngü leds[y] = pattern[(x+y+5)%length]; // diziden belirli led için otomatik olarak renk ayarlama } }
else { // odd, across strips for (int y = 0; y<NUM_LEDS; y++){ leds[y] = pattern[(x+y+5)%length]; // diziden belirli led için otomatik olarak renk ayarlama } }
for (int z = 0; z<8; z++){ //loop through edge leds edgeLEDs[z] = whiteHalf; }
if (state == HIGH){ state = LOW; break; }
FastLED.show(); delay(framerate); }} break;
case 7: // Gökkuşağı modu: kenar desenlerin devamıdır {long pattern[] = {red, orange, yellow, green, blue, indigo, purple}; length = sizeof(pattern)/sizeof(long); // dizi uzunluğunu hesaplar frames = length; // kalıpların dizinin bir tam dönüşü olduğunu farz etmek framerate = 100;
// solid wave for(int x = 0; x < frames; x++) { // kareler arasında döngü for (int i = 0; i<NUM_STRIPS; i++){ // şeritler arasında döngü for (int y = 0; y<NUM_LEDS; y++){ // ledleri arasında döngü
leds[y] = pattern[(x+y)%length]; // diziden belirli led için otomatik olarak renk ayarlama } }
for (int z = 0; z<8; z++){ edgeLEDs[z] = pattern[(x+z)%length]; }
if (state == HIGH){ //düğmesine basıldığında durumdan çıkar state = LOW; break; }
FastLED.show(); delay(framerate); }
// broken wave for(int x = 0; x < frames; x++) { // kareler arasında döngü for (int i = 0; i<NUM_STRIPS; i++){ // şeritler arasında döngü for (int y = 0; y<NUM_LEDS; y++){ // ledleri arasında döngü leds[y] = pattern[(x+y+i)%length]; // diziden belirli led için otomatik olarak renk ayarlama } }
for (int z = 0; z<8; z++){ edgeLEDs[z] = pattern[(x+z)%length]; }
if (state == HIGH){ // düğmesine basıldığında durumdan çıkar state = LOW; break; }
FastLED.show(); delay(framerate); }} break;
} }
void changeLED(){ // kesme işlevi static unsigned long last_interrupt_time = 0; static unsigned int debounce_delay = 300; unsigned long interrupt_time = millis();
if (interrupt_time - last_interrupt_time > debounce_delay){ // geri dönüş için gecikme counter ++; // sayacı artırmak state = HIGH; //durumu değiştir, böylece davalar kapanacak if (counter > limit){ // sayacı w / in limitinde tutar (bunun yerine% yapabilir) counter = 0; } last_interrupt_time = interrupt_time; } }
void clearLEDs(){ // turns off all leds for (int i = 0; i<NUM_STRIPS; i++){ // şeritler arasında döngü for (int y = 0; y<NUM_LEDS; y++){ // ledleri arasında döngü leds[y] = nolight; // diziden belirli led için otomatik olarak renk ayarlama } FastLED.show(); } for (int z = 0; z<8; z++){ //kenar ledleri boyunca döngü edgeLEDs[z] = nolight; } FastLED.show(); }
yeni mesaja git
Yeni mesajları sizin için sürekli kontrol ediyoruz, bir mesaj yazılırsa otomatik yükleyeceğiz.Bir Daha Gösterme