süre ile işlem yaptırmak
  • merhabalar bir projemde rpm degeri ölçmem gerekiyor bu yuzden projede alacagım degerlerin zamana baglı olarak alınması gerekıyor ancak bunu nasıl yapacagım konusunda fikrim yok. Süre anlamında kullanılan millis() fonksıyonu var ancak o arduınonun çalışma süresini hesaplıyor.Bu projede timer kullanabilir miyim ya da kullanabilirsem nasıl kullanabilirim .Bir fonksiyonu sadece 10 sn boyunca çalıştırmak istiyorum
  • RPM değerini veren cihaz ya obje nedir...
    Eğer döner bir disk ise renk sensöründen optik sensörlere kadar herşeyi kullanabilirsiniz... Size kalmış... Muhtemelen rpm formülünü biliyorsunuzdur...
    Bende şu an aynı dertteyim.. Step motora rpm veriyorum arduinodan ancak kaldığı pozisyonu hesaplatıp ona göre 0 noktasına getiremedim bir türlü :D
  • Hatta lazer sensörde işinizi görür yeterki dönen objede biraz boşluk olsun...
  • millis fonksiyonu yeterli saniye olcmek icin

    unsigned long eski_saniye= 0;
    unsigned long yeni_saniye;
    boolean basla = 0;
    boolean acik = 0;
    boolean bitti= 0;

    void setup() { }

    void loop()
    {
    if(/* saniye tutmayi baslatacak sart */) { basla = 1;}
    if(basla) { eski_saniye = (millis()/1000); basla = 0; acik = 1; }
    if(acik) { yeni_saniye = (millis()/1000); }

    if(yeni_saniye - eski_saniye <= 10 && bitti == 0) // 10 saniye yani<br /> {
    fonksiyon();
    }
    else if(yeni_saniye - eski_saniye > 10)
    {
    eski_saniye = yeni_saniye;
    acik = 0;
    bitti = 1;
    }

    if(/* islemi durduracak sart */) { basla = 0; acik = 0; bitti = 0; }

    }

    void fonksiyon()
    {
    //
    }

    seklinde oluyo galiba
  • // merhaba arkadaslar bu proğramda hiçbir zman döngüden çıkamıyor sebebi ne olabilir ?

    #include < LiquidCrystal.h>
    void rpm_hesabi();
    unsigned long eskiZaman=0;
    unsigned long yeniZaman;
    unsigned long xZaman=0;
    boolean basla = 0;
    boolean acik = 0;
    boolean bitti= 0;

    int enableb=A2;
    int motor1ileri=9;
    int motor1geri=8;
    int referansDegeri = 15;
    int i=0;
    LiquidCrystal lcd(12, 11, 5, 4, 3, 10);

    void setup() {
    // put your setup code here, to run once:
    pinMode(A0,INPUT);

    lcd.begin(16,2);
    Serial.begin(9600);
    pinMode(enableb,OUTPUT);
    pinMode(motor1ileri,OUTPUT);
    pinMode(motor1geri,OUTPUT);
    attachInterrupt (0, rpm_olcme , RISING) ;
    /* veri yollamak icin seri haberlesmeyi 9600 baud rate hizinda baslattik */
    }

    void loop() {
    // put your main code here, to run repeatedly:

    lcd.clear();
    lcd.setCursor(0,0);
    lcd.print(" MERHABA");
    lcd.setCursor(0,1);
    lcd.print(" HOSGELDINIZ");
    delay(2000);
    lcd.clear();
    delay(10);

    analogWrite(enableb,255);
    digitalWrite(motor1ileri,HIGH);
    digitalWrite(motor1geri,LOW);

    lcd.setCursor(0,0);
    lcd.print("DIKKATLI OLUN...");
    lcd.setCursor(0,1);
    lcd.print("MOTOR CALISIYOR.");
    delay(2000);



    }

    void rpm_olcme(){

    Serial.println("BUTONA BASILDI");
    lcd.clear();
    delay(1000);
    lcd.setCursor(0,0);
    lcd.print("OLCUM YAPILIYOR..");
    lcd.setCursor(0,1);
    lcd.print("LUTFEN BEKLEYINIZ..");
    delay(5000);
    rpm_hesabi();
    }

    void rpm_hesabi(){


    Serial.print("eskiZaman=");
    Serial.println(eskiZaman);

    xZaman=millis();
    while(millis()-xZaman <10000){<br /> lcd.clear();
    lcd.setCursor(0,0);
    lcd.print("RPM DEGERI");
    int sensorDegeri = analogRead(A0); /* Sensorden gelen analog deger dijitale cevriliyor */
    //Serial.print("sensorden okunan deger= ");
    //Serial.print(sensorDegeri); /* Sensorden okunan deger ekrana yazdiriliyor. Bu degere gore referansDegeri ayarlanabilir */

    //Serial.print("\t renk= ");
    if(sensorDegeri > referansDegeri){
    /* Sensorden okunan deger referansDegerinden buyuk ise renk siyahtir */
    //Serial.println("beyaz");
    lcd.setCursor(0,1);
    //lcd.print("BEYAZ");
    i=i+1;

    lcd.print(i*20);

    }else{
    /* Sensorden okunan deger referansDegerinden kucuk ise renk beyazdir */
    //Serial.println("siyah");
    lcd.setCursor(0,1);
    //lcd.print("SIYAH");
    }



    //yeniZaman=millis();
    Serial.print("eskiZaman2=");
    Serial.println(eskiZaman);
    Serial.print("yeniZaman2=");
    Serial.println(yeniZaman);
    Serial.print("FARK=");
    Serial.println(yeniZaman-eskiZaman);


    }

    }












  • arkadaşlar üstteki programda rpm_hesabi() fonksiyonunu 5 sn süre ile çalıştırmak ıstıyorum bunu nasıl yapabilirim
  • Size verdigim kodu iyi inceleyin cevap orada
  • Onu da denedim ancak fonksiyonu 1 milisaniyede yapıp çıkıyor

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.