2 sensör algoritma yardım

Başlatan hkn_blt, 15 Ocak 2021, 13:56:06

hkn_blt

Merhaba arduino digital pinlerine bağlı 2 adet sensörüm var. Yapmak istediğim sensor1 on oldu ve tekrar off konumuna geçti yani önünden anlık birşey geçti. daha sonra o geçen cisim 2.sensorden geçince sayac 1 artacak....
Tam tersi durumda (önce sensor2 den sonra sensor1 den geçincede sayac 1 eksilecek)
if(sensor1) temp=true; //sensor on dan off konuma geçsede temp de ilk on durumu tutuldu
if(temp and sensor2){
 sayac++;
 temp1=0; //sensor buffer temizlendi
if(sensor2) temp2=true; // sensor on dan off konuma geçsede temp de ilk on durumu tutuldu
if(temp2 and sensor1) {
sayac--;
temp2=0;
}

bu şekilde kod yazınca şu durum oluşuyor ilk etapda sensor 1 den geçirdik elimizi daha sonra sensor2 den geçirdik sayac artıyor. Fakat tekrar sensor1 den geçirince sayac eksiliyor.Bu dediğim olayı kodla nasıl çözebiliriz. benim yazdığım şekilde sayac ya 1 ya 0  yada -1 ya 0 oluyor.

yas

normal çünkü temp true yapıp temp1 siliyorsun.

hkn_blt

Alıntı yapılan: yas - 15 Ocak 2021, 14:08:12normal çünkü temp true yapıp temp1 siliyorsun.
Nasıl yapmam gerekli öneriniz var mı?

hkn_blt

Temp1 temizlemesem bu sefer sensor1 görmeden sensor2 görsede artacak sayac

aliveli

//sensörler gördüğünde 1
//görmediğinde 0 veriyor kabul edilirse
if(sensor1){
	while(!sensor2){}
	sayac++;
}
if(sensor2){
	while(!sensor1){}
	sayac--;
}

hkn_blt

Alıntı yapılan: aliveli - 15 Ocak 2021, 14:45:54
//sensörler gördüğünde 1
//görmediğinde 0 veriyor kabul edilirse
if(sensor1){
	while(!sensor2){}
	sayac++;
}
if(sensor2){
	while(!sensor1){}
	sayac--;
}

tam tersi çalılıyor sensörler gördüğünde 0 vveriyor

hkn_blt

Bir de sizin yazdığınızda if(sensor1) dedikden sonra alttaki döngüye giriyor. Fakat benim sensor1 sinyali sürekli yok. sensorler 1 sefer on oluyor

argelojik

#7
Denemek lazım...

if(!sensor1){
   if(temp){
              sayac--;
             temp=0;
         }else
        {
          temp++;
        }
}
if(!sensor2){
   if(temp){
              sayac++;
             temp=0;
         }else
        {
          temp++;
        }
}

hkn_blt

Alıntı yapılan: argelojik - 15 Ocak 2021, 15:10:43if(sensor1){
   temp++;
}
if(sensor2){
   if(temp)
sayac++;
}
Temp sıfırlanmazsa birdaki denemede direl sensor2 görünce sayacak bu seferde.

argelojik

Mesaj yanlışlıkla gitti. Sonra tamamlayıp yeniden kodu yazdım. Bir kontrol edin lütfen

argelojik

#10
Alıntı yapılan: hkn_blt - 15 Ocak 2021, 15:14:22Temp sıfırlanmazsa birdaki denemede direl sensor2 görünce sayacak bu seferde.

Denemek lazım...

if(!sensor1){
  if(temp){
              sayac--;
            temp=0;
        }else
        {
          temp++;
        }
}
if(!sensor2){
  if(temp){
              sayac++;
            temp=0;
        }else
        {
          temp++;
        }
}

kudretuzuner

#11
.
Amatör

Murat Mert

Enkoder mantığını kullanmak istiyorsunuz. Enkoder çalışma ve program mantığını bir inceleyin.
mert07

forsa1975

Sorunlardan biri; sensör 1 gördükten sonra cismin aynı doğrultuda devam edip sensör 2 den çıkıp gitmesi gerekiyor. (Soldan sağa varsayıyorum)
oldu ki  sensör 1 gördü , cisim banttan düştü yada bir şekilde geri gitti, akabinde sağdan  başka bir cisim sensör 2 den giriş yaptı. Burada sağdan sola giden cisim hanesine +1 yazılır ki hatadır.  Bunları engellemek için sensörlerin bir birine olan yakınlığı cismin boyundan kısa olursa problemlerden biri çözülmüş olabilir. sensör1 soladn geldi, sensör1 ve sensör2 cisim ortada  ve son olarak sadece sensör2 gördüğünde çıkış yapıyor ve düşen kenarında soldan gelenler hanesine +1
Ayrıca cisimlerin geliş sıklığı düzeni olmalı. sağdan sola geçen işlem bitmeden bir tanede soldan sağa geçiş olursa yine karmaşa. burada programdan ziyade işleyişin düzenli olması sağlanmalı. Bunlar olmuyorsa görüntü işleme  çözüm olabilir.


hkn_blt

Sensor1 = digitalRead(mz801);
  Sensor2 = digitalRead(mz802);
 //********************************************
   
   if(Sensor1==0 and !temp2) temp1=true;
   if(temp1 and Sensor2==0){
    delay(100);
    kbki(); //sayac artırma
    temp1=false;
   }
    
    
   
      
//*********************************************
 if(Sensor2==0 and !temp1) temp2=true;
   if(temp2 and Sensor1==0){
    delay(100);
    kikb(); //sayac eksiltme
    temp2=false;
   }
   

bu şekilde zaman koyarak olcak gibi. PLC de denedim oluyor arduinoda denemedim :)