Herkese merhabalar ! Arduino dersleri serimizin bu yazısında sizlere for döngüsünden bahsedeceğiz ve sonrasında da for döngüsünü kullanarak birlikte kara şimşek uygulaması yapacağız.
Arduino Analog Read ve Seri Haberleşme yazımıza göz atın ! >> Potansiyometre ile değer okuyalım !
Önce For Döngüsünün Mantığına Bakalım
For döngüsü, programlama dillerinde en sık kullanılan döngülerden biridir. Arduino programlamada da sıkça kullanılır ve uygulamaları daha pratik bir yapıda kodlamamızı sağlar. For döngüsü uygulanması istenen işlemin kaç kez tekrar edileceğinin belli olduğu durumlarda kullanılır. Daha net bir ifade ile for döngüsü sayesinde işlemin kaç kez tekrar edileceğini, başlangıç/bitiş değerlerini ve değerler arasındaki artış/azalış miktarını kontrol edebiliriz. Aşağıdaki kod parçacığındaki gibi özetleyebiliriz.
for (başlangıç değeri; döngünün devam etme koşulu; değerdeki değişim)
{
işlemler...
}
Arduino İle Kara Şimşek Uygulaması Yapalım
Kara şimşek devresini kurmadan önce for döngüsünün buradaki işleyişinden bahsetmek istiyorum. Yazının başında da bahsettiğim gibi for döngüsü sayesinde işlemin başlangıç ve bitişini, döngü koşulunu ve değişimini kontrol edebiliyoruz. Kara şimşek devresi: sırayla bir yöne doğru yanma/sönme işlemi yapan, son LED’e geldiğinde ise bu işlemi ters yönde gerçekleştiren bir LED dizisinden oluşmaktadır. Hadi şimdi bu devre için neler gerektiğinden ve devreyi nasıl kuracağımızdan bahsedeyim.
Gerekli malzemeler: ( Not: Kara Şimşek Uygulaması ve 10. Derse Kadar Olan Dersleri “Arduino Başlangıç Seti” İle Yapabilirsiniz. Malzemeler Bu Sette! >)
Eğer malzemelerimiz de hazırsa kara şimşek devresini aşağıdaki gibi kuralım.
Şimdi de devreyi çalıştırabilmek için gerekli Arduino kodunu yazalım.
int ledler[] = { 2, 3, 4, 5, 6, 7 }; //Değişkenleri belirttiğimiz bir dizi tanımlıyoruz. void setup() { for (int i = 0; i < 6; i++) { //For döngüsünün 6 kez tekrarlanmasını istiyoruz. pinMode(ledler[i], OUTPUT); //i değişkenlerini "çıkış" olarak tanımlıyoruz. } } void loop() { for (int i = 0; i < 6; i++) { digitalWrite(ledler[i], HIGH); delay(20); digitalWrite(ledler[i], LOW); } //İlk ledden beşinci lede kadar ledler sırasıyla yanıyor. Yani döngüde ilk led yanar, söner ve ikinci led yanar. İkinci led söndüğünde ise üçüncü led yanar ve döngü bu şekilde devam eder. for (int j = 5; i > -1; i--) { digitalWrite(ledler[j], HIGH); delay(20); digitalWrite(ledler[j], LOW); } //Bu kez ters döngü yapıyoruz. Yani dizinin 5.elemanı olan 7 pinine bağlı led yanar, söner ve bu kez bir önceki led yanar. İşlem bu şekilde devam eder. } //Bu iki döngü sırası birbirinin tersidir. Bu şekilde ledler sırasıyla ileri ve geri yanıp sönerler.
kodda hata var… j
void setup() {
pinMode(2,OUTPUT); //2 ile 7 arasındaki pinleri çıkış pini olarak tanımladık
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);}
void loop() {
digitalWrite(2,HIGH);
delay(100);
digitalWrite(2, LOW);
delay(100);
digitalWrite(3,HIGH);
delay(100);
digitalWrite(3, LOW);
delay(100);
digitalWrite(4,HIGH);
delay(100);
digitalWrite(4, LOW);
delay(100);
digitalWrite(5,HIGH);
delay(100);
digitalWrite(5, LOW);
delay(100);
digitalWrite(6,HIGH);
delay(100);
digitalWrite(6, LOW);
delay(100);
digitalWrite(7,HIGH);
delay(100);
digitalWrite(7, LOW);
delay(100);
digitalWrite(6,HIGH);
delay(100);
digitalWrite(6, LOW);
delay(100);
digitalWrite(5,HIGH);
delay(100);
digitalWrite(5, LOW);
delay(100);
digitalWrite(4,HIGH);
delay(100);
digitalWrite(4, LOW);
delay(100);
digitalWrite(3,HIGH);
delay(100);
digitalWrite(3, LOW);
delay(100);
}
Bunlar işe yaramaz çünkü sadece pwm portları ile enerji çıkışını ayarlayabilirsiniz. Diğerleri sadece dijital pindir.
PWM pinleri= 3,5,6,9,10,11
Ben bu devrenin röle li olanını yapmak istiyorum parçaları aldım 8 çıkışlı bi rölem var kod olarak ne yazmalıım 220 ampullerde yapmak istiyorum
kim bilir :/
ledler[i] yerine for’u 2 den 8 ye kadar yapın .
kodda hata
int ledler[] = {2,3,4,5,6,7}; //Değişkenleri belirttiğimiz bir dizi tanımlıyoruz.
void setup()
{
for(int i=0; i<6; i++) {//For döngüsünün 6 kez tekrarlanmasını istiyoruz.
pinMode(ledler[i], OUTPUT); //i değişkenlerini "çıkış" olarak tanımlıyoruz.
}
}
void loop()
{
for(int i=0; i-1; i–) {
digitalWrite(ledler[i], HIGH);
delay(200);
digitalWrite(ledler[i], LOW);
} //Bu kez ters döngü yapıyoruz. Yani dizinin 5.elemanı olan 7 pinine bağlı led yanar, söner ve bu kez bir önceki led yanar. İşlem bu şekilde devam eder.
} //Bu iki döngü sırası birbirinin tersidir. Bu şekilde ledler sırasıyla
hatasız hali buyrun beyler
” for(int j=5; i>-1; i–) ” bu satırda “i”i gördüğünüz yeri “j” olarak değiştirin arkadaşlar, sorunsuz olarak çalışacaktır. Selamlar
adamsın kardeşim
hatalı olan satır=> for(int j=5; i>-1; i–)
i yerine j yazılacak basit bi dikkatsizlik hatası düzeltebilirsiniz.
teşekkürler dizi kullanımına güzel bir örnek.
olmamış tşkler
kodda ‘j’ olan yerlerin yerine ‘i’ yazın. KODU AŞAĞIYA KOYDUM
int ledler []= {2,3,4,5,6,7,8,9,10};
void setup() {
for(int i=0; i<9; i++){
pinMode(ledler[i],OUTPUT);
}
}
void loop() {
for( int i=0;i-1;i–){
digitalWrite(ledler[i],HIGH);
delay(100);
digitalWrite(ledler[i],LOW);
}
}
kodun aynısını yazıyorum ama “i” tanımlanmadı diye hata veriyo.
bende de
Karaşimşek modelini hazirladim ve yazilimini yaptim. Ama UNO kapasitesi yeterli degil diyor.
Arduino uno da kapasite sıkıntısı var diyor yeterli alan yok diyor. Yükle komutunu kullandığım zaman devre yi acamiyorum.
//Buyrun size for döngüsü olmadan kara şimşek kodları.
//hso sırayla yanıp sönen ledler(kara simsek)
int oled = 2; //2. pin’i oled olarak tanımladık.
int aled = 3; //3. pin’i aled olarak tanımladık.
int bled = 4; //4. pin’i bled olarak tanımladık.
int cled = 5; //5. pin’i cled olarak tanımladık.
int dled = 6; //6. pin’i dled olarak tanımladık.
int eled = 7; //7. pin’i eled olarak tanımladık.
void setup() {
pinMode (oled, OUTPUT); //8. pin’i çıkış olarak tanımladık.
pinMode (aled, OUTPUT); //9. pin’i çıkış olarak tanımladık.
pinMode (bled, OUTPUT); //10. pin’i çıkış olarak tanımladık.
pinMode (cled, OUTPUT); //11. pin’i çıkış olarak tanımladık.
pinMode (dled, OUTPUT); //12. pin’i çıkış olarak tanımladık.
pinMode (eled, OUTPUT); //12. pin’i çıkış olarak tanımladık.
pinMode (eled, OUTPUT); //8. pin’i çıkış olarak tanımladık.
pinMode (dled, OUTPUT); //9. pin’i çıkış olarak tanımladık.
pinMode (cled, OUTPUT); //10. pin’i çıkış olarak tanımladık.
pinMode (bled, OUTPUT); //11. pin’i çıkış olarak tanımladık.
pinMode (aled, OUTPUT); //12. pin’i çıkış olarak tanımladık.
pinMode (oled, OUTPUT); //12. pin’i çıkış olarak tanımladık.
}
void loop() {
digitalWrite (oled, HIGH); //aled’e enerji verdik.
delay (50); //0.1s boyunca yanmasını sağladık
digitalWrite (oled, LOW); //aled’in enerjisini kestik.
delay (50); //0.1s boyunca yanmasını sağladık
digitalWrite (aled, HIGH); //aled’e enerji verdik.
delay (50); //0.1s boyunca yanmasını sağladık
digitalWrite (aled, LOW); //aled’in enerjisini kestik.
delay (50); //0.1s boyunca yanmasını sağladık
digitalWrite (bled, HIGH); //bled’e enerji verdik.
delay (50); //0.1s boyunca yanmasını sağladık
digitalWrite (bled, LOW); //bled’in enerjisini kestik.
delay (50); //0.1s boyunca yanmasını sağladık
digitalWrite (cled, HIGH); // cled’e enerji verdik.
delay (50); //0.1s boyunca yanmasını sağladık
digitalWrite (cled, LOW); //cled’in enerjisini kestik.
delay (50); //0.1s boyunca yanmasını sağladık
digitalWrite (dled, HIGH); // dled’e enerji verdik.
delay (50); //0.1s boyunca yanmasını sağladık
digitalWrite (dled, LOW); //dled’in enerjisini kestik.
delay (50); //0.1s boyunca yanmasını sağladık
digitalWrite (eled, HIGH); //eled’e enerji verdik.
delay (50); //0.1s boyunca yanmasını sağladık
digitalWrite (eled, LOW); //eled’in enerjisini kestik.
digitalWrite (eled, HIGH); //aled’e enerji verdik.
delay (50); //0.1s boyunca yanmasını sağladık
digitalWrite (eled, LOW); //aled’in enerjisini kestik.
delay (50); //0.1s boyunca yanmasını sağladık
digitalWrite (dled, HIGH); //aled’e enerji verdik.
delay (50); //0.1s boyunca yanmasını sağladık
digitalWrite (dled, LOW); //aled’in enerjisini kestik.
delay (50); //0.1s boyunca yanmasını sağladık
digitalWrite (cled, HIGH); //bled’e enerji verdik.
delay (50); //0.1s boyunca yanmasını sağladık
digitalWrite (cled, LOW); //bled’in enerjisini kestik.
delay (50); //0.1s boyunca yanmasını sağladık
digitalWrite (bled, HIGH); // cled’e enerji verdik.
delay (50); //0.1s boyunca yanmasını sağladık
digitalWrite (bled, LOW); //cled’in enerjisini kestik.
delay (50); //0.1s boyunca yanmasını sağladık
digitalWrite (aled, HIGH); // dled’e enerji verdik.
delay (50); //0.1s boyunca yanmasını sağladık
digitalWrite (aled, LOW); //dled’in enerjisini kestik.
delay (50); //0.1s boyunca yanmasını sağladık
digitalWrite (oled, HIGH); //eled’e enerji verdik.
delay (50); //0.1s boyunca yanmasını sağladık
digitalWrite (oled, LOW); //eled’in enerjisini kestik.
}
kodlarda değişiklik yaptım ama yorum kısmındaki açıklamaları düzenlemedim o nedenle yorumlara fazla takılmayın bu sadece sırasıyla yanan ledlerdi ben kara şimşeğe çevirdim 🙂
// Bu da for döngüsü ile kısa kod yazarak aynı işlemi yapmanız için
int pinArray[] = {2, 3, 4, 5, 6, 7};
int count = 0;
int timer = 100;
void setup(){
for (count=0;count<6;count++) {
pinMode(pinArray[count], OUTPUT);
}
}
void loop() {
for (count=0;count=0;count–) {
digitalWrite(pinArray[count], HIGH);
delay(timer);
digitalWrite(pinArray[count], LOW);
delay(timer);
}
}
kALEN NET SENIN YAPDIGIN KOD YANLLIS YAZIYOO
——for (count=0;count=0;count–) { —— YANLIS KODD DIYOO
for döngüsünde şu şekilde bir kullanım söz konusu olabilir mi? Yapıyorum çalışmıyor acaba sebebi nedir ?
void loop() {
for(int i=500; i<=300 ; i=i-50){
digitalWrite(10,HIGH);
delay(i);
digitalWrite(10,LOW);
delay(i);
}}
Kodu bu şekilde yazarsanız sorunsuz çalışacaktır. Delay sürelerini kendinize göre değiştirerek ledlerin hızını ayarlayabilirsiniz. Ben 8 ledli yaptım, siz led sayısını arttırıp azaltabilirsiniz fakat programı buna göre düüzenlemelsiniz.
int ledler[] = {2,3,4,5,6,7,8,9}; //Değişkenleri belirttiğimiz bir dizi tanımlıyoruz.
void setup() {
for(int i=0; i<8; i++) { //For döngüsünün 8 kez tekrarlanmasını istiyoruz.
pinMode(ledler[i], OUTPUT); //i değişkenlerini "çıkış" olarak tanımlıyoruz.
}
}
void loop(){
for(int i=0; i-1; j–) {
digitalWrite(ledler[j], HIGH);
delay(50);
digitalWrite(ledler[j], LOW);
delay(10);
} //Bu kez ters döngü yapıyoruz. Yani dizinin 8.elemanı olan 9 pinine bağlı led yanar, söner ve bu kez bir önceki led yanar. İşlem bu şekilde devam eder.
} //Bu iki döngü sırası birbirinin tersidir. Bu şekilde ledler sırasıyla ileri ve geri yanıp sönerler.
Kodda bir hata oluşmuş, dogrusu bu şekilde. Kusura bakmayın…
int ledler[] = {2,3,4,5,6,7,8,9}; //Değişkenleri belirttiğimiz bir dizi tanımlıyoruz.
void setup() {
for(int i=0; i<8; i++) { //For döngüsünün 8 kez tekrarlanmasını istiyoruz.
pinMode(ledler[i], OUTPUT); // i değişkenlerini "çıkış" olarak tanımlıyoruz.
}
}
void loop() {
for(int i=0; i-1; j–) {
digitalWrite(ledler[j], HIGH);
delay(50);
digitalWrite(ledler[j], LOW);
delay(10);
} //Bu kez ters döngü yapıyoruz. Yani dizinin 8.elemanı olan 9 pinine bağlı led yanar, söner ve bu kez bir önceki led yanar. İşlem bu şekilde devam eder.
} //Bu iki döngü sırası birbirinin tersidir. Bu şekilde ledler sırasıyla ileri ve geri yanıp sönerler.
sisteminizde sorun var doğruluğunu kontrol edip gönderdiğim kodlar eksik ve hatalı olarak cıkıyor. lütfen yorumlarımı silin.
teşekkürler çok yardımcı oldunuz. (int j = 5; i > -1; i–) kodlardaki tek hata burasıdır. i olanları j olarak değiştirirseniz sorunsuz çalışıyor. Çokta büyütecek bir şey yok. Düzeltilebilir.
Merhaba ben 5. Dersi bulamadım da acaba var mı? Ve diğer dersler çok eğitici ve çok eğlenceli
void setup() {
pinMode (2, OUTPUT); //8. Çıkışa bağladığımızı belirtiyoruz
pinMode (3, OUTPUT); //9. Çıkışa bağladığımızı belirtiyoruz
pinMode (4, OUTPUT); //10. Çıkışa bağladığımızı belirtiyoruz
pinMode (5, OUTPUT); //11. Çıkışa bağladığımızı belirtiyoruz
pinMode (6, OUTPUT);
pinMode (7, OUTPUT);
}
void loop() {
digitalWrite (2, HIGH); //8. pinden çıkış yaptığımız led’i yakıyoruz
delay (50); //50ms boyunca yanmasını istiyoruz
digitalWrite (2, LOW); // 8. pinden çıkış aldığımız led’i södürüyoruz
digitalWrite (3, HIGH); //9. pinden çıkış yaptığımız led’i yakıyoruz
delay (50); //50ms boyunca yanmasını istiyoruz
digitalWrite (3, LOW); // 9. pinden çıkış aldığımız led’i södürüyoruz
digitalWrite (4,HIGH); // 10. pinden çıkış aldığımız led’i yakıyoruz
delay (50); //50 ms boyunca yanmasını istiyoruz
digitalWrite (4, LOW); // 10. pinden çıkış aldığımız led’i södürüyoruz
digitalWrite (5, HIGH); // 11. pinden çıkış aldığımız led’i yakıyoruz
delay (50); //50ms boyunca yanmasını istiyoruz
digitalWrite (5, LOW); // 11. pinden çıkış aldığımız led’i södürüyoruz
digitalWrite (6, HIGH); // 11. pinden çıkış aldığımız led’i yakıyoruz
delay (50); //50ms boyunca yanmasını istiyoruz
digitalWrite (6, LOW); // 11. pinden çıkış aldığımız led’i södürüyoruz
digitalWrite (7, HIGH); // 11. pinden çıkış aldığımız led’i yakıyoruz
delay (50); //50ms boyunca yanmasını istiyoruz
digitalWrite (7, LOW); // 11. pinden çıkış aldığımız led’i södürüyoruz
}