Robotik Kodlama

Robotik Kodlama
Ana Sayfa

İLGİNİZİ ÇEKEBİLECEK LİNKLER :

Arduino etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Arduino etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

28 Nisan 2021 Çarşamba

I2C İletişimi İki Arduino Kartı Arasında

 

I2C İletişimi - İki Arduino Kartı Arasında 


Bu eğitimde, Arduino'nun I2C iletişim portunu kullanmayı öğreneceğiz. Farklı Arduino, en az bir I2C bağlantı noktasını destekler. Benzer şekilde, Arduino Uno'nun da bir I2C portu vardır. Arduino'yu bir I2C master ve bir I2C slave cihazı olarak yapılandırmayı öğreneceğiz. Sonunda tanıtım amaçlı olarak iki Arduino kartı arasında i2c iletişimi gerçekleştireceğiz.  

Not: Bu eğitimde Arduino Uno kullanacak olsak da. Ancak kavramlar ve kodlama örnekleri, Arduino Mega, nano, mikro gibi diğer Arduino kartlarında çalışacaktır. 

I2C Giriş 

I2C, entegre devre iletişim protokolü anlamına gelir. Kısa menzilli veri aktarım uygulamaları için 2 kablolu bir seri iletişim protokolüdür. I2C tabanlı sensörler, rakamlı ekranlar ve iletişim modülleri arasında arayüz oluşturmak için gömülü projelerde kullanılan çok popüler bir iletişim protokolüdür 

Her biri ile iletişim kurmak isteyen cihazlar bir I2C veri yolu üzerinden bağlanır. I2C veri yolu, birden çok bağımlı aygıtı ve birden çok ana aygıtı destekler. 

Birçok Sensör, verilerini mikro denetleyicilere aktarmak için bu seri iletişim protokolünü kullanır veya bu protokol aracılığıyla farklı bağımlı devreler ana devrelerle iletişim kurabilir. Yalnızca kısa mesafeli veri aktarımı için geçerlidir.

I2C Pimleri

I2C'nin SPI üzerinden ayırt edici özelliği, iletişimi gerçekleştirmek için yalnızca iki kablo kullanmasıdır. Bir kablo, cihazlar arasında veri aktarımını senkronize eden SCL'dir (seri saat hattı) ve diğer kablo, iletilecek gerçek verileri taşıyan SDA'dır (seri veri). Bu hatlar açık tahliye hatlarıdır, bu da cihazların düşük aktif olması durumunda dirençleri yukarı çekmek için bağlanmaları gerektiği anlamına gelir. Veriyoluna bağlanan her bir bağımlı cihaz, benzersiz bir 8 bitlik adrese sahip olacaktır. 

İki kablo kullanan belirli cihazlar arasındaki iletişim, her bir cihazın kendi benzersiz cihaz kimliğine veya adresine sahip olması ve bu adresin kullanılmasıyla sağlanır; Master, iletişim kurmak için herhangi bir belirli cihazı seçebilir.  

I2C Sistemi

Bu resim, I2C veriyoluna bağlı ana ve bağımlı cihazları gösterir.Bu resimde Arduino ve Raspberry Pi bir master, MPU6050 sensör cihazları ise slave gibi davranmaktadır .

I2C veriyolu, bağımlı ve ana Bağımlı cihazlar gibi birden fazla cihazdan oluşur.

Bağlı Cihazlar

Her bağlı cihaz, veriyolundaki cihazı tanımak için kullanılan benzersiz bir adrese sahiptir. Başka bir deyişle, bağlı adres, ana cihazın veriyolu üzerindeki belirli bir bağlı cihaza bilgi göndermesine yardımcı olur .

Ana cihazlar

Master cihazlar bilgi gönderip alabilir. Slave, bir ustanın gönderdiği her şeye tepki verir. Bu sisteme bilgi gönderirken, bir seferde sadece tek bir cihaz
bilgi gönderebilir .

Kısacası, verileri aktarmak veya farklı sayıda cihazla iletişim kurmak için yalnızca iki kabloya ihtiyacımız var. Hepimizin Arduino'nun sınırlı pinlere sahip olduğunu bildiğimiz gibi, I2C aynı anda birden fazla cihazla bağlantı kurmaya izin verir. Tek eksiklik, bu protokolü uzun mesafeli veri aktarımı için kullanamayacak olmanızdır.

I2C iletişim Veriyolu

Bir kablo (SDA hattı) boyunca seri olarak bit veri aktarımı. Gibi SPI , I2C bit çıkış paylaşılan bir saat sinyali ile bit testine senkronize edilir, eş zamanlı olan
master-slave.

Arduino I2C iletişim Pinleri

I2C iletişimi için, Arduino'nun farklı kartlarında SDA ve SCL pinleri olarak ayrılmış farklı pinler bulunur. Aşağıdaki liste bu pin numaralarını farklı panolarda göstermektedir.

  1. Arduino UNO'da                          Pin A4 = SDA ve Pin A5 = SCL
  2. Arduino Mega2560 ,                   Pin 20 = SDA ve Pin 21 = SCL
  3. Arduino Leonardo'da                  Pin 2 = SDA ve Pin 3 = SCL
  4. İçin Arduino Due                         Pin 20 = SDA ve Pin 21 = SCL, sda1, SCL1

Aşağıdaki şekil, bu yazıda kullanılacak Arduino UNO'daki SDA ve SCL pinlerini göstermektedir.

Arduino I2C Pinleri

Arduino I2C Haberleşme Kütüphanesi 

"Wire" kütüphanesi, Arduino'da I2C iletişimi için kullanılır. Aşağıdakiler bu kütüphanenin önemli işlevleridir.

Wire.begin (adres)

Tel kitaplığı bu komut kullanılarak başlatılır ve I2C veriyoluna ana veya bağlı olarak katılır. Adres isteğe bağlıdır. Bu adres, bağlı cihazlar için yedi bitten oluşur.  Belirtilmemesi halinde; cihaz otobüse Master olarak katılır.

Wire.requestFrom (adres, miktar) 

Bu komut, bir bağlı cihazdan bayt talep etmek için Ana cihaz tarafından kullanılır. Daha sonra bu baytları toplamak için "Available ()" ve "read ()" işlevleri kullanılabilir. "Adres", bir talebin yapılacağı belirli bir bağlı aygıtın adresidir ve "miktar", talep edilecek bayt sayısını belirtir.

Wire.beginTransmission (adres)

Bu komut, verilen adresin slave cihazı ile baytların iletimini başlatır. Daha sonra iletilecek baytlar write () işlevi kullanılarak sıraya alınır ve bu baytlar endTransmission () işlevi kullanılarak iletilir.

Wire.endTransmission ()

Wire.beginTransmission () işlevi kullanılarak başlatılan baytların iletimi bu komut kullanılarak sonlandırılır. 

Bu işlev bir argüman kabul eder. Eğer argüman DOĞRU ise, stop komutu baytların aktarılmasından ve I2C veriyolundan ayrıldıktan sonra gönderilir.

Argüman YANLIŞ ise, baytları ilettikten sonra bir yeniden başlatma komutu gönderir ve veri yolu korunmaz ve başka bir ana aygıtın mesajlar arasında iletilmesini engeller.

Wire.Write ()

Bu komut aynı anda 2 işlevden birini gerçekleştirir. 

  1. Master tarafından bir talep yapıldığında, bu fonksiyon slave cihazdan veri yazar.
  2. BeginTransmission () işlevi ile endTransmission () işlevinin çağrıları arasında, bu komut iletim için baytları kuyruğa almak için kullanılır.  

Wire.read ()

RequestFrom () komutundan sonra, slave cihazdan ana cihaza veya master cihaza slave cihaza aktarılan baytlar; bu komut kullanılarak okunur. 

Wire.available ()

Bu işlev, read () işlevi çağrıldıktan sonra alınabilecek bayt sayısını döndürür. Ana cihazda requestFrom () fonksiyonundan sonra, bağımlı cihazda ise onReceive () fonksiyonunda çağrılır. 

Wire.onReceive (işleyici)

Bu, ana cihazdan aktarım ikincil cihaz tarafından alındığında çağrılan bir işlevi kaydeder. Çağrılan işlev, eylemci tarafından temsil edilir.

İki Arduino Kartı Arasında I2C İletişimi

Bu bölümde, I2C veri yolunu kullanarak iki Arduino kartı arasında veri aktarmak için örnek bir kod göreceğiz. Bir Arduino kartını bir I2C ana cihazı ve diğer bir Arduino kartını bir I2C slave cihazı olarak yapılandıracağız. Master, 0 - 6 arasındaki sayıları sırayla ikincil cihaza aktaracaktır. Slave cihaz tarafından alınan sayı 3'ten küçükse, slave Arduino'nun D13 pinine bağlı bir LED açık kalacaktır, aksi takdirde LED kapalı kalacaktır.

Bu programı oluşturmak için aşağıdaki bileşenlere ihtiyacımız var:

  • İki Arduino (Master ve slave)
  • LED-Master
  • LED köle
  • Teller

Şimdi önce Arduino ana cihaz kodunu tartışalım.

Arduino I2C Master Cihaz Kodu

Burada tel kitaplığı dahil edildi ve değişken x başlatıldı. Bu değişkenin değeri, bağımlı cihaza iletilecektir.

#include <Wire.h>
int x = 0;

Burada wire.begin () işlevi çağrılmıştır. Detay yukarıdaki bölümde bulunabilir. Ayrıca dahili tampon başlatıldı.

void setup() 
{
  Wire.begin(); 
  Serial.begin(9600);
  pinMode(LED,OUTPUT);
}

Burada iletim, bağımlı adres 9 ile başlatılmıştır. Bundan sonra, x'in değeri I2C veriyolu üzerinden iletim için kuyruğa alınmıştır. Wire.write () işlevi I2C veriyolunda 'x'in mevcut değerini iletir. Son olarak, x'in değeri iletildi ve veriyolu, endTranmission () komutu kullanılarak kurtarıldı. 

Wire.beginTransmission(9);
Wire.write(x);              
Wire.endTransmission();

X'in değeri, 200 milyon saniyelik bir gecikmeyle döngüde 1'lik adımlarla artırılır, eğer x değeri 6'dan büyükse, bu değer 0'a sıfırlanır ve tekrar 0'dan artırılır. 

x++;
if (x > 6) 
  {
    x = 0;
  }
delay(200);

Eksiksiz Master Arduino Kodu

#include <Wire.h>
int LED=13;
int x = 0;

void setup() 
{
  Wire.begin(); 
  Serial.begin(9600);
  pinMode(LED,OUTPUT);
}

void loop() 
{
  Wire.beginTransmission(9);
  Wire.write(x);              
  Wire.endTransmission();
 
  x++;
  if (x > 6) 
  {
    x = 0;
  }
  delay(200);
}

Arduino I2C Slave Cihaz Kodu

Öncelikle Arduino'nun D13 pininin sembolik adını tanımlıyoruz. Pin D13, bir ana cihazdan alınan değere bağlı olarak açılıp kapanacaktır. Ayrıca, bir x değişkenini sıfır ile bildirir ve başlatırız. Bu x değişkeni, ana Arduino'dan alınan değeri saklamak için kullanılacaktır. 

#include <Wire.h> // add i2c library 
int LED = 13;
int x = 0;

Kurulum işlevinin içinde, pinMode () işlevini kullanarak LED pini çıkış pini olarak ayarlayın. Ayrıca Arduino'nun slave adresini 9 olarak ayarlayın.

 pinMode(LED, OUTPUT);
 Wire.begin(9); 
 Wire.onReceive(receiveEvent);
 Serial.begin(9600);

Bildirimler ve işlev çağrısı yukarıdaki bölümde tanımlandığı gibi gerçekleştirilmiştir. Burada ReceEvent () işlevi onReceive (işleyici) işlevi çağrılarak kaydedildi.

void receiveEvent(int bytes) 
{
  x = Wire.read();
}

Bu reciveEvent () işlevi burada tanımlanmıştır. Ana cihaz tarafından gönderilecek olan 1'den 6'ya kadar olan değeri okur; ve sonra bu değeri programın kurulum işlevinde bildirilen x değişkeninde saklar.

void loop() 
{
  if (x <= 3) 
  {
    digitalWrite(LED, HIGH);
  }
  else 
  {
    digitalWrite(LED, LOW);
  }
}

Ana aygıttan alınan x değeri 3'ten küçük veya eşitse, pim 13'teki LED AÇIK olacak ve x değeri 3'ten büyükse pim 13'teki LED KAPALI olacak şekilde ayarlanır. 


Eksiksiz Bağlı Cihaz Kodu

#include <Wire.h>
int LED = 13;
int x = 0;

void setup() 
{
  pinMode (LED, OUTPUT);
  Wire.begin(9); 
  Wire.onReceive(receiveEvent);
  Serial.begin(9600);
}

void receiveEvent(int bytes) 
{
  x = Wire.read();
}

void loop() 
{
  if (x <= 3) 
  {
    digitalWrite(LED, HIGH);
  }
  else 
  {
    digitalWrite(LED, LOW);
  }
}

İki Arduino Kartı arasında I2C bağlantısı 

Aşağıdaki şekil, iki Arduino kartı arasındaki I2C bağlantılarını gösterir. Ayrıca, Arduino'nun D13'ü ile bir LED'in bağlantısını gösterir.

  1. Öncelikle, bir ana Arduino üzerindeki A4 ve A5
    pinlerini slave Arduino'daki benzer pinlere bağlayacağız .
  2. Bundan sonra, jumper kabloları kullanarak her iki
    Arduino kartının zeminini ortak hale getireceğiz .
  3. Bağlantıları yaptıktan sonra, hem slave hem de master kodlarını Arduino kartlarına yükleyin.
İki Arduino kartı simülasyonu arasında I2C iletişimi

Program Çıkışı

Master Arduino sürekli olarak I2C veriyolu üzerinden veri iletecek ve veriler 0-6 arasında olacaktır. Slave cihaz tarafından alınan verilere ve yukarıda belirtilen koşullara bağlı olarak pin 13'teki led açılır ve kapanır.

İki Arduino kartı arasında I2C iletişimi

I2C İletişim Uygulamaları ve Fikirler

  • Bu iletişim, monitörlerde renk dengesi, kontrast ve tonu değiştirmek için kullanılır.
  • Akıllı hoparlörde, bu iletişim yöntemi kullanılarak ses seviyesi değiştirilir.
  • Bilgisayarlarda fan hızı gibi teşhis sensörlerinin okunmasında kullanılır.
  • Sistem bileşenlerinde güç kaynağını Açma ve Kapatma.
  • Kullanıcı ayarlarını tutan gerçek zamanlı saatlere ve NVRAM yongalarına erişim.

I2C iletişiminin avantajları ve dezavantajları

Avantajları

Uyarlanabilir çünkü birden fazla ana ve birden çok bağımlı
iletişimini destekler. Yalnızca iki kablo kullanın Çok yönlüdür Farklı bağımlı aygıtların gereksinimlerine kolayca uyarlanabilir
ACK / NACK, her bir kenarın etkili bir şekilde gönderildiğini onaylar. Cihazlar
otobüste tanıtılabilir veya kaldırılabilir.

Dezavantajları

Uzun mesafeli iletişim için geçerli değildir Yalnızca iki kablo kullanın
Düşük hıza sahiptir Dirençlerin kullanımı nedeniyle daha fazla alan gerektirir
Cihaz sayısı arttıkça karmaşıktır.

ANA SAYFAYA DÖN

Bahadır ÖZGEN
Electronic Robotic Coding Research and Development 1975 - ∞
Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com
facebook    robotic.code
instagram    @roboticcode


Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.

Arduino ile DS3231 RTC Modülü - Tarih ve Saati Ayarlama / Okuma

 

Arduino ile DS3231 RTC Modülü - Tarih ve Saati Ayarlama / Okuma

DS3231 RTC modülü, doğru sonuçları nedeniyle piyasadaki ünlü bir gerçek zamanlı saattir. Burada, RTC gerçek zamanlı saat anlamına gelir. Saat ve Tarihi yüksek hassasiyetle yöneten uygun fiyatlı bir sistemdir. Bu küçük boyutlu modülün altı pimi, veri aktarımı için entegre (I2C) bir arabirimi ve güç yedekleme için bir pil hücresi vardır. DS3231 Gerçek Zamanlı Modül, bir TWI arayüzü, iki alarm saati ve dahili bir sıcaklık dengelemeli kristal Osilatör ile birlikte gelir. RTC modülü, tüketici ürünlerindeki uygulamalarını endüstriyel düzeyde bulur.





DS3231 RTC Modülü Pinout

Aşağıdaki şekil DS3231 RTC Modülünün pim şemasını göstermektedir:

DS3231 RTC Modülü pin çıkışı şeması

 PIN konfigürasyonu

DS3231 Gerçek Zamanlı Modülün pinout'unu tartışalım. Tablodaki pim yapılandırma ayrıntısı aşağıda belirtilmiştir:

Pin AdıFonksiyon
VCCGüç Kaynağı pimi
GNDZemin pimi
SQWKare dalga Çıkış pimi
SCLSeri Saat pimi
SDASeri Veri pini
32 bin32KHz Açık tahliye Çıkış pimi
  • SQW: Kare dalga oluşturmak veya alarmlar için kesinti olarak kullanılmak üzere kullanılır.
  • SCL: Veri aktarımlarını senkronize etmek için kullanılan bir seri saat hattı. I2C arayüzünün bir parçasıdır.
  • SDA: Bir seri veri iletim hattı. I2C arayüzünün bir parçasıdır.
  • 32K: Bu pin bir referans saat için kullanılır.

DS3231 RTC Modülü Özellikleri ve Teknik Özellikleri

  • Çalışma Gerilimi: 2.3 - 5.5 Volt
  • Çalışma Sıcaklığı: -45 - 800C
  • Maksimum Voltaj: VCC + 0.3 Volt
  • Akü Yedek Akımı: 500 mA
  • -40 - 800C'de doğruluk: ± 3,5 ppm
  • 0 - 400C'de doğruluk: ± 2,0 ppm
  • Sıcaklık Doğruluğu: 30C
  • Paket Tipi: 16, 300-mil SO paketi

Ayrıntılı Özellikler

Ayrıntılı özelliklerden bazıları aşağıda listelenmiştir:

  • Düşük voltajlarla çalışabilir
  • İhtiyaca göre programlanabilir Kare dalga çıkışı
  • Güç olmasa bile güncel kalmak için bir pil yedeği
  • Hızlı iletim için çift yönlü, 400 kHz I2C arayüzü
  • Veri okumak / yazmak veya kaydetmek için 32 bayt EEPROM
  • 2 Günün saati çalar saatler
  • Zamanı sıfırlamak için bir basma düğmesi
  • RTC, 12 saat veya 24 saat biçiminde kullanılabilir
  • Kullanıcı tarafından sağlanan değeri fabrika değerine göre bir ofset olarak ayarlamak için eskiyen bir trim kaydı
  • Saniye, dakika, saat, gün, hafta, ay, yıl bilgisini korur
  • Otomatik olarak bir güç kaynağından yerleşik bir pil kaynağına geçer


DS3231 RTC Şematik Diyagramı

Modülün şeması, modülü onarırken yardımcı olabilecek bağlantıları anlamak için sağlanmıştır:

DS3231 RTC Modülü dahili devre şeması

DS3231 RTC Modülü ile bir mikro denetleyici arasında nasıl arabirim oluşturulur?

Arabirim basittir. Sadece bir güç kaynağı veya kontrolör aracılığıyla RTC'ye güç verin (hasarı önlemek için 5 Volt'tan fazla olmayın) ve ardından SCL'yi SCL'ye ve SDA'yı sırasıyla modülün SDA'sına ve mikrodenetleyiciye bağlayın. İletim, oldukça karmaşık olan eşzamanlı entegre entegre devre (I2C) protokolü aracılığıyla gerçekleşir.

RTC modülü için yazılan kitaplıklar işleri kolaylaştırmaya yardımcı olabilir. Programa dahil edilmişlerse, otomatik olarak tarih ve saati kullanıcıya sağlarlar. Ayrıca, bu kitaplıklar çalar saati değiştirmemize veya ayarlamamıza yardımcı olabilir.

Modül, elektrik kesintisi durumunda bir pil ile birlikte gelir. Modülün tarih ve saat ile güncel kalmasına yardımcı olacaktır.

DS3231 RTC modülü düğme pil tutucu

DS3231 RTC'yi Arduino ile Arayüz

Daha önce açıklandığı gibi, örnek olarak bir Arduino UNO ile RTC arasında arayüz oluşturacağız:

Arduino ile arayüz oluşturan DS3231 RTC Modülü

Pimleri uygun şekilde bağlayın.

Arduino UNORTC Modülü
5VVCC
GNDGND
ICSP2 BaşlığıSDA
ICSP2 BaşlığıSCL

DS3231 RTC Kitaplığını Arduino IDE'ye yükleyin

Bir DS3231 RTC modülünü programlamak için Arduino'nun I2C iletişim pinlerini kullanmamız gerekir. I2C iletişimi hakkında bilginiz yoksa şu makalelere göz atabilirsiniz:

Ancak sıfırdan bir kod yazmak için çaba gerektirir. Neyse ki, bir RTC modülünden zaman ölçümleri almak için geri arama işlevleri sağlayan bir Arduino RTClib kitaplığı mevcuttur. Bu kitaplık, I2C iletişimi üzerinden bir RTC modülüyle iletişim kurmanın tüm karmaşıklığını gizler. DS3231'den veri okumak için RTClib tarafından uygulanan basit geri arama işlevlerini kullanabiliriz. 

Bu nedenle, Arduino ile bir DS3231 RTC modülünü programlamak için Arduino IDE'de bulunan RTClib kütüphanesini kullanacaksınız. 

Bu kütüphaneyi kullanmak için öncelikle Arduino'nun kütüphane yöneticisine giderek bu kütüphaneyi Arduino IDE'ye kurmamız gerekiyor. Arduino IDE'yi açın, Araçlar> Kitaplıkları Yönet'e gidin.

DS3231 kitaplığını Arduino IDE'ye yükleyin

Bundan sonra, bu pencere kütüphane yöneticisi penceresi görünecektir. Arama çubuğuna yazarak "RTClib" i arayın. DS3231 için birçok seçenek göreceksiniz. Ancak bu eğitimde kullanacağımız, Adafruit tarafından RTClib'dir. Adafruit tarafından RTClib'i seçin ve yükle düğmesine tıklayın. 

DS3231 RTC modül kitaplığını Arduino IDE'ye yükleyin

Kur düğmesine tıkladığınızda, RTClib'in şu anda Arduino IDE'nizde kurulu olmayan diğer kitaplık bağımlılıklarını gerektirebileceğine dair bir mesaj alabilirsiniz. Kur butonuna tıklayarak tüm bağımlılıkları kurmanızı tavsiye ederiz. Aksi takdirde, RTClib düzgün çalışmayacaktır.

DS3231 kitaplık yazılımı bağımlılık kitaplıkları

Arduino Kodu

Bu örnek kod, zaman ayarlarını gerçekleştirir. Ayrıca, bu Arduino DS3231 RTC modülünden okuma süresi ve verileri çizer ve Arduino seri monitörüne yazdırır.

// Date and time functions using a DS3231 RTC connected via I2C and Wire lib
#include "RTClib.h"

RTC_DS3231 rtc;

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

void setup () {
  Serial.begin(57600);

#ifndef ESP8266
  while (!Serial); // wait for serial port to connect. Needed for native USB
#endif

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    Serial.flush();
    abort();
  }

  if (rtc.lostPower()) {
    Serial.println("RTC lost power, let's set the time!");
    // When time needs to be set on a new device, or after a power loss, the
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  }

  // When time needs to be re-set on a previously configured device, the
  // following line sets the RTC to the date & time this sketch was compiled
  // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  // This line sets the RTC with an explicit date & time, for example to set
  // January 21, 2014 at 3am you would call:
  // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}

void loop () {
    DateTime now = rtc.now();

    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(" (");
    Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
    Serial.print(") ");
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();

    Serial.print(" since midnight 1/1/1970 = ");
    Serial.print(now.unixtime());
    Serial.print("s = ");
    Serial.print(now.unixtime() / 86400L);
    Serial.println("d");

    // calculate a date which is 7 days, 12 hours, 30 minutes, 6 seconds into the future
    DateTime future (now + TimeSpan(7,12,30,6));

    Serial.print(" now + 7d + 12h + 30m + 6s: ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();

    Serial.print("Temperature: ");
    Serial.print(rtc.getTemperature());
    Serial.println(" C");

    Serial.println();
    delay(3000);
}

Sonuçlar Seri Monitör aracılığıyla gözlemlenebilir. Güncellenen saat ve tarihi gösterecektir.

DS3231 Alternatif Seçenekler

  • DS1302
  • DS1307

Kullanım Alanı ve Fikir veren Projeler

  • DIY projeleri
  • Küresel Konumlandırma Sistemi
  • Telematik
  • Sunucular
  • Gömülü sistemler
  • Cep Telefonları


Bahadır ÖZGEN

Electronic Robotic Coding Research and Development 1975 - ∞

Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com