Arduino Nano ile DS3231

 

DS3231 ile çalışmak için önce board umuzda hangi pinlerin SPI için SDA (or data) and SCL (or clock). olarak kullanıldığını öğrenemiz lazım.

Arduino Nano için Bunlar:

SDA Pin A4 (yukarıda sağda A4’e bakarsanız SDA yazıyor) 
SCL Pin A5

işin güzeli aynı pinlere birden fazla I2C kullanan cihaz ekleyebiliyoruz. Adresleri farklı tanımlanmış olsun yeter. Yani bir arduino ile A4 ve A5 pinlerine birden fazla cihaz bağlayabiliyoruz.

Sonra Sodaq_DS3231.h library’sini yüklemek lazım:

https://github.com/SodaqMoja/Sodaq_DS3231

Sonra örnekteki gibi basit:

// Date and time functions using a RX8025 RTC connected via I2C and Wire lib

#include <Wire.h>
#include "Sodaq_DS3231.h"

char weekDay[][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };

//year, month, date, hour, min, sec and week-day(starts from 0 and goes to 6)
//writing any non-existent time-data may interfere with normal operation of the RTC.
//Take care of week-day also.

//DateTime SetDateTo(2011, 11, 9, 03, 07, 0, 5);  //SADECE ilk kullanımda saati ayarlamak icin kullanılacak daha sonra  bu satir iptal edilmeli.
void setup () 
{
Serial.begin(57600);
Wire.begin();
rtc.begin();
//rtc.setDateTime(SetDateTo); //Adjust date-time as defined 'dt' above . SADECE ilk kullanımda. 
}

void loop () 
{
DateTime now = rtc.now(); //get the current date-time
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.date(), DEC);
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(weekDay[now.dayOfWeek()]);
Serial.println();
delay(1000);

Serial.print(now.year());
Serial.print('/');
Serial.print(now.month());
Serial.print('/');
Serial.print(now.date());
Serial.print(' ');
Serial.print(now.hour());
Serial.print(':');
Serial.print(now.minute());
Serial.print(':');
Serial.print(now.second());
Serial.println();
Serial.print(weekDay[now.dayOfWeek()]);
Serial.println();
}

 

ama burda bitmiyor. Mesela ben saati bir integer olarak almayı seviyorum, öğleden sonra 2:30’u 1430 olarak almak istiyorum. Buraya kadar ok. Ama mesela saat 2:09 ise malesef bu saat modülü bunu 14+9 yani 149 olarak yazıyor.  Bunu düzeltiyorum. Bir de gece 12’yi 24 yapıyorum:

 

#include <Sodaq_DS3231.h>

#include <elapsedMillis.h>
#include <Wire.h> //DS3231 librarysi

char weekDay[][4] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };

//DateTime SetDateTo(2016, 3, 19, 20, 37, 10, 6); //see rtc.setDateTime(SetDateTo in setup. DIKKAT SADECE ILK KULLANIMDA SAAT AYARLAMAK ICIN. Daha sonra bu satir iptal edilmeli.
//(Sene, Ay, Gun, Saat, Dakka, Saniye,Haftanin Gunu)

String ZamanKisaString = " ";
int ZamanKisaInteger;
String DakikaDuzeltme;
String SaatDuzeltme;
void setup() {
// put your setup code here, to run once:

Serial.begin(57600);
Wire.begin();
rtc.begin();
// rtc.setDateTime(SetDateTo); //Adjust date-time as defined 'dt' above . DIKKAT SADECE ILK KULLANIMDA SAAT AYARLAMAK ICIN.
}

void loop() {
// put your main code here, to run repeatedly:
DateTime now = rtc.now();

if (now.minute() >= 0 && now.minute() < 10)
{
DakikaDuzeltme = String(0) + String(now.minute());
}
else {
DakikaDuzeltme = String(now.minute());
}

if (now.hour() == 0)
{
SaatDuzeltme = String(24);
}
else {
SaatDuzeltme = String(now.hour());
}

Serial.print("Time Concatenate: ");
ZamanKisaString = SaatDuzeltme + DakikaDuzeltme; //saat ile dakikayı birleştirdim böylece 23:30 ile 7:00 arasındaki zamana "2330 dan yüksek 700 den ufak" diyebileceğim...
ZamanKisaInteger = ZamanKisaString.toInt();
Serial.println(ZamanKisaInteger);
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.date(), DEC);
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(weekDay[now.dayOfWeek()]);
Serial.println();
delay(1000);

Serial.print(now.year());
Serial.print('/');
Serial.print(now.month());
Serial.print('/');
Serial.print(now.date());
Serial.print(' ');
Serial.print(now.hour());
Serial.print(':');
Serial.print(now.minute());
Serial.print(':');
Serial.print(now.second());
Serial.println();
Serial.print(weekDay[now.dayOfWeek()]);
Serial.println();

}

 

 

Leave a Reply