devir ölcümü sıfırlama sorunu
  • mrb lar
    arduino da düşük devir ölçmek icin bi kod kullanıyorum
    daha doğrusu kodu hazır buldum tam işimi görüyor fakat
    sensör okumayı kestiğinde yani devir durduğunda son kaldığı değeri vermeye devam ediyor.

    sıfırlama yapan kodlarda var ancak onlar 30 ar sayıyo o da benim işimi görmüyor
    benim maksimum alacağım devir 150-160 gibi yani 1 artış azalış benim icin önemli ne yaptıysam sıfırlamayı beceremedim
    ilgilenen olursa cok memnun olurum şimdiden tşkrlr.. kod aşağıdaki gibi

    #include < LiquidCrystal.h>

    LiquidCrystal lcd(12,11,5,4,3,2); //defining lcd pins

    const int dataIN = 7; //IR sensor INPUT

    unsigned long prevmillis; // To store time
    unsigned long duration; // To store time difference
    unsigned long lcdrefresh; // To store time for lcd to refresh

    int rpm; // RPM value

    boolean currentstate; // Current state of IR input scan
    boolean prevstate; // State of IR sensor in previous scan

    void setup()
    {
    pinMode(dataIN,INPUT);
    lcd.begin(16,2);
    Serial.begin(9600);
    prevmillis = 0;
    prevstate = LOW;
    }

    void loop()
    {
    // RPM Measurement
    currentstate = digitalRead(dataIN); // Read IR sensor state
    if( prevstate != currentstate) // If there is change in input
    {
    if( currentstate == HIGH ) // If input only changes from LOW to HIGH
    {
    duration = ( micros() - prevmillis ); // Time difference between revolution in microsecond
    rpm = (60000000/duration); // rpm = (1/ time millis)*1000*1000*60;
    prevmillis = micros(); // store time for nect revolution calculation
    }
    }
    prevstate = currentstate;
    // store this scan (prev scan) data for next scan

    // LCD Display
    if( ( millis()-lcdrefresh ) >= 100 )
    {
    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(" ROTARY DEVIR");
    lcd.setCursor(0,1);
    lcd.print(" RPM : ");
    lcd.print(rpm);
    lcdrefresh = millis();
    Serial.println(rpm);
    }

    }
    void prev()
    {
    rpm++;
    }



    ve birde ilk acılışta 4246 değeri veriyo
  • if( ( millis()-lcdrefresh ) >= 100 )

    fonksiyonu sayesinde sen her 100ms de bir ekranı yenilediğin için, devirin değişsede ekranda göstermiyorsun.
    Bu fonksiyon içerisindekileri direkt olarak loop un içerisine al. her okudugunu ekrana yazsın o zaman atlamaz 30 30,
  • Yanlış anlattım galiba bu kod 1er 1er sayıyor hiç bi sıkıntı yok sadece devir yoksa sıfıra dönmüyo tek sıkıntı bu..
  • digitalden okudğun 0 ise rpm değerni sıfırla
  • Öyle yapıncada 1 den yukarı cıkmıyor sadece 1 ve 0 oluyor

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.