Arduino 37 parça sensör setinin parçalarından biri olan KY-040 kodlu Rotary Encoder Modülü ile Arduino projelerinize kolaylıkla rotary encoder ekleyebilirsiniz.
KY-040 Rotary Encoder Modülü 5 bağlantı pinine sahiptir ve soldan sağa GND, +, SW, DT ve CLK’dır. GND ve + Arduino’nun GND ve 5V pinlerine bağlanır. SW üzerine basıldığında etkinleşen buton bağlantısı, DT ve CLK ise Rotary Encoder dönüş yönünü algılamakta kullandığımız bağlantılardır.
Aşağıdaki sketch, Rotary Encoder dönüşünü kontrol eder ve sonuçları Seri Port Ekranı üzerinde görüntüler.
Arduino’da iyi olmak için öncelikle elektronikte iyi olmak gerekir. Türkiye’nin en iyi temel elektronik eğitim seti ARDUINO ÖNCESİ TEMEL ELEKTRONİK EĞİTİM VE DENEY SETİ‘ni keşfedin. Gereksiz bilgilerden arındırılmış basit ve eğlenceli anlatımla ELEKTRONİK öğrenin ve Arduino’ya METE HOCA farkıyla güçlü başlayın!
Sketch kodunu kopyalamak için pencerenin sağ üst köşesindeki butona tıklayabilir veya buraya tıklayarak ZIP dosyası olarak indirebilirsiniz. Setin diğer modülleri hakkındaki açıklamalar ve örnek sketch kodlarına ulaşmak için buraya tıklayın.
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 |
/* Arduino KY-040 Rotary Encoder Arduino 37 parça sensör setinin bir parçası olan Rotary Encoder'in örnek sketch'idir. Encoder döndürüldüğünde sayacı ve yönünü Seri Port Ekranı üzerinde gösterir. Setin diğer parçalarının açıklama ve örnek kodlarına web sitemizden ulaşabilirsiniz. Oluşturma: 12 Ekim 2021 / Mete Hoca https://www.metehoca.com/ */ int sayac = 0; // İleri ve geri sayacak sayacımız int yon; // Dönüş yönünü kontrol kaydettiğimiz değişken int clk_son; // Dönüş yönünün son bildiğimiz hali int clk_simdi; // Dönüş yönünün mevcut algıladığımız hali int clk = 3; // CLK pini int dt = 4; // DT pini int buton = 5; // Buton (SW) Pini // + pinini Arduino üzerinde 5V'a, - pinini ise GND'ye bağlıyoruz void setup() { pinMode(clk, INPUT_PULLUP); // CLK pinini giriş olarak ayarlıyoruz pinMode(dt, INPUT_PULLUP); // DT pinini giriş olarak ayarlıyoruz pinMode(buton, INPUT_PULLUP); // Buton (SW) pinini giriş olarak ayarlıyoruz clk_son = digitalRead(clk); // CLK pinini ilk kez okuyup değer atıyoruz Serial.begin(115200); // Seri Port Ekranı'nı doğru ayarlamayı unutmayın } // Rotary Encoder kontrolü, CLK veya DT pinlerinin hangisinin önce değiştiğini kontrol edip // son durum ile karşılaştırarak dönüş yönünü belirleme ile yapılır. void loop() { clk_simdi = digitalRead(clk); // Mevcut durumu okuyalım if (clk_simdi != clk_son) { // Değişiklik olup olmadığına bakalım if (digitalRead(dt) == clk_simdi) { // CLK önce değişmiş, yani saat yönüne dönmüş sayac++; // Sayacı 1 artıralım yon = true; // Yönü de kaydedelim } else { // DT önce değişmiş, yani saat yönünün tersi sayac--; // Sayacı 1 azaltalım yon = false; // Yönü de kaydedelim } Serial.print("Sayaç: "); // Sayaç ve yön bilgilerini ekrana yazalım Serial.print(sayac); Serial.print(" | Yön: "); if (yon == true) { Serial.println("►"); } else { Serial.println("◄"); } } clk_son = clk_simdi; // Sonraki algılama öncesinde değerleri eşitleyelim if (digitalRead(buton) == LOW && sayac != 0) { // Butona basılmış ve sayacı sıfırlıyoruz sayac = 0; Serial.println("Sayaç Sıfırlandı"); } } |