Arduino-FOR Döngüsü
Your ads will be inserted here by
Easy Plugin for AdSense.
Please go to the plugin admin page to
Paste your ad code OR
Suppress this ad slot.
Arduino da Kontrol Komutları
FOR Komutu Ve Kullanımı
FOR, en basit anlamda belirli komut/komutların istenen sayıda tekrar ettirilmesini sağlar. Bunun için öncelikle başlangıç değeri belirlenir. Ardından limit olarak bitiş sayısı veya bitiş koşulu belirlenir. Son olarak ise başlangıç değerinden itibaren sayının kaçar kaçar artacağı belirlenir. Örneğin 0’dan başlayarak 10’a kadar tekrar etmesini istediğimiz bir döngü oluşturacağımız zaman komut satırı şu şekilde yazılır;
Kullanım Formatı:
for(başlangıç değeri; koşul; artış miktarı)
{
Tekrar etmesi istenilen komut/komutlar;
Your ads will be inserted here by
Easy Plugin for AdSense.
Please go to the plugin admin page to
Paste your ad code OR
Suppress this ad slot.
}
Örnek :
İnt a;
for(a=0; a<10;a=a+1){
digitalWrite(led,HIGH);
delay(1000);
digitalWrite(led,LOW);
delay(1000);
}
Açıklama:
- Öncelikle a adında değişken belirlenir. Ve for komutu içerisinde başlangıç değeri olarak a=0 yazılarak 0 değeri atanır.
- Daha sonra bitiş sayısını belirlemek için koşul ifadesi belirlenir. Burada a<10 yazılarak a sayısı 10 sayısından küçük olduğu sürece program çalıştırılır. Yani koşul olarak belirtilen ifade doğru olduğu sürece döngü tekrar eder.
- Son olarakta artış miktarı belirlenir. a=a+1 ifadesi a değişkenine her çevrimde bir arttırılmasını sağlayacaktır. Bu değer a=a+2 olsaydı her çevrimde değer 2 artacaktı ve 10 sayısına beş çevrimde ulaşılacaktı.
- For komutunun sonunda “{“ açılır ve kapatılır “}”. Bu parantezler arasına tekrar etmesi istenilen komutlar yazılır.
Cok aciklayici bi yazi olmus tesekkurler
Ufak bi düzeltme: Bu döngü “for(a=0; a<=10;a=a+1)" 10 defa değil, 11 defa tekrar ettirir.
Evet haklısınız. Gözden kaçırmışız. Teşekkürler
Merhaba, sensöre ses gelince, servoyu hareket ettiren bir kod yazmaya çalıştım. Servo da for döngüsü kullandım fakat if else komutunu kullanmaya kalktığımda hata alıyorum.
Merhaba.
Kodları paylaşırsanız yardımcı olmaya çalışalım
merhaba
ben dijital giriş olarak belirli bir pine 3 defa sinyal gelince bir role çektirip bırakmak istiyorum. döngünün tekrarlanması gerekiyor. ancak tekrardan 3 defa plus gelecek ve 3. plustan sonra role tekrar çekip bırakacak. ve yine başlıyacak.
İnt a;
int role = 5;
int sinyal = 6;
void setup ()
{
pinmode(role , OUTPUT) //roleye baglı
pinmode(sinyal , INPUT) // giriş plus dısarıdan gelen sinyal
}
void loop ()
{
for(a=0; a<3;a=a+1)
ıf digitalRead ==a;
{
digitalWrite(role,HIGH);
delay(1000);
digitalWrite(role,LOW);
delay(500); //bu low dan sonra tekrardan 3. defa pus gelince çekecek ve bırakacak
}
kodlama dogrumu parantezler , ben baslayılı 2 hafta oldu yardımcı olusanız sevınırım
a = 0;
loop(){
if(digitalRead(6) == HIGH) a = a + 1; // 6. pine sinyal geldiğinde a değişkenini +1 yapacak.
while(digitalRead(6) == HIGH); // 6. pin HIGH olduğu sürece sonsuz döngüde kalacak bu satırla
if(a == 3) {
digitalWrite(role, HIGH);
delay(1000); //süreyi değiştirebilirsin!
digitalWrite(role,LOW);
a = 0;
}
}
Merhaba cevap için teşekkürler. INT ve setup kısmı doğru galiba sadece a nın ilk değeri 0 rı ilave edicem setup anlaşılan. yazılarınızı okudukça mantını iyice anlıyorum teşekkürler.
akşama yazıcam kodu
for döngüsü ile yazdığım program gayet güzel çalışırken bugün for döngüsü hata veriyor.sebebi ne olabilir.takıldık kaldık.teşekkürler.
Yazmış olduğunuz kodunuzu paylaşırsanız yardımcı olmaya çalışırım
Merhaba Mehmet bey,
Dht22 kullanarak şöyle bir kod kullanıyorum;
if(sıcaklık < 25){
digitalWrite(role1, HIGH)
else
digitalWrite(role1, LOW)
}
Birincisi bu komut roleyi çok yoruyor, 25-26 25-24 sıcaklık geçişlerinde. Roleyi for döngüsü ile 25ten 28 dereceye çıkana kadar açık tutabilir miyim?
İkinci sorumda nem rolemi 60sn açık tutup 10sn kapalı durduktan sonra nem sensöründen aldığı veriye göre nem istenilenden düşükse tekrar açıp 60sn çalışığ 10sn nasıl bekletebilirim.
İlginiz için şimdiden teşekkür ederim kolay gelsin 🙏
merhabalar.
25 dereceden 28 dereceye kadar for kullanmadan da roleyi açık tutabilirsiniz.
if koşulu içerisine 25 ten büyük ve 28 den küçük ise roleyi HIGH yap diyebilirsiniz. bunun i.in IF komutunun anlatıldığı konuya bakabilirsiniz.
ikinci soruda da, 60 saniye açık tutabilirsiniz gecikme komutu kullanarak. roleyi HIGH yaptıktan sonra gecikme eleyebilirsiniz. aynı şekilde LOW yaptığınız yere de 10 sn gecikme ekleyebilirsiniz. yine bunun için de gecikme komutlarına bakabilirsiniz.
Dudigan bey bir konuda takildom bana yardımcı olabilir misiniz?
Mehmet bey, artış miktarının 100 azalmasını istiyorum. Acil cevabınıza ihtiyacım var. for(int i=2000;i<10;i=i-100) bu kullanım doğru mudur ?
evet bu şekilde kullanabilirsiniz
merhabalar hc-05 bluetooth modulumle belli komut verildiğinde çalışan bir step motor yapmak istiyorum ve sadece 2 adım atmasını istiyorum ama benim step motorum sürekli olarak adım atmaya devam ediyor seri porttan komut gönderince istediğim gibi çalışıyor fakat bt modulunden komut gönderince sürekli devam ediyor sebebi ne olabilir yardımcı olurmusunuz saattlerdir uğraşayorum fakat düzeltemiyorum. benim yazdığım kodlar burda hata nerde acaba?lütfen yardımcı olun.
#include
int a;
int veri;
static const int STEPS_PER_REVOLUTION = 64 * 32;
X113647Stepper myStepper(STEPS_PER_REVOLUTION, 2, 3, 4, 5);
void setup() {
Serial.begin(9600);
myStepper.setSpeed(1000);
}
void loop() {
if(Serial.available()){
veri = Serial.read();
}
if(veri == ‘k’){
for(a=0; a<1;a=a+1){
myStepper.step(STEPS_PER_REVOLUTION);
}
}
if(veri == 'l'){
for(a=0; a<1;a=a+1){
myStepper.step(STEPS_PER_REVOLUTION);
}
}
}