İçindekiler:

Basit, Pratik Bir Arduino Kronometresi: 4 Adım
Basit, Pratik Bir Arduino Kronometresi: 4 Adım

Video: Basit, Pratik Bir Arduino Kronometresi: 4 Adım

Video: Basit, Pratik Bir Arduino Kronometresi: 4 Adım
Video: Arduino ve Butonlar ile Antrenman (2. Örnek) - Robo90 Arduino Dersleri #24 2024, Kasım
Anonim
Basit, Pratik Bir Arduino Kronometre
Basit, Pratik Bir Arduino Kronometre

Arduino kronometresi için web'de arama yapın. Eğer buradaysan, muhtemelen az önce yaptın. Kişisel deneyimlerime göre, internetteki herhangi bir kronometrenin ya çok karmaşık olduğunu (yeni başlayanlar için kodda) ya da çok basit olduğunu ve sıfırlamadan sadece saniyeleri saymaya devam edenler gibi pratik olmadığını söyleyebilirim.

Sen de öyle düşünüyorsun, ha? Öyleyse tahmin et. Bunu yaptım ve dahası, girdimi doğrudan millis() işlevinden alıyorum - sonsuz bir sayı satırı (49 güne kadar veya her neyse). En iyi kısım? Sadece bir satır.

Sıfırlama, kronometrenin asıl zor kısmıdır. Orta seviye programcılar için, henüz yapmadıysanız, devam edin ve bunu saniyeler, dakikalar ve saatler ile birlikte kendiniz yapmaya çalışın. Ne hakkında konuştuğumu anlayacaksın.

Yeni başlayanlar için okumaya devam edin ve zihnimin dehasının keyfini çıkarın.

Şaka yapıyorum, ama bulduğum çözüm oldukça temiz. İşte ne olduğu:

Adım 1: Çözüm

Çözüm
Çözüm

Yani sorun sıfırlanıyor. İstediğimiz şey, ardışık sayıların (milis()) sonsuz çıktısından sürekli, yinelenen bir sayı döngüsüdür - temelde milisaniyeleri veya aslında 1.024 milisaniyeyi sayar, ama her neyse).

Akla gelen ilk şey, time1 -time2 ve bir gecikme gibi bir fark kullanmaktır. Unutmak. Önyükleme için en az altı satır kod ve bir if ifadesi gerekir.

İşte nasıl yapılacağı. Bir sınırımız var (59). 0'dan 59'a kadar her şeyin defalarca tekrarlanmasını istiyoruz. Nasıl?

Ya millis fonksiyonunun geri kalanını… bölü 59'a bölseydik… Bingo!

Yani, şöyle olmalı:

(60 [limit 59 olduğu için başlangıç değeri olarak] + millis() / 1000 [1000 milisaniye bir saniyedir]) % 60

Tamam, açıklamama izin ver. (%) veya modül, temelde (+) gibi kalanı bulan bir operatördür. %9 2=1 gibi.

Yani:

  • kalan (60 + 0) % 60 = 0
  • kalan (60 + 1) % 60 =1
  • kalan (60 + 58) % 60 = 58
  • kalan (60 + 59) % 60 = 59
  • kalan (60 + 60) % 60 = 60
  • kalan (60 + 61) % 60 = 1

Görmek!

Şimdi, parçalar için.

Adım 2: Parçalar

Parçalar
Parçalar

Pek değil, hiç

  1. herhangi bir arduino
  2. Herhangi bir ekran (0.96 OLED kullandım, ancak sahip olduğunuz her şeyi kullanabilirsiniz, ekranınızın ekran işlevlerine doğru değişkenleri koyduğunuzdan emin olun.)

Bu kadar.

Adım 3: Kod

Al bakalım. Oldukça net bir şekilde yorumlandı, bu yüzden sorun olmamalı. 0.96 OLED için kütüphaneler ve init kodda var. Farklıysa, onu kendi ekranınızla değiştirin.

// 0.96 OLED kitaplıkları

#Dahil etmek

#Dahil etmek

#Dahil etmek

#Dahil etmek

// 0.96 OLED Başlangıç

#define OLED_RESET 4

Adafruit_SSD1306 ekranı(OLED_RESET);

int saniye;

int dakika;

int saat;

geçersiz kurulum() {

// Biraz daha 0.96 OLED Başlatma

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

display.clearDisplay(); display.setTextSize(2); display.setTextColor(BEYAZ); }

boşluk döngüsü () {

saniye = (60 + milis() / 1000) % 60;

dakika = (60 + milis() / 60000) % 60; saat = (25 + millis() / 3600000) % 25;

display.clearDisplay();

display.setCursor(0, 22); // sıfırlamadan bu yana geçen saat sayısını yazdır display.print(saat); display.print("h:");

// sıfırlamadan bu yana geçen dakika sayısını yazdır

display.print(dakika);

display.print("m:");

// sıfırlamadan bu yana geçen saniye sayısını yazdır display.print(saniye); display.print("s");

display.setCursor(0, 0);

display.print("Kronometre"); display.drawLine(0, 18, 128, 18, BEYAZ); display.display();

}

Adım 4: Sonlandırmada…

Final…
Final…

İşte bu kadar! Şimdi git onunla istediğini yap. Biraz yumurta koyun ya da mahallenizi ele geçirin.

Şerefe, Aarush

Önerilen: