Aynı anda iki kod bloğunu çalıştırmak.(çözüldü)

Merhaba arkadaşlar. Yeni çıkan audilerin turuncu sinyal lambalarını çok kıskandım. sinyalleri basitçe karaşimşek LED gibi yapmışlar. bende oturup neden olmasın dedim ve yaptım. 16 Ledli bir sistem. gayet iyi çalışıyor. 8 sol 8 sağ led. problem şu ki 4 lü sinyali çalıştıramadım. yani sol sağ aynı anda çalışmıyor. sırayla çalışıyor. fikri olan varsa yardım lütfen. Bu arada kodu basitleştirdim. Orjinalde 2 adet 74HC595 entegresi kullanıyorum. çok profesyonel. //oto sinyal sistemi led sequential int LED1 = 2; int LED2 = 3; int LED3 = 4; int LED4 = 5; int LED5 = 6; int LED6 = 7; int LED7 = 8; int LED8 = 9; int timer = 100; void setup() { pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); pinMode(LED4, OUTPUT); pinMode(LED5, OUTPUT); pinMode(LED6, OUTPUT); pinMode(LED7, OUTPUT); pinMode(LED8, OUTPUT); } void loop() { solsinyal(); sagsinyal(); } void solsinyal() { digitalWrite(LED1, HIGH); delay(timer); digitalWrite(LED2, HIGH); delay(timer); digitalWrite(LED3, HIGH); delay(timer); digitalWrite(LED4, HIGH); delay(timer); digitalWrite(LED1, LOW); digitalWrite(LED2, LOW); digitalWrite(LED3, LOW); digitalWrite(LED4, LOW); } void sagsinyal() { digitalWrite(LED5, HIGH); delay(timer); digitalWrite(LED6, HIGH); delay(timer); digitalWrite(LED7, HIGH); delay(timer); digitalWrite(LED8, HIGH); delay(timer); digitalWrite(LED5, LOW); digitalWrite(LED6, LOW); digitalWrite(LED7, LOW); digitalWrite(LED8, LOW); }

void dortlu(){ digitalWrite(LED1, HIGH); digitalWrite(LED2, HIGH); digitalWrite(LED3, HIGH); digitalWrite(LED4, HIGH); digitalWrite(LED5, HIGH); digitalWrite(LED6, HIGH); digitalWrite(LED7, HIGH); digitalWrite(LED8, HIGH); delay(timer); delay(timer); delay(timer); delay(timer); delay(timer); digitalWrite(LED1, LOW); digitalWrite(LED2, LOW); digitalWrite(LED3, LOW); digitalWrite(LED4, LOW); digitalWrite(LED5, LOW); digitalWrite(LED6, LOW); digitalWrite(LED7, LOW); digitalWrite(LED8, LOW); delay(timer); delay(timer); delay(timer); delay(timer); delay(timer); }

Tesekkur ederim. Farkli bir bakış açısı. Ve ise yarar. 74HC595 e aynısını uyarlamaya calisacagim

işin içine shift register entegresi girince okoman sistemi olmuyor yada yapamadım. orjinal kodu paylaşıyorum. 2 x 74HC595 kullanmamın sebebi ise 16 ledi sadece 4 pin ile kontrol edebiliyor olmam. dortlü hakkında yardımlarınızı rica ederim. int dataPinSag = 2; int dataPinSol = 3; int latchPin = 4; int clockPin = 5; byte leds = 0; void setup() { pinMode(dataPinSag, OUTPUT); pinMode(dataPinSol, OUTPUT); pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); } void loop() { //sinyalGrupSag(); //sinyalGrupSol(); dortlu(); } void dortlu(){ //??? } void sinyalGrupSol(){ leds = 0; YazSol(); delay(100); //boşta //for (int i = 0; i < 8; i++) for (int i = 7; i >= 0; i–) { bitSet(leds, i); YazSol(); delay(100); } delay(100); for (int i = 7; i >= 0; i–) //Tersten boşalt //for (int i = 0; i < 8; i++) { bitClear(leds, i); YazSol(); delay(100); } } void sinyalGrupSag(){ leds = 0; YazSag(); delay(100); //boşta for (int i = 0; i < 8; i++) { bitSet(leds, i); YazSag(); delay(100); } delay(100); //for (int i = 8; i >= 0; i–) //Tersten boşalt for (int i = 0; i < 8; i++) { bitClear(leds, i); YazSag(); delay(100); } } void YazSol(){ digitalWrite(latchPin, LOW); shiftOut(dataPinSol, clockPin, LSBFIRST, leds); digitalWrite(latchPin, HIGH); } void YazSag(){ digitalWrite(latchPin, LOW); shiftOut(dataPinSag, clockPin, LSBFIRST, leds); digitalWrite(latchPin, HIGH); }

Problem çözüldü. Öncelikle 2 adet 74HC595 kullanacak arkadaşlar. Entegrelerin data clock bacaklarını ayrı ayrı giriş pinlerine verin. Latch bacaklarını birbirine bağlayıp tek pin girişi yapabilirsiniz. Boylece 16 ledi sadece 5 pin ile kontrol edebilirsiniz. Void dörtlüsinyal() için for döngüsünden vazgeçtim. bitSet(ledsSol, 1); YazSol(); bitSet(ledsSag, 7); YazSag(); delay(100); bitSet(ledsSol, 2); YazSol(); bitSet(ledsSag, 6); YazSag(); delay(100); bitSet(ledsSol, 3); YazSol(); bitSet(ledsSag, 5); YazSag(); delay(100); Diye artarak ve azalarak devam ediyor. Sonra ayni diziyi bitClear ile takip ettim. Okoman taktiği işe yaradı. Teşekkürler. Burdan çıkacak sonuç: Arduino iki fonksiyonu ayni anda çalıştıramaz. Sırayla çalıştırır. Kitap okur gibi kod okur. Eğer iki işi ayni anda yapsın istiyorsanız o isleri delay vermeden Sentezleyin. Yani benim gibi iki voidi eş zamanlı çalıştırmaya çalışmak yerine tek void yazıp iç içe sokun. Arduino basit ama hızlı.