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.