İnterrupt
  • Merhaba,
    Arduino uno da interrupt pinleri 2 ve 3 numaralı pinler olarak gösterilmiş.Bu pinlerin biri normal digital diğeri pwm gerçek zamanlı bir iletişimde bu bir fark yaratır mı?
    İnterrupt pinindeki iletişimi yavaşlatma ya da süresini kontrol etme gibi bir durum söz konusu mu?
    Şimdiden teşekkür ediyorum.
  • normal kullanabilirsin fark yok.
  • Teşekkür ederim peki sensörden 2 numaralı interrupt pini üzerinden aldığımız değerin sabit olmasını nasıl sağlarız?(diğer değerler sabitken interrupt pinden alınan değer değişken)
  • ne dediğinizi anlamadım interrupt oluştuğunda attach ettiğiniz prosedur işletilir. siz interrupt kurmadan pini okuyorsanız interrupt tan faydalanmış olmuyorsunuz sadece interrup pinlrini digital olarak kullanmış oluyorsunuz. interrup olarak kurduğunuzda pinin değerini kontrol etmenize gerekyok ya pine gelen sınyal yukselırken veya duşerken tetıklenır işlrmci. interrupt ne deir biraz çalışın derım bir yanlış anlama var sanırım.


  • void setup()
    {

    lcd.begin(16, 2);
    Serial.begin(9600); // GET VALUES USING SERIAL MONITOR



    attachInterrupt(0, RPMCount, RISING); // ADD A HIGH PRIORITY ACTION ( AN INTERRUPT) WHEN THE SENSOR GOES FROM LOW TO HIGH

    REV = 0; // START ALL THE VARIABLES FROM 0

    rpm = 0;

    time = 0;

    pinMode(ledPin, OUTPUT);

    pinMode(3, OUTPUT);

    pinMode(4, OUTPUT);

    digitalWrite(3, HIGH); // VCC PIN FOR SENSOR

    digitalWrite(4, LOW); // GND PIN FOR SENSOR
    lcd.print("TAKOMETRE "); // STARTUP TEXT
    lcd.setCursor(0, 1);
    lcd.print("AR-GE TEKNOLAB"); // THAT'S ME
    delay(2000);
    lcd.clear();
    // delay(2000);

    }

    void loop()
    {
    long currtime = millis(); // GET CURRENT TIME

    long idletime = currtime - prevtime; // CALCULATE IDLE TIME

    if (REV >= 5 ) // IT WILL UPDATE AFETR EVERY 5 READINGS
    {


    if (flag == 0) // CLEAR THE LCD TO AVOID ANY GARBAGE TEXT
    {
    lcd.clear();
    lcd.print("SENSOR MEASURING");
    flag = 1; // AFTER FLAG = 1 , THE LOOP WILL NOT EXECUTE AGAIN
    }

    rpm = 30 * 1000 / (millis() - time) * REV * 2 + 10; // CALCULATE RPM USING REVOLUTIONS AND ELAPSED TIME

    //Serial.print("rpm: ");
    //Serial.println(rpm);
    if (rpm > maxRPM)
    maxRPM = rpm; // GET THE MAX RPM THROUGHOUT THE RUN
    //Serial.print("maxrpm: ");
    //Serial.println(maxRPM);

    time = millis();

    REV = 0;

    int x = rpm; // CALCULATE NUMBER OF DIGITS IN RPM
    while (x != 0)
    {
    x = x / 10;
    RPMlen++;
    // Serial.print("rpm2: ");
    //Serial.println(rpm);
    }



    if (RPMlen != prevRPM) // IF THE RPM FALLS TO A LOWER NUMBER WITH LESS DIGITS , THE LCD WILL GET CLEARED
    { lcd.clear();
    //Serial.print("rpm3: ");
    //Serial.println(rpm);
    prevRPM = RPMlen;
    flag = 0;
    lcd.print("SENSOR MEASURING");
    }
    lcd.clear();
    lcd.setCursor(4, 0);
    lcd.print(rpm, DEC);
    lcd.setCursor(12, 0);
    lcd.print(" RPM ");
    lcd.setCursor(0, 1);
    lcd.print("MAX");
    lcd.setCursor(4, 1);
    lcd.print(maxRPM, DEC); // DISPLAY MAX RPM
    lcd.setCursor(12, 1);
    lcd.print(" RPM ");


    delay(500);

    prevtime = currtime; // RESET IDLETIME

    }

    if (idletime > 5000 ) // IF THERE ARE NO READING FOR 5 SEC , THE SCREEN WILL SHOW MAX RPM
    { //Serial.print("rpm4: ");
    //Serial.println(rpm);

    if (flag == 1) // CLEAR THE LCD
    {
    lcd.clear();
    flag = 0;
    }

    lcd.clear();
    lcd.print("MAXIMUM RPM");
    lcd.setCursor(0, 1);
    lcd.print(maxRPM, DEC); // DISPLAY MAX RPM
    lcd.print(" RPM");
    delay(2000);
    lcd.clear();
    lcd.print("IDLE STATE");
    lcd.setCursor(0, 1);
    lcd.print("READY TO MEASURE");
    delay(2000);
    prevtime = currtime;
    }

    }

    void RPMCount() // EVERYTIME WHEN THE SENSOR GOES FROM LOW TO HIGH , THIS FUNCTION WILL BE INVOKED
    {
    REV++; // INCREASE REVOLUTIONS
    //Serial.print("rpm5: ");
    //Serial.println(rpm);
    if (led == LOW)
    {

    led = HIGH; // TOGGLE STATUS LED
    }

    else
    {
    led = LOW;
    }
    digitalWrite(ledPin, led);
    }
  • Inturruptı burada kurmuş olmuyor muyuz?
    Benim sorun yaşadığım şey bu koddaki takometrenin değerinin değişken olması onu sabitleyebilir miyim,nasıl sabitlerim?
    Haklısınız inturrupta biraz çalışmam gerekiyor.

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.