If Koşul Sorunu
  • https://ideone.com/hgkoRx

    Merhabalar;

    Yukarıda vermiş olduğum linkte kodlar yer almaktadır.

    mz801 adlı değişken mz80 ir sensör
    ms1 ve ms2 ler pnomatik sistemlerde kullanılan manyetik sensörlerdir

    mz80 2 adet sayınca sırasıyla yazdığım röle çıkışları işlerini yapıyor fakat ch5 low olduktan sonra ms1==1 olana kadar ch5 in low kalması ms1==1 olduğunda ise high olması aynı şekilde ch6 nın da low olduktan sonra ms2==1 olana kadar ch6 nın low kalması ms2==1 olduğunda ise high olması gerekiyor her 2 side high olduktan sonra devamında yazılan kodları takip etmesini istiyorum fakat ne denediysem beceremedim yardımcı olur musunuz ?

    Sensörler 1 çıkışını veriyor tek başına if(digitalRead(ms1)==1){digitalWrite(ch1,LOW)} else {digitalWrite(ch1,HIGH)} yazdığımda çalışıyor.

    While döngüsü kullanmayı da denedim olmadı. İf şartının altına else yazdım yine olmadı.
  • if sadece koşulu o an için kontrol edip geçer, while kullanmanız gerekiyor.

    while(digitalRead(ms1) == LOW);
    digitalWrite(ch5,HIGH);
  • Malesef while ile denedim yine olmadı. Teşekkür ederim cevabınız için.
  • Muhtemelen yanlış yazdınız çünkü olmaması için bir sebep yok. while'ın sonunda ; (noktalı virgül) olacak.

    digitalWrite(ch5,LOW);
    digitalWrite(ch6,LOW);

    while(digitalRead(ms1) == LOW); // 1 olana kadar bekle
    digitalWrite(ch5, HIGH);

    while(digitalRead(ms2) == LOW); // 1 olana kadar bekle
    digitalWrite(ch6, HIGH);
  • Evet oldu fakat ms2 sensörü ms1 den önce görünce ch6 high olmuyor. Yani bu sıranın tam tersi de geçerli olması lazım.

    Böyle denedim:

    digitalWrite(ch5,LOW);
    digitalWrite(ch6,LOW);
    while(digitalRead(ms1)==0 && digitalRead(ms2)==0);
    digitalWrite(ch5,HIGH);
    digitalWrite(ch6,HIGH);

    Bu seferde hangisi görürse görsün high oluyorlar.

    Çok yardımcı oldunuz teşekkürler.
  • Tamam şöyle yapalım.

    byte oku_ms1 = 0, oku_ms2 = 0;

    while(!oku_ms1 || !oku_ms2) {
    if(oku_ms1 == 0) {
    oku_ms1 = digitalRead(ms1);
    digitalWrite(ch5, oku_ms1);
    }
    if(oku_ms2 == 0) {
    oku_ms2 = digitalRead(ms2);
    digitalWrite(ch6, oku_ms2);
    }
    }
  • Sayın @amenofis ilginiz için teşekkürler.

    Son yazdıklarınızı henüz deneyemedim deneyince hemen bilgi vereceğim.

    Artı olarak evdeki denemelerimde mz80 sensör düzgün çalışıyordu fakat makina üstünde programı attıktan sonra olması gerektiği gibi 2 sayıyor fakat sonra ki döngülerde 1 sayınca döngü başlıyor.

    int sayac=1; ve sayac==3 yapıp çözebilirim diye düşünüyorum.

  • Röle kartını ayrı 5v ile besliyorum ama yine de sensörü bozuyor olabilir röleler ile arduino yu birbirinden uzaklaştırmayı da deneyeceğim.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook
Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.