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ı.