Arama butonu
Bu konudaki kullanıcılar: 1 misafir
0
Cevap
195
Tıklama
0
Öne Çıkarma
Arduino projesi acil yardım lütfen!!!
D
7 yıl
Er
Konu Sahibi

Bir proje ödevim var ve işin içinden çıkamaz hale geldim. Tüm aşamalar tamam ancak rgb led ile arduino mega arasındaki bağlantının nasıl olacağını anlayamadım.

Projeyi bulduğum linki ve kodları ekliyorum. Bana fritzing çizimi ile anlatabilecek yardımseverler arıyorum. Lütfen işin içinden çıkmama yardım edin. Son sayılı günlerim projeyi teslim etmem gerekiyor.

Projenin orjinal linki:https://www.instructables.com/id/Light-Up-Disco-Table/
ve projeyi ilk bulduğum link:https://projehocam.com/rgb-led-disko-isikli-masa/

ARDUİNO KODU:

#include "FastLED.h"

#define NUM_STRIPS 6 // şerit sayısı
#define NUM_LEDS 6 // şerit başına led sayısı

CRGB leds[NUM_STRIPS][NUM_LEDS]; // LED nesnesini kurar
CRGB edgeLEDs[8];

// TANIM RENKLERİ (not: R B G, R G B DEĞİL)
// temel renkler
#define red 0xff0000
#define coral 0xff3333
#define pink 0xff7700
#define purple 0x99ff00
#define indigo 0x55ff00
#define blue 0x00ff00
#define teal 0x0077ff
#define green 0x0000ff
#define lime 0x6600ff
#define yellow 0xbb008f //0x8f008f
#define orange 0xff0077

// soluk hafif renkli
#define paleBlue 0x11ff99//0x33ff99
#define paleOrange 0x883399//0xff3399
#define paleYellow 0x58338f//0x8f338f

// loş hafifçe aydınlatılmış demektir
#define dimPurple 0x226600//0x224400
#define dimIndigo 0x118800//0x114400

// ç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);

FastLED.addLeds<TM1803, 7>(edgeLEDs, 8); // kenar ledleri

pinMode(buttonPin, INPUT);
attachInterrupt(0, changeLED, RISING); // kesme, düğmeye basıldığında sayacı artırır

Serial.begin(9600);
delay(100);
}


void loop() {

Serial.println(counter);
Serial.println(old_counter);

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
}
}

//if (state == HIGH){ // düğmesine basıldığında durumdan çıkar
//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 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;

long edgePattern[] = {white, white, paleYellow, paleYellow, paleOrange, paleOrange};
edgeLength = sizeof(edgePattern)/sizeof(long);


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;

case 3: // beyaz dalgaların - işler: kenar dalgaların devamıdır
{long pattern[][10]={{nolight, nolight, nolight, nolight, nolight, nolight},
{nolight, nolight, nolight, nolight, nolight, nolight},
{nolight, nolight, white, white, nolight, nolight},
{nolight, white, nolight, nolight, white, nolight},
{white, nolight, nolight, nolight, nolight, white},
{nolight, nolight, nolight, nolight, nolight, nolight}};

/*long pattern[][10]={nolight, nolight, nolight, nolight, nolight, nolight},
{nolight, nolight, nolight, nolight, nolight, nolight},
{nolight, nolight, white, white, nolight, nolight},
{nolight, white, nolight, nolight, white, nolight},
{white, nolight, nolight, nolight, nolight, white},
{nolight, nolight, nolight, nolight, nolight, nolight}}; works, length = 10, frames = 6*/

length = 6;
frames = 6;
framerate = 200;

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ç

FastLED.show(); // renk göster
delay(framerate);

if (i<=NUM_STRIPS){
leds[y] = nolight;
}
else{
edgeLEDs[y%8] = nolight;
}
//leds[y] = nolight; // ledi kapat

FastLED.show();
delay(framerate);}

break;

case 6: // "rain": edge is solid soft white
{long pattern[] = {white, whiteHalf, whiteQuarter, nolight, nolight, nolight, nolight, nolight, nolight, nolight, nolight, nolight, nolight};

length = sizeof(pattern)/sizeof(long); // dizi uzunluğunu hesaplar
frames = length-1;
framerate = 100;

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();
}

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.