Arduino ile Timer Kullanımı
|
Merhabalar..
Bu konuda Arduino ile timer kullanımına değineceğiz. Bu konu ile ilgili pek fazla türkçe kaynak bulunmamakta. Var olanların çoğu da bir kütüphane yardımı ile anlatılmış. Biz ise timer registerler’ i üzerinden işlem yapacağoz. İlk öncelikle timer neden önemli ona bir bakalım.
Arduino’ da nesne tabanlı programlama işlemlerinde olduğu gibi ‘thread’ mantığı ile paralel işlem yapma şansınız yoktur. Bunun yerine size arduino’ nun donanımsal olarak size verdiği timer’ ları kullanmanız gerekir. Bu timer’ ların sayısı kullandığınız Arduino çeşidine göre değişiklik göstermektedir. Örneğin Uno’ da 2 tane varken Mega’ da bu sayı 5′ e kadar çıkmaktadır. Peki ya bu paralel işlemden kastımız ne olabilir?
Örneğin bir led’ in bizim programımızdan bağımsız bir şekilde 1 sn’ süre ile yanıp sönmesini isteyelim. Bunun için Arduino’ yu her sn başında ‘delay’ fonsiyonu ile bekletmek pek de işe yaramayacaktır. Bu nokta devreye timer’ lar girecek. Arduino donanımın bize verdiği timer’ ın her 1 sn’ de bir kesme oluşturmasını ve kesmenin’ de ilgili fonksiyonu çağırması sağlanır. Böylece program gereksiz bekleme yada sorgu işlemleri yapmamış olur.
—
Timer’ lar counter register denen bir register’ e sahiptir. Bu register’ ın görevi timer’ ın sayacı olarak çalıştırılmasıdır. Timer her adımda maksimum değere ulaşıncaya sayacı arttırır. Sayaç maksimum değere ulaştığında sıfırlanır ve interrupts tetiklendiğinde çağrılan fonksiyon ISR(Interrupt Service Rutin) çalıştırılır.
Örneğin 8 bitlik Timer0 sayacını kullanıyor olalım. Bu sayaç 00000000 ‘den başlayıp 11111111 oluncaya kadar sayacaktır. Ve sayma işlemi bittiğinde ISR(TIMER0_COMPA_vect) isimli fonksiyonu çağıracaktır. Ancak bu sayma işleminin hızı için elbet bazı ayarlar gerekecektir.
Timer’ ın çalışması için osilatör’ de bir prescalar ayarı denilen bir ayar bulunmaktadır. Bu ayar bizim kristalimizin çalışma frekansında düşürmek için kullanılır. Arduino osilatörü 16Mhz’ de çalışır. Biz 64 prescaler ile kullanmak istersek 16*10^6 / 64 yani 250Kz anlamına gelir. Şimdi prescaler ayarına gelelim
Interreupt’ un tetiklenme süresi Hz cinsinden prescalar ile çarpım olarak denkleme eklenmelidir. Sonuç olarak denklemimiz bu şekilde çıkacaktır:
Burada prescaler oranı 2′ nin kuvveti şeklinde belirlenir. Bu değer 1 ile 1024 arasında değişebilir. Bu oranın kullanılmasının sebebi timer’ ın taşma noktasıdır. Sayaç en üst noktaya ulaştığında taşma biti setlenecektir ve interrupt ın çağırdığı fonksiyon devreye girecektir. Prescaler de bu taşma noktasını temsil eden sayıyı timer0 ve timer3 için 16 bit, timer2 ikin 8 bitlik ifadede saklanmasını sağlamamıza yarar.
Ancak prescalar oranını denklemde yerine yazmak yeterli değildir. İstediğimiz oran timer’ın ilgili registerlerine yazılmalıdır. Bu noktada tabloadan yardım alabiliriz.
1 |
TCCR1B |= (1 << CS12) | (1 << CS10); // Bu satırda timer1' i 1024 prescaler ile setlemiş olduk. |
Bu ifadenin genel kullanımı şu şekildedir:
1 |
TCCRxB |= (1 << CSx2) | (1 << CSx0) |
Ayarlama işleminin can alıcı kısmı burada bitiyor. Burdan sonra registerlerin sıfırlanma işlemine değineceğiz.
Timer’ ları kurmaya başlamadan önce tüm interrupt ları durdurmak gerekir. Bu işlemi basit bir fonksiyon ile gerçekleştirmek mümkün.
1 |
cli(); //interruptlar durduruluyor |
Şimdi tüm kullanacağımız timer’ ın registerlerini sıfırlayalım.
1 2 3 |
TCCR0A = 0;// TCCR0A register 0'lanıyor TCCR0B = 0;// TCCR0B register 0'lanıyor TCNT0 = 0;// sayac değeri 0'la |
Daha sonra prescaler ve ve CTC(Clear Timer on Compare) modu için ayarlanır.
1 2 3 4 5 6 7 |
OCRxA = 124;// = (16*10^6) / (2000*64) - 1 (değer 256 dan küçük) // CTC mod açılıyor. TCCRxA |= (1 << WGMx1); // CS01 ve CS00 bitleri 64 prescaler için ayarlanıyor TCCRxB |= (1 << CSx1) | (1 << CSx0); // timer karşılaştırma interruptı aktifleştiriliyor TIMSKx |= (1 << OCIExA); |
Bu işlemleri kullanacağımız her timer için yapmamız gerekir. “OCRxA” komutunda bulunan değer üstte bahsettiğimiz formülden elde edilen değerdir. Burada girdiğimiz frekans değeri ve prescaler oranına göre timer kesme oluşturur.
En sonda interrupt’ ları tekrar aktif etmek gerekir. Bunun için de bu fonksyon kullanılır.
1 |
sei();//interruptlar aktifleştiriliyor |
Timer taşma noktasına oluştığunda yapacağımız işlemleri bu fonksiyon içersinde belirleriz. Ancak normal bir interrupt içerisinde çalışmayan fonksiyonlar burada da çalışmayacaktır. Örnek olarak delay yada Serial.available verilebilir.
1 |
ISR(TIMERx_COMPA_vect) //timer interrupt' ı ayarlanan frekans da tetikleniyor. |
Bununla ilgili basit bir uygulama örneği verelim. Uygulamamızda 2 led’ den bir tanesi 1 sn aralıklara diğeri ise 2 sn aralıklara yanıp sönsün:
Aşağıdaki örnek Arduino Mega için yazılmıştır. Timer 3 içermeyen Arduino modellerinde çalışmayacaktır.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
#define LED 5 #define LED2 6 bool durum0 = false, durum1 = false; void setup() { pinMode(LED, OUTPUT); pinMode(LED2, OUTPUT); cli(); //interreptlar durduruluyor Serial.begin(9600); //-------------------------- //timer1 1Hz' e ayarlanıyor //registerler sıfırlanır TCCR1A = 0;// TCCR1A register 0'lanıyor TCCR1B = 0;// TCCR1B register 0'lanıyor TCNT1 = 0;//sayac değeri 0'la // OCRxA karşılaştırma registeri 1Hz değer için ayarlanıyor //16 MHz osilatör,1Hz timer1 ın çalışma frekansı,1024 prescalar OCR1A = 15624;// = (16*10^6) / (1*1024) - 1 (değer 65536 dan küçük) // CTC mod açılıyor. TCCR1B |= (1 << WGM12); // CS10 ve CS12 bitleri 1024 prescaler için ayarlanıyor TCCR1B |= (1 << CS12) | (1 << CS10); // timer karşılaştırma interruptı aktifleştiriliyor TIMSK1 |= (1 << OCIE1A); //------------------------ //timer3 0.5 Hz' eayarlanıyor TCCR3A = 0;// TCCR3A register 0'lanıyor TCCR3B = 0;// TCCR3B register 0'lanıyor TCNT3 = 0;//sayac değeri 0'la // OCR3A karşılaştırma registeri 1Hz değer için ayarlanıyor //16 MHz osilatör,0.5Hz timer3 ın çalışma frekansı,1024 prescalar OCR3A = 31249;// = (16*10^6) / (0.5*1024) - 1 (değer 65536 dan küçük) // CTC mod açılıyor. TCCR3B |= (1 << WGM32); // CS30 ve CS32 bitleri 1024 prescaler için ayarlanıyor TCCR3B |= (1 << CS32) | (1 << CS30); // timer karşılaştırma interruptı aktifleştiriliyor TIMSK3 |= (1 << OCIE3A); //interreuptlar aktif sei(); } ISR(TIMER1_COMPA_vect){ //timer1 interrupt ı 1Hz de tetikleniyor. if (durum0){ digitalWrite(LED,HIGH); durum0 = 0; } else{ digitalWrite(LED,LOW); durum0 = 1; } } ISR(TIMER3_COMPA_vect){//timer3 interrupt 0.5 1Hz de tetikleniyor. if (durum1){ digitalWrite(LED2,HIGH); durum1 = 0; } else{ digitalWrite(LED2,LOW); durum1 = 1; } } void loop() { } |
Timer ve millis uygulamaları ile ilgili konuya buradan geçebilirsiniz.
Teşekkürler..
arduino ve hatta avr ile programlanan tüm mculara hitab edecek şekilde bir anlatım olmuş arduino ile led yakmak haricinde kapsamlı ve verimli projeler yapmak isteyen herkesin mutlaka ihtiyacı olacak teşekkürler
Ben teşekkür ederim, umarım yardımcı olabilmişimdir. İyi çalışmalar…
Bu kodları ardunio uno ve due de denedim çalışmıyor.
Arduino Uno’ da çalışmamasının sebebi Uno’ da, Timer 3′ ün bulunmaması. Due hiç kullanmadım ancak TCCR3A vb registerlerden kaynaklı hatalar bu timer’ ın o denetleyicide bulunmamasındandır. Ayrıca uyarınız için teşekkürler kodların mega ile uyumlu olduğu şeklinde yazıya ek yapdım..
Teşekkürler..
Teşekkür ederim, mega elimde mevcut burada deneyeceğim. Timer konusu üzerine ardunio da sizden başka teknik yayın yok. Bu kaliteli çalışmanızdan dolayı sizi tebrik ederim. YApmam gereken bir çalışma var. Timer kullanrak sensorden gelen sinyali sayacağım. Sinyalin frekansınız ve zamanını elde edeceğim. Sinyalim dijital dc sinyaldir. İlk amacım ardunioda yapmaktı ancak yeterli örnek olmadığından bu amaca yonelik bir destek bulamadım. Bo ko nuda yonlendirebilirseniz sevinirim: Saygılar…
Yorumunuz için ben teşekkür ederim. Sorunuza gelince anladığım kadarı ile kare dalga vb. bir sinyalin frekansını ölçmeye çalışıyorsunuz. Bunun için sinyalin 0 yada 5V olma durumu timer ile saydırabilirsiniz. Bunu interreput ile de desteklerseniz Mhz ler mertebesine çıkmayan sinyallerde rahatlıkla gerçeğe yakın sonuçarlar alabilirsiniz. Ancak benim tavsiyem bunlar ile uğraşmaktansa arduino’ da hazır pulseIn fonksiyonunu kullanmanızdır. İyi çalışmalar…
timer 2 ile for döngüsü olmadan karaşimşek uygulamasını nasıl yaparız, timer2 için prescaler değerini kaç almamız gerekiyo
timer2 16 bitlik bir sayıcıya sahip. 100 ms de led değiştiğini farz etsek (16000000/100/1024) yeterli bi kesme değeri olacaktır. Her kesme tetiklenmesinde led durumunu kontrol eden bir bool değişkenin durumunu değiştiren bir uygulama yazabilrisiniz. iyi çalışmalar.
arduino da sıradan kendimiz bi counter ile işlemyaptığımızda, arduino kendi içinde hangi timeri kullanıyo biliyo musun ? bu arada timer2 8 bitlik değil mi ?
Haklısınız Timer2 8 bitlik üst kısımda yanlış yazmışım, bunun için özür dilerim. Arduino hangi timer ı kullandığına gelince delay ve millis gibi fonksiyonlar için timer0 ‘ı, servo kütüphenasi için timer1, kullanıyor. Yani kütüphane kullanacaksanız içerisine bakmanızı tavsiye ederim.
Buradaki anlatımı çok iyi anladım. Gerçekten türkçe kaynak olarak bir hediye. Birde ADC için kullanılan timer var özellikle ses datası için kullanılan . ADC ile birlikte kullanımada örnek verebilirmisiniz. Ses efektleri denemek için c++ kodları var ama ses datasındaki adc kısmı timer ile nasıl kullanılır anlayamadım.
Bizi takip ettiğiniz için teşekkürler. Ancak ADC için interrupt ını hiç kullanmadım. O konuda pek bilgi sahibi dahilim. Ancak ne yapmak istediğinizi daha açık belirtirseniz belki yardımcı olabilirim..
Tekrar teşekkürler..
Iyi gunler.sensorden deger aldiginda baslayip tekrar deger geldiginde duracak milisaniyelik kronometre yapmak istiyorum.yardimci olursaniz sevinirim.
Merhabalar..
Bu iş için arduino’ nun kendi içerisinde tam da sizin istediğiniz işi yapan bir timer bulunmakta. Bununla ilgili internette millis fonksiyonu diye aratarak detaylı bilgiye ulaşabilirsiniz. Kullanımı son derece basittir. Sensörden veri geldiğinde millis deki değeri kayderek kaydeder, bir sonraki değer geldiğinde de bu değeri referans alarak bir kronometre rahatlıkla yapabilirsiniz.
İyi çalışmalar…
Tesekkurler cevap icin
merhaba, arduino mega kullanmaktayım, alkışla röle kontrolü yapabildim. ancak içerisinde bluetooth, nem sensörü, pir sesörü vs. olan projemde alkış için gerekli kodlar çalışmadı(kodları internetten aldım milis fonksiyonu var). Bir yerlerde hata yapmış olabilir miyim? Ya da yukarıda anlatılandaki timer ı mı kullanmam gerekiyor?
Merhaba,
Öncelikle geç cevap verebildiğim için özür dilerim.. Projedeki kodları bilmediğim için yorum yapamıyorum. Lakin sorunun timer kaynaklı olma ihtimali düşük bir ihtimal.
İyi çalışmalar.
merhaba, dairesel olarak her bir turu sayacak bir sayaç yapmak istiyorum. bu sayaç örneğin 25 e geldiği zaman duracak ve tekrar butona basıldığı zaman başlayacak ve sürekli böyle bir döngü halinde gidecek. tabi bu sayaç 220 walt elektrikle çalışan bir dc motoru kontrol edecek. acaba arduino ile bu projeyi yapabilir miyiz ?
Merhaba,
Bu dediğiniz işlemi arduino ile elbet yapabilirsiniz. Saycı kısımda bir interrupt ile tur sayısını saydırıp buna göre 220V motoru röle ile çalışma durumunu anahtarlayabilirsiniz. Lakin hız ayarı yapmak istiyorsanız işler biraz daha zorlaşacaktır.
İyi çalışmalar.
merhaba arduino ile dairesel olarak dönen bir milin dönüşlerini saymak istiyorum mesela sağa döndüğünde tur sayısı artacak sola döndüğünde tur sayısı düşecek böyle bir devre için hangi malzemeleri kullanmam gerekiyor yada böyle bir devre yapabilme imkanımız varmı ? şimdiden teşekkürler.
Merhaba, Arduino ile böyle bir şey yapmanız elbette mümkün. Aklıma ilk olarak milin üzerinde herhangi bir yerini beyaz bir bant ile işaretleyerek iki kontrast sensörü yardımı ile dönüşlerini saydırabilirsiniz. İki tane kullanmanızdaki amaç mil hangi tarafa doğru döndüğünü tespit etmek. Örneğin soldan sağa dönüyorsa önce sağdaki sensör sonra soldaki sensör okuyacaktır. Bunu mıknatıslar ve manyetik sensörler yardımı ile de yapabilirsiniz ancak mıknatsı metale değmeyecek şekilde yerleştirmelisiniz aksi taktirde metal mıknatıs özelliği kazanacaktır. Mil hızlı dönüyorsa dış kesmeler ile sensörleri okumanızı tavsiye ederim. Elbet farklı çözümlerde olabilir önce araştırma yapmanızı tavsiye ederim. Aklınıza takılan şeyler için mail atabilirsiniz. İyi çalışmalar..
Selam arduino ile 12 voltluk motoru çalıştırmak istiyorum 1 swich e misal 10defa çarpıp duracak belli zaman sonra tekrardan geri çalışma olacak aynı swich gene 10 defa çarptıktan sonra duracak ileri yönde çalışma yaptırmak istiyorum bunu nasıl yazarım iyi çalışmalar
Merhaba, bahsettiğiniz işlemi Arduino ile yapmak son derece kolay. Bir motor sürücü yardımı ile motoru döndürmeye başlayın. Daha sonra switch e çarpma sayısını bir değişken ile sayarak istediğiniz sayıya ulaşınca motor sürücünün direction pinlerini değiştirin. Böylece motorun dönüş yönü de değişmiş olur. Detaylı bilgi için mail atabilirsiniz. İyi çalışmalar.
Teşekkür ederim çok açıklayıcı bir anlatım olmuş.
Ben de Mühendislik okuyorum ve bir proje istendi bizde grupça PIR ve ışık sensörü içeren bir kavşak trafik ışıklarını yöneten bir sistem yaptık delay fonksiyonu çok sorun çıkarıyordu bize ve millis fonksiyonu ile kendimize bir gecikme fonksiyonu yazdık bu sayede işlemciyi uykuya düşürmeden ışık sürelerinde sensörlerden veri alabildik kodları aşağıdaki gibidir ve kütüphaneye gerek duymuyor while içerisinde istediğimiz fonksiyonu kullanabiliyoruz istediğimiz işlemi yaptırabiliyoruz. Kaynak başarılı yazın için teşekkürler Türkçe bir kaynak yoktu biraz sıkıntı yaşanıyordu
void timerFunc(unsigned long howLong)
{
unsigned long Starthold = millis();
while(millis() – Starthold < howLong)
{
Checkthesensor();
}
}
yazdığın komutları çalıştıramadım acaba hatalı mı?
Merhaba .Ben arduino ile lcd ekranında kronometre yapmak istiyorum .Yardımcı olabilir misiniz
Merhaba, takıldığınız veya sormak istediğiniz yerleri baser61061@gmail.com adresine mail atabilirsiniz. İyi çalışmalar dilerim.
Merhaba alıcı ve verıcı ardunıoları haberlestırmek uzere kullanıyorum. Verıcıden gelen bılgının ne zaman geldıgını nasıl serı porta yazdırabılırım? bunun ıcın ardunıo ya kutuphane eklemem gerekıyor mu ?
Merhaba, vericiden gelen bilginin ne zaman geldiğini derken neyi kast ettiğinizi tam olarak anlayamadım. İki veri arasındaki süreyi mi kast ettiniz yoksa o anki saat verisini mi? baser61061@gmail.com adresi üzerinden benimle iletişime geçerseniz daha iyi yardımcı olabilirim. İyi çalışmalar..
ÖNCELİKLE MERHABALAR PROJE ÖDEVİM VAR VE BU KONULAR HAKKINDA BİLGİM AZ BANA YARDIMCI OLUR MUSUNUZ?
BİR MİKRO-DENETLEYİCİNİN B0 VE B1 PİNLERİNE BAĞLANMIŞ İKİ LED VAR.BİR DÖNGÜ İÇERİSİNDE BİRİNCİSİ 500 MS DE BİR 100MS YANIK KALMASI GEREKİYOR DİĞERİ İSE 300 MS 300 MS YANIK KALMAASI İSTENİYOR BU DÖNGÜYE AİT KOD NASIL YAZILIR. YARDIMCI OLURSANIZ ÇOK SEVİNİRİM TEŞEKKÜRLER
Merhaba, bahsettiğiniz işlemi timer kullanarak asenkron olarak gerçekleştirebilirsiniz. Timer ile döngü oluşturulmaz ancak ana döngüden bağımsız çalışır ve ayarlanan zaman geldiğinde timer kesmesinin içindeki işlemleri yapar. İki farklı timer kullanarak dediğiniz işlemi gerçekleştirebilirsiniz. Yada kullanacağınız denetleyici için geliştirilmiş bir RTOS(real time operating systmem) varsa onu kullanabilirsiniz. RTOS ile birbirinden bağımsız bir çok sonsuz döngü çalıştırabilirsiniz. İyi çalışmalar dilerim..
Merhaba.. sd card dan wav dosyası oynatıyorum.. fakat müzik oynamaya başladığında mikrodenetleyicideki döngü duruyor.. dolayısı ile müziği çalarken durduramıyorum veya bekletemiyorum.. bunu ayrı bir timer da yapmak sorunu çözer mi? öyle ise timer da müziği nasıl oynatabilirim?
Merhaba, Arduino ile müzik çalma gibi bir ihtiyacım veya denemem olmadı. Bu yüzden sorun şurdandır diye tam bir fikir yürütemiyorum. Lakin olay tahminimce şöyle oluyordur. Sd kart içerisindeki müzik dosyasını bitinceye kadar okuma işlemi yapan bir döngü vardır ve içerisinde sürekli döüyordur. Bunu en kolay kesmeler (interrupt) lar ile bölebilirsiniz. Bununla ilgili yazımıza bağlantıdan ulaşabilirsiniz.
İyi çalışmalar dilerim..
Güzel anlatımınız için teşekkürler. Yabanı dilim pek yok. Atmel datasheed 328p indirip sizin anlatmınız ile kavramaya çalıştım. Çok faydalı oldu. Acaba PWM, SPI, TWI ve interrupt lar içinde buna benzer registerler ile anlatımlar yapabilirmisiniz?
Merhaba, yorumunuz için teşekkür ederim. İşinize yaradıysa ne mutlu. Yakın zamandaki planlarım içerisinde istediklerinizin bazıları var ancak yazı yazmak uzun vakit alıyor ve vakit bulmak da kolay olmuyor. İyi çalışmalar dilerim..
Hocam ben bir proje yapıyorum ama park sensörüne saniye şeklinde bir şey yapmam gerekiyor bu şu şekilde olacaktır bu mesela yaklaşınca led yanacak ama ses bir 10 saniye sonra çıkarması gerek
Bana Bu konu Hakkında Yardımcı Olursanız Çok sevinirim.
Merhaba, yapmak istediğiniz şey belirli bir mesafeden sonra 10 sn’ e buzzer ile ses çıkarmak ise bu işlemi millis fonksiyonu kullanarak rahatlıkla yapabilirsiniz. Diğer sorularınızı baser61061@gmail.com adresine gönderebilirsiniz. İyi çalışmalar dilerim…
Hocam merhaba datasheette focna=16.10^6/2*N*(1+OCR1A) yazıyor .Sizin yazdığınız formlde 2 yok.
Merhaba, dahasheet de formül ile verilen yerin üstünü de okumanızı tavsiye ederim. OCR1A değeri 0 olduğu zaman kesme frekansı maksimum frenasın yarısı olur şeklinde söylenmiş. Yarım ifadesi ordaki /2′ den geliyor. Yani o sizin hesap şeklinize kalmış. Sonucu değiştirmeyecektir. İyi çalışmalar dilerim…
Merhaba;
Görüyorumki her yardıma ihtiyacı olana, üstelikte en kısa zamanda cevap veriyorsunuz. Bu sebepten sizi tebrik ediyorum. Ayrıca web sayfasındaki tüm anlatımlarınız için müteşekkiriz.
Yaklaşık 2 aydır arduino ve yazılım ile ilgilenmekteyim henüz emekleme aşamasındayım. Bu yüzden araştırmaya son hızla devam ediyorum. Fakat kavramakta güçlük çektiğim konular bir hayli fazla. Yazdığınız konuların bazı yerlerini anlayabiliyorken bazı yerlerini ise teknik terimlerden dolayı anlamakta zorlanıyorum. Yani sizin anlatımınızda sıkıntı yok, kaldıki teknik bilgisi yeterli olanlar için anlayabilenler bir hayli fazla.
Sorunumu buraya yazacaktım ama bir kaç arkadaşımıza mail adresinizi verdiğinizi görünce, mail yoluyla irtibat kurmak istedim. En kısa zamanda cevap vereceğinize inanarak sorunumu mailinize yolluyorum. Saygılarımla. İyi çalışmalar……
2015 yılında yayınladığınız makale için 2018 yılında bile cevap yazmışsınız. Size bu özverili davranışınızdan dolayı teşekkür ediyorum.
Takıldığım için bir konuda yardıma ihtiyacım var, yardım ederseniz sevinirim. Bir sensör ile tur sayıp belirli değerlere ulaştığında işlem yaptırmak istiyorum.
Mesela 100 tura ulaştığında hızı 50 yapmak 150 tura ulaştığında hızı 75 yapmak,… Bu şekilde 7 kademe.
Bunun için timer1 kullanılır mı, kullanılırsa bunun ayarı nasıl yapılır
Merhaba, bahsettiğiniz işlem için timer kullanabilirsiniz. Ancak timer’ ı sayma amacı ile değil de capture modu ile çalıştırmalısınız. Aslında capture modu ile de sayaç olarak çalışacak ama saymak için saat sinyali yerine dışardan verdiğiniz pin girişindeki değişimi kullanacaktır. Ancak bu işlemler biraz daha derin Arduino bilgisi gerektirmektedir. Eğer Arduino’ da yeni iseniz size bu sorunu timer kullanmadan yazılımsal olarak çözmenizi tavsiye ederim. İyi çalışmalar dilerim…