Box Makinesi Sensör Ölçüm Sorunu Yardım Lütfen !
  • arkadaşlar box makinesi ile ugraşıyorum şöle bi sorunum var elimde bir sensör var

    f2 ve f1 olarak geçiyor

    top aşagı inerken önce f2 den sonra f1 den geçiyor dogal olarak ne deger aldırmak istesem top inerken sensörden geçtigi için degeri alıyor zaten

    temel amacım f1 den geçtigi andan sonra f2 den geçtigi an arasındaki farkı bulmak

    micros() ve millis() denedim millis de cogu zaman aynı milisaniyede geçtigi için fark bulamıyor micros dada saçma sapan rakamlara ulaşmış oluyorum

    en son boyle bişey denedim



    if (digitalRead(f1) == LOW)
    {

    f1say=0;
    say=1;
    delay(20);

    while(say==1)
    {
    f1say=f1say+1;
    delay(1);

    if (digitalRead(f2) == LOW)
    {

    say=0;
    Serial.print("f2say ");
    Serial.println(f1say);
    f1say=0;
    delay(2000);
    break;


    }

    }


    }



    ama burdada saçma sapan rakamlar geliyor elime ve bazen top inerkende veriyor sinyali !

    şimdi benim f1 ile f2 arasındaki farkı almam lazım ama sorun şuki top inerken f2 - f1 e basıp iniyor siz vurdugunuzda çıkarkende f1 - f2 basıp çıkıyor bana f1 ile f2 arasında basdıgındaki fark lazım yardımcı olabilirseniz sevinirim.

    he bide bu fark ile kg vs ölçebilirsek süper ötesi olur ! bilgisayar başında yardım bekliyorum yardımcı olan kardeşlerime çok teşekkür ederim şimdiden
  • sorunum günceldir box makinesindeki hız ve kilogramı hesaplamak istiyorum varmı bilen ?
  • Merhaba,
    öncelikle delay fonsiyonunu bir unut.
    Çünkü burada zaten saniye ölçmmeye çalışıyorsun.
    İZlemen gereken yol sıralamaya dikkat etmiyorsun.

    Şunu kontrol etmen gerek eğer f1 den geldi ise f2 ye bak ( tam terside olabilir sıralamanı bilmiyorum )

    while içerinde

    birbirinden bağımsız 2 tane if kontrolün var.
    bunlar kafasına göre ( birbiri ile alakasız )çalışıyor bunlara kontroller koymalısın.

    örneğin

    if (digitalRead(f1) == LOW)
    {
    f1sinyalgeldibit=1;

    }

    if (digitalRead(f2) == LOW && f1sinyalgeldibit==1) //hem f2 ye bakacak hemde f1den gelen kontrol sinyaline bakacak
    {

    }

    gibi gibi
  • peki saniyelere ne atamalıyım ?

    if (digitalRead(f1) == LOW)
    {
    if(f1say!=0)
    {
    f1say=millis();
    }
    }
    if (digitalRead(f2) == LOW)
    {
    if (f1say!=0)
    f2say=millis();
    int toplam;
    toplam=f2say-f1say;
    Serial.println(toplam);
    f1say=0;
    }
    }



    sanırım bole bişi demek istedin ama buda sorunumu çözmüyor
  • birde void looptan önce
    int f1say=1;
    int f2say=0;
    int say=1;


    boyle tanımladım fakat aşagıda bunları goremiyorum sanırım public hale getiremedim bunu nasıl çözebilirim tüm fonksiyonlarda kullanmak istiyoum ben bunları setup ın altına direk bunları tanımladım
  • Bakşimdi,

    burdaki mevzu şu değilmi.
    İki adet sensörün var ve hareketli bir cisim var. Cisim hareket ettiğinde önce 1. sensörden geçecek, daha sonra 2 ci sensörden geçecek sende arasındaki saniye farkını hesaplayıp birşeyler bulacaksın ?
  • aynen

    int jetonat=13;
    int oyuncudegistir=3;
    int yesilled=4;
    int kirmiziled=5;
    int f2=10;
    int f1=9;
    int topiniyor=2;


    void setup() {
    Serial.begin(9600);
    pinMode(jetonat, INPUT);
    pinMode(oyuncudegistir, INPUT);
    pinMode(kirmiziled,OUTPUT);
    pinMode(yesilled,OUTPUT);
    pinMode(topiniyor,OUTPUT);

    digitalWrite(yesilled,HIGH);
    digitalWrite(topiniyor,HIGH);



    }

    int f1say=1;
    unsigned long f2say=0;
    int say=1;

    void loop()
    {

    int m=Serial.read();

    if(m=='1')
    {
    digitalWrite(5,HIGH);
    digitalWrite(4,LOW);

    }

    if(m=='2')
    {
    digitalWrite(5,LOW);
    digitalWrite(4,HIGH);

    }

    if(m=='3')
    {
    digitalWrite(2,LOW);
    delay(400);
    digitalWrite(2,HIGH);

    }

    if (digitalRead(jetonat) == HIGH)
    {
    String stringOne = "j";
    Serial.println(stringOne);
    delay(200);


    }



    if (digitalRead(f1) == LOW)
    {

    f1say=0;
    say=1;
    delay(20);

    while(say==1)
    {
    f1say=f1say+1;
    delay(1);

    if (digitalRead(f2) == LOW)
    {

    say=0;
    Serial.print("f2say ");
    Serial.println(f1say);
    f1say=0;
    delay(2000);
    break;


    }

    }


    }

    if (digitalRead(oyuncudegistir) == HIGH)
    {


    }
    }




    kodum bu şimdi f1 den geçtikten sonra f2 den geçicek bende o aradaki farkı hesaplıycam ama ne kadar ince hesaplarsam o kadar iyi
  • bak şimdi,

    programındaki bütün delayları sil ( BÜTÜN DELAYLAR)
    1 tane bile delay olursa sağlıklı çalışmaz.

    Daha sonra Serial.print komutlarını sil bunlar mS cinsinden zaman alan fonksiyonlar yani sen mikrosaniyeleri ölçmeye çalışıyorsun ama araya milisaniye ( mikronun 1000 katı büyük ) sayan komutlar koyuyosun.

    jeton filan oralara girmiycem.
    ana döngüde bir;



    long sayici=0,ikincideger=0,ilkdeger=0,fark=0;
    int f1kontrol=1,f2kontrol=1,f1aktif=0;


    sayici= micros(); //bir değişkene mikro saniye cinsindne sayıcı başlat bu sürekli saysın dursun

    if (digitalRead(f1) == LOW)
    {
    if(f1kontrol)
    {
    f1kontrol=0;
    f1aktif=1;
    ilkdeger=sayici;
    }
    }
    else f1kontrol=1;

    if (digitalRead(f2) == LOW && f1aktif==1 )
    {
    if(f2kontrol)
    {
    f2kontrol=0;
    ikincideger=sayici;
    fark=ikincideger-ilkdeger;
    f1aktif=0;
    Serial.print("saniye = ");
    Serial.println( fark );
    }
    }
    else f2kontrol=1;


    gerekli değişkenleri tanımlayarak kontrol bölgesine yukarıdaki kodu bi yaz bakalım ne olacak.



  • micros hesabını double mi alayım yoksa int mi üstadım ?

    bu yazdıgın kodda kafamda bişeyler oluştu teşekkür ederim makinenin yanına gittigimde canlı olarak deneyip sana bilgi vermek isterim farazi konuşmak istemem ama sanırım bu dedigin sistem ile olabilir
  • int jetonat=13;
    int oyuncudegistir=3;
    int yesilled=4;
    int kirmiziled=5;
    int f2=10;
    int f1=9;
    int topiniyor=2;


    void setup() {
    Serial.begin(9600);
    pinMode(jetonat, INPUT);
    pinMode(oyuncudegistir, INPUT);
    pinMode(kirmiziled,OUTPUT);
    pinMode(yesilled,OUTPUT);
    pinMode(topiniyor,OUTPUT);

    digitalWrite(yesilled,HIGH);
    digitalWrite(topiniyor,HIGH);



    }

    long f1say=0;
    long f2say=0;
    int say=1;

    void loop()
    {

    int m=Serial.read();

    if(m=='1')
    {
    digitalWrite(5,HIGH);
    digitalWrite(4,LOW);

    }

    if(m=='2')
    {
    digitalWrite(5,LOW);
    digitalWrite(4,HIGH);

    }

    if(m=='3')
    {
    digitalWrite(2,LOW);
    delay(400);
    digitalWrite(2,HIGH);

    }

    if (digitalRead(jetonat) == HIGH)
    {
    String stringOne = "j";
    Serial.println(stringOne);
    delay(200);


    }



    if (digitalRead(f1) == LOW)
    {

    f1say=micros();

    }

    if (digitalRead(f2) == LOW)
    {
    if(f1say!=0)
    {
    f2say=micros();
    long toplam;
    toplam=f2say-f1say;
    Serial.print("f2say ");
    Serial.println(f1say);
    f1say=0;
    }
    }

    if (digitalRead(oyuncudegistir) == HIGH)
    {


    }
    }




    üstadım sanırım solemek istedigin bu ?
    dogrumu anladım ?

    ama burda tek takıldıgım şu diyelimki top inerken f2 den geçti saymıyacak cünki f1=0
    ama inerken f1 dende geçti degeri aldı !

    sonra topa vurdun f1 den geçti tekrar deger aldı ki f1 den geçerken 1 den fazla deger aldı yani bi 10 kere falan degeri aldı sonra aradaki boşluktan geçdi f1 degeri 0 olmadıgı için f2 say ı yazdı ve f1 i sıfırladı artık top inerken f2 yi yazmıyacak dogrumudur ? cünki 0 ladık tek sıkıntı şu kalıyor f1 degerini orda 1 den fazla aldıracak yani f1 e basdıgı ilk anı degilde son anı alacak

    diyelimki oraya f1=0 degilse yap dedim yani f1 degerinden geçerken f1 yoksa micros u eşitle dedim ama top inerken f1 den geçdigi için adam vurdugunda f1 i almaz burda bir sıkıntı kaldı sanırım üstad yanlışmıyım ?
  • Şimdi servisteyim eve gidiyorum telefondan yazmak zor sen az kafa yor hallederiz merak etme :)
    Bikaç jeton hediye edersin artık :)
  • ahahah tabikide :)

    şimdi üstad

    double olarak bunun aynısını aldırdıgımı hatırlıyorum fakat gene saçma sapan - li degerler çıkmıştı

    long dada aynısı olabilirmi ? bu eger olmassa sanırım bu dogru degeri alacaktır. tahminim bu tabi net bişey söyliyemem ! denemeden tabikide

Howdy, Stranger!

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

Login with Facebook

Tagged

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