Kara Şimşek Devresi ve Potansiyometre ile Hız Kontrolü
Potansiyometre kullanarak kara şimşek devresindeki LED’lerin yanma hızını değiştirmeyi öğreneceğiz.
Arduino geliştirme kartında karaşimşek devresini anlatacağım. Kara şimşek devresine biraz değişiklik katalım dedik ve potansiyometre ile ışıkların yanma hızını değiştirdik.
- Arduino Uno
- 10K Potansiyometre
- 7 adet LED
- 7 adet direnç
Her LED için ayrı seri direnç kullanılmalıdır. LED’ler Arduino pinlerinden doğrudan yüksek akım çekmemelidir.
Potansiyometreden analogRead() ile 0–1023 aralığında değer okunur. Bu değer map() fonksiyonu ile 30–1000 milisaniye aralığına çevrilir. Elde edilen süre, LED’lerin yanık kalma süresini belirler.
Potansiyometre çevrildikçe bekleme süresi değişir ve kara şimşek efektinin hızı artar veya azalır.
Aşağıdaki kod, verdiğin orijinal yapıyı korur. LED’ler 4’ten 10’a doğru yanar, ardından 9’dan 5’e doğru geri döner.
int led1=4;
int led2=5;
int led3=6;
int led4=7;
int led5=8;
int led6=9;
int led7=10;
int sure;
int pot=A0;
void setup() {
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
pinMode(led4,OUTPUT);
pinMode(led5,OUTPUT);
pinMode(led6,OUTPUT);
pinMode(led7,OUTPUT);
}
void loop() {
sure=analogRead(pot);
sure=map(sure, 0, 1023, 30, 1000);
delay(10);
ledler(sure);
}
void ledler(int sure){
digitalWrite(led1,HIGH);
delay(sure);
digitalWrite(led1,LOW);
digitalWrite(led2,HIGH);
delay(sure);
digitalWrite(led2,LOW);
digitalWrite(led3,HIGH);
delay(sure);
digitalWrite(led3,LOW);
digitalWrite(led4,HIGH);
delay(sure);
digitalWrite(led4,LOW);
digitalWrite(led5,HIGH);
delay(sure);
digitalWrite(led5,LOW);
digitalWrite(led6,HIGH);
delay(sure);
digitalWrite(led6,LOW);
digitalWrite(led7,HIGH);
delay(sure);
digitalWrite(led7,LOW);
digitalWrite(led6,HIGH);
delay(sure);
digitalWrite(led6,LOW);
digitalWrite(led5,HIGH);
delay(sure);
digitalWrite(led5,LOW);
digitalWrite(led4,HIGH);
delay(sure);
digitalWrite(led4,LOW);
digitalWrite(led3,HIGH);
delay(sure);
digitalWrite(led3,LOW);
digitalWrite(led2,HIGH);
delay(sure);
digitalWrite(led2,LOW);
}
Aynı işlemi daha kısa, okunabilir ve geliştirilebilir hale getirmek için LED pinlerini diziye alabiliriz. Bu yöntem, LED sayısını artırmak istediğinizde kodu daha kolay düzenlemenizi sağlar.
int ledler[] = {4, 5, 6, 7, 8, 9, 10};
int ledSayisi = 7;
int pot = A0;
int sure;
void setup() {
for (int i = 0; i < ledSayisi; i++) {
pinMode(ledler[i], OUTPUT);
}
}
void loop() {
sure = analogRead(pot);
sure = map(sure, 0, 1023, 30, 1000);
karaSimsek(sure);
}
void karaSimsek(int sure) {
for (int i = 0; i < ledSayisi; i++) {
digitalWrite(ledler[i], HIGH);
delay(sure);
digitalWrite(ledler[i], LOW);
}
for (int i = ledSayisi - 2; i > 0; i--) {
digitalWrite(ledler[i], HIGH);
delay(sure);
digitalWrite(ledler[i], LOW);
}
}
Bu versiyon aynı şablon içinde eklenmiş düzenlenmiş koddur. Orijinal kodun mantığı korunur; sadece tekrar eden satırlar döngü ile sadeleştirilir.