اگر به دنبال راهنمایی کامل هستید تا بتوانید براساس آن، ماژول ساعت DS1307 با آردوینو را راه اندازی کنید، این مقاله بهترین فرصت برای شما است.
شاید نمیدانید که اکثر MCUهایی که در پروژهها مورد استفاده قرار میگیرند، از زمان پیرامون خود بیاطلاعاند. عدم اطلاع از زمان تا حدودی برای اکثر پروژهها قابل قبول است اما اگر بخواهید پروژهای انجام دهید که زمان در آن اهمیت بسیاری دارد، عدم آگاهی از زمان به یک مشکل تبدیل خواهد شد. اما خوشبختانه در چنین وضعیتی ماژول ساعت DS1307 به کمک شما خواهد آمد و این مشکل را حل خواهد کرد.
این ماژول انتخابی مناسب برای ساخت تایمر، ساعت و آلارم است. در ادامه با این ماژول بیشتر آشنا خواهید شد.
تراشه DS1307
در هسته مرکزی ماژول ساعت DS1307، تراشه بسیار دقیق و ارزان قیمت DS1307 که ساخت شرکت Maxim است، وجود دارد. این تراشه همه توابع زمانی را مدیریت میکند و یک واسط دو سیمه I2C را تشکیل میدهد که بهراحتی میتواند به هر میکروکنترلری متصل شود.
این تراشه قابلیت نگهداری ثانیه، دقیقه، ساعت، روز، تاریخ، ماه و سال را دارد. در پایان هر ماه، تاریخ بهطور اتوماتیک برای ماههای کمتر از 31 روز تنظیم میشود. به عنوان مثال تاریخ برای سال کبیسه اصلاح میشود و تا سال 2100 معتبر خواهد بود. ساعت نیز در دو فرمت 12 ساعت و 24 ساعت با علامت AM و PM کار میکند.
یکیدیگر از مشخصههای قابل توجه این ماژول، وجود پایه SQW است. این پایه قابلیت برنامهریزی دارد و خروجی آن، 4 موج مربعی با فرکانسهای مختلف 32Hz, 8kHz, 4kHz ,1kHz است.
نکته:
تراشه DS1307 برای نگهداشتن زمان، یک کریستال 32kHz خارجی دارد. یکی از مشکلات این کریستالها این است که تغییر دمای محیط میتواند باعث تغییر فرکانس آنها شود. با وجود اینکه تغییر فرکانس کریستالها ناچیز است، اما به مرور زمان افزایش پیدا میکند. تغییر فرکانس باعث میشود ساعت حدود 5 دقیقه یا حتی بیشتر در طول هر ماه عقب بیوفتد.
باطری پشتیبان
تراشه DS1307 دارای یک ورودی باطری است و زمانیکه تغذیه اصلی مدار مختل شود، زمان را همچنان با دقت نگهداری میکند. مدار حسگر تغذیه داخلی، دائما وضعیت VCC را بررسی میکند تا در صورت آشکار سازی خطای تغذیه، بهصورت اتوماتیک به تغذیه پشتیبان تغییر وضعیت دهد. به این ترتیب، دیگر لازم نیست نگران قطع شدن برق باشید، زیرا MCU شما همچنان میتواند زمان را حفظ کند.
در قسمت پایین برد، یک جا باطری برای باطری دکمهای لیتیومی 20 میلیمتری با ولتاژ 3V قرار دارد. هر باطری CR2032 میتواند در این جا باتری قرار بگیرد.
نکته:
فرض کنید شما از یک باطری CR2032 کاملا شارژ شده با ظرفیت 47mAh استفاده میکنید و تراشه حداقل 300nA مصرف میکند. با این توصیفات، این باطری میتواند برای حداقل 17.87 سال ماژول را بدون اینکه نیاز به تغذیه 5V خارجی باشد، روشن نگه دارد.
47mAh/300nA = 156666.67 hours = 6527.78 days = 17.87 years
حافظه روی برد 24C32 EEPROM
ماژول ساعت DS1307 دارای یک حافظه 32 بایتی 24C32 EEPROM از شرکت Atmel است و سیکلهای خواندن و نوشتن نامحدود دارد. از این حافظه میتوان برای ذخیره کردن تنظیمات و هر چیز دیگری استفاده کرد.
24C32 EEPROM از واسط I2C برای تبادل اطلاعات و از باس I2C به عنوان تراشه DS1307 برای به اشتراک گذاشتن اطلاعات استفاده میکند.
نکته:
حافظه 24C32 EEPROM دارای آدرس سخت افزاری I2C است و مقدار آن 0x50HEX تنظیم شده است.
نمونه کد برای خواندن یا نوشتن حافظه 24C32 EEPROM را میتوانید در انتهای مقاله مشاهده کنید.
مشخصه پنهان – سنسور دما DS18B20
ماژول ساعت DS1307 دارای ویژگی منحصر به فردی است که اغلب اوقات نادیده گرفته میشود. این ویژگی پنهان و منحصر به فرد، امکان نصب سنسور دمای DS18B20 بر روی آن است. دقیقا در گوشه سمت راست برد که سه عدد حفره به نام U1 در نزدیکی جا باطری وجود دارد، محل نصب سنسور دما DS18B20 است.
با نصب DS18B20 بر روی ماژول ساعت، میتوانید از پایه DS دما خوانده شده را دریافت کنید. این داده را نیز میتوانید در کدها برای جبرانسازی دما در گذر زمان بهکار ببرید.
برای لحیم کردن ماژول DS18B20 نیز مطابق چاپ راهنما عمل کنید. ممکن است به یک مقاومت 4.7K بین VCC و DS نیز نیاز داشته باشید.
اگر میخواهید با این سنسور و نحوه راه اندازی آن بیشتر آشنا شوید، حتما به مقاله زیر سری بزنید.
معرفی سنسور دما DS18B20 و آموزش راه اندازی آن با آردوینو
پایههای ماژول ساعت DS1307
ماژول ساعت DS1307 بهطور کلی دارای 7 پایه است. پایههای ارتباطی این ماژول به شکل زیر هستند:
SQW پایههای خروجی 4 موج مربعی با فرکانسهای 1، 4، 8 و 32 هرتز است که قابل برنامه نویسی هستند.
DS این پایه در صورتیکه سنسور دما DS18B20 ، در گوشه راست برد نزدیک جاباطری بر روی ماژول نصب شده باشد، برای خواندن دما در نظر گرفته میشود.
SCL پایه ورودی کلاک برای واسط I2C است و از آن برای سنکرون کردن انتقال داده بر روی واسط سریال استفاده میشود.
SDA پایه ورودی و خروجی داده برای واسط سریال I2C است.
VCC پایه تغذیه ماژول است و ولتاژ آن میتواند بین 3.3V تا 5.5V باشد.
GND پایه زمین مدار است.
BAT این پایه، برای سلول لیتیم 3V یا هر منبع تغذیهای که میتواند در صورت مختل شدن تغذیه اصلی، زمان را با دقت نگه دارد، پایه ورودی تغذیه پشتیبان به حساب میآید.
سیم کشی – راه اندازی ماژول ساعت DS1307 با آردوینو
اکنون زمان راه اندازی ماژول ساعت DS1307 با آردوینو فرا رسیده است. در صورت نیاز قطعات لازم را از لینکهای زیر فراهم کنید:
- ماژول ساعت DS1307
- برد آردوینو UNO
- مینی برد بورد 400 سوراخ
- سیم جامپر نری / نری 10 رشته
- کابل یو اس بی نری نوع A به نری نوع B
اتصال این ماژول به آردوینو آسان است. برای آغاز این کار، پایه VCC را به خروجی 5V آردوینو و پایه GND را به زمین متصل کنید.
پس از انجام این اتصالات، تنها پایههایی باقی میمانند که برای ارتباط I2C مورد استفاده قرار میگیرند. نکتهای که در اینجا باید به آن توجه داشته باشید، این است که هر برد آردوینو پایههای I2C متفاوتی دارد که اتصالات باید با توجه به آنها انجام شود. بر روی بردهای آردوینو ورژن R3، پایههای SDA (خط داده) و SCL (خط کلاک) بر روی پین هدر، نزدیک به پایه AREF قرار دارند. این پایهها با نامهای A5 (SCL) و A4 (SDA) نیز شناخته میشوند.
اگر از برد آردوینو Mega استفاده میکنید، این پایهها متفاوت خواهند بود. در این برد باید از پایههای دیجیتال 20 (SDA) و 21 (SCL) استفاده کنید. برای درک بهتر این پایهها، نگاهی به جدول زیر بیندازید:
SDA | SCL | |
A4 | A5 | Arduino Uno |
A4 | A5 | Arduino Nano |
20 | 21 | Arduino Mega |
2 | 3 | Leonardo/Micro |
به کمک تصویر زیر میتوانید سیم کشیهای لازم را بهدرستی انجام دهید:
نصب کتابخانه RTClib
نوشتن کد، بخش دیگری از راه اندازی ماژول ساعت DS1307 با آردوینو است. ارتباط با این ماژول کمی دشوار است، زیرا نیازمند انجام کارهای متعددی است. اما خوشبختانه کتابخانه RTClib با هدف از بین بردن تمام پیچیدگیهای کار نوشته شده است تا شما بتوانید با دستورات ساده، دادههای RTC را بخوانید. این کتابخانه را میتوانید با کلیک بر روی لینک زیر دانلود کنید:
برای نصب این کتابخانه مسیر زیر را در نرم افزار آردوینو دنبال کنید:
Sketch > Include Library > Manage Libraries…
کمی صبر کنید تا library manager، کتابخانهها را دانلود و لیست کتابخانههای نصب شده را بهروز کند.
پس از نمایش کامل کتابخانهها، کلمه rtclib را جستجو کنید. کتابخانه RTClib نوشته شرکت Adafruit را از بین کتابخانههای موجود پیدا و سپس آن را نصب کنید.
کد آردوینو – خواندن تاریخ و زمان با ماژول ساعت DS1307
کدهای زیر بهطور کامل نحوه تنظیم تاریخ و زمان بر روی ماژول ساعت DS1307 را به شما نشان میدهد و میتواند به عنوان مبنایی برای پروژههای عملی شما مورد استفاده قرار بگیرد.
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
void setup ()
{
Serial.begin(9600);
delay(3000); // wait for console opening
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (!rtc.isrunning()) {
Serial.println("RTC lost power, lets set the time!");
// Comment out below lines once you set the date & time.
// Following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// Following line sets the RTC with an explicit date & time
// for example to set January 27 2017 at 12:56 you would call:
// rtc.adjust(DateTime(2017, 1, 27, 12, 56, 0));
}
}
void loop ()
{
DateTime now = rtc.now();
Serial.println("Current Date & Time: ");
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.println("Unix Time: ");
Serial.print("elapsed ");
Serial.print(now.unixtime());
Serial.print(" seconds/");
Serial.print(now.unixtime() / 86400L);
Serial.println(" days since 1/1/1970");
// calculate a date which is 7 days & 30 seconds into the future
DateTime future (now + TimeSpan(7,0,0,30));
Serial.println("Future Date & Time (Now + 7days & 30s): ");
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.println();
delay(1000);
}
خروجی کد بالا بر روی سریال مانیتور به شکل زیر خواهد بود:
توضیحات کد:
این دستورات با فراخوانی کتابخانههای wire.h و RTClib.h برای ارتباط با ماژول آغاز میشود.
در مرحله بعدی، شما باید یک شی از کتابخانه RTClib ایجاد کنید و آرایه کاراکتری دو بعدی daysOfTheWeek را برای ذخیره روزهای هفته تعریف کنید.
در بخشهای Setup و loop دستورات، از توابع زیر برای ارتباط با ماژول ساعت استفاده کنید:
()begin: این تابع از اتصال ماژول ساعت، اطمینان حاصل میکند.
()isrunning: این تابع رجیسترهای I2C داخلی ماژول DS1307 را میخواند تا بفهمد آیا تراشه، ردیابی زمان را از دست داده است یا نه. اگر این تابع مقدار false را برگرداند، شما میتوانید تاریخ و زمان را تنظیم کنید.
()adjust: این تابع تاریخ و ساعت را تنظیم میکند و یک تابع overload است. overload نوعی قابلیت در زبان ++C است. با این قابلیت، دو تابع یا تعداد بیشتری از توابع میتوانند اسم یکسان اما پارامتریهای متفاوتی داشته باشند. به دو روش میتوانید این تابع را فراخوانی کنید:
- یکی از این روشها، استفاده از دستور DateTime(F(__DATE__), F(__TIME__)) است که تاریخ و زمانی را که کد کامپایل شده است، تنظیم میکند.
- روش دوم، استفاده از دستور DateTime(YYYY, M, D, H, M, s) است که برای تنظیم زمان و تاریخ بهصورت مجزا مورد استفاده قرار میگیرد. به عنوان مثال، برای تنظیم ساعت 12:56 در تاریخ 27 ژانویه 2017، باید از این دستور به صورت ;rtc.adjust(DateTime(2017, 1, 27, 12, 56, 0)) استفاده کنید.
()now: این تابع تاریخ و زمان جاری را برمیگرداند. مقدار بازگشتی معمولا در یک متغیر از نوع داده DateTime ذخیره میشود.
()year: این تابع سال جاری را برمیگرداند.
()month: این تابع ماه جاری را برمیگرداند.
()day: این تابع روز جاری را برمیگرداند.
()dayOfTheWeek: این تابع روز جاری در هفته را برمیگرداند و معمولا به عنوان ایندکس یک آرایه دو بعدی که اطلاعات روزها را ذخیره میکند، مورد استفاده قرار میگیرد. نمونه این تابع را میتوانید در کد بالا مشاهده کنید.
()hour: این تابع ساعت جاری را برمیگرداند.
()minute: این تابع دقیقههای جاری را برمیگرداند.
()second: این تابع ثانیههای جاری را برمیگرداند.
()unixtime: این تابع unix time را بر حسب ثانیه برمیگرداند. Unix time سیستمی برای توصیف یک نقطه از زمان است. Unix time در واقع تعداد ثانیههایی است که از ساعت 00:00:00 (مبدا ساعت جهانی یعنی 5 شنبه 17 ژانویه 1970) گذشته است.
()TimeSpan: از این تابع برای اضافه کردن زمان به زمان جاری یا کم کردن زمان از آن استفاده میشود. در این تابع میتوانید روز، ساعت، دقیقه و ثانیه را اضافه یا کم کنید. به علاوه، این تابع، یک تابع overload است و به دو روش فراخوانی میشود:
- now() + TimeSpan(seconds): این تابع زمان را بر حسب ثانیه به زمان جاری اضافه میکند و زمان آینده را به ما میدهد.
- now() – TimeSpan(days,hours, minutes, seconds): این تابع زمان گذشته را به ما میدهد.
کد آردوینو- خواندن/ نوشتن در 24C32 EEPROM
با استفاده از ماژول ساعت DS1307، علاوه بر یک ماژول، یک حافظه ROM سی و دو بایتی خواهید داشت. محتویات این حافظه حتی با قطع تغذیه اصلی هم از بین نخواهد رفت. کد زیر یک پیام در 24C32 EEPROM مینویسد و سپس این پیام را از آن میخواند. شما میتوانید از این کد برای ذخیره تنظیمات، رمز عبور یا هر چیز دیگری استفاده کنید.
#include <Wire.h>
void setup()
{
char somedata[] = "lastminuteengineers.com"; // data to write
Wire.begin(); // initialise the connection
Serial.begin(9600);
Serial.println("Writing into memory...");
// write to EEPROM
i2c_eeprom_write_page(0x50, 0, (byte *)somedata, sizeof(somedata));
delay(100); //add a small delay
Serial.println("Memory written");
}
void loop()
{
Serial.print("Reading memory: ");
int addr=0; //first address
// access the first address from the memory
byte b = i2c_eeprom_read_byte(0x50, 0);
while (b!=0)
{
Serial.print((char)b); //print content to serial port
addr++; //increase address
b = i2c_eeprom_read_byte(0x50, addr); //access an address from the memory
}
Serial.println(" ");
delay(2000);
}
void i2c_eeprom_write_byte( int deviceaddress, unsigned int eeaddress, byte data ) {
int rdata = data;
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.write(rdata);
Wire.endTransmission();
}
// WARNING: address is a page address, 6-bit end will wrap around
// also, data can be maximum of about 30 bytes, because the Wire library has a buffer of 32 bytes
void i2c_eeprom_write_page( int deviceaddress, unsigned int eeaddresspage, byte* data, byte length ) {
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddresspage >> 8)); // MSB
Wire.write((int)(eeaddresspage & 0xFF)); // LSB
byte c;
for ( c = 0; c < length; c++)
Wire.write(data[c]);
Wire.endTransmission();
}
byte i2c_eeprom_read_byte( int deviceaddress, unsigned int eeaddress ) {
byte rdata = 0xFF;
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(deviceaddress,1);
if (Wire.available()) rdata = Wire.read();
return rdata;
}
// maybe let's not read more than 30 or 32 bytes at a time!
void i2c_eeprom_read_buffer( int deviceaddress, unsigned int eeaddress, byte *buffer, int length ) {
Wire.beginTransmission(deviceaddress);
Wire.write((int)(eeaddress >> 8)); // MSB
Wire.write((int)(eeaddress & 0xFF)); // LSB
Wire.endTransmission();
Wire.requestFrom(deviceaddress,length);
int c = 0;
for ( c = 0; c < length; c++ )
if (Wire.available()) buffer[c] = Wire.read();
}
در تصویر زیر میتوانید خروجی کد بالا را بر روی سریال مانیتور مشاهده کنید:
خلاصه
همانطور که قبلا به آن اشاره کردیم، ماژول ساعت DS1307، میتواند گزینهای عالی برای ساخت یک ساعت و تایمر باشد. این ماژول با فراهم کردن امکان نصب سنسور دما DS18B20 بر روی آن، به شما این فرصت را میدهد تا بتوانید تغییرات دما را در طول زمان بررسی کنید.
هدف اصلی ما در این مقاله این بود تا شما بتوانید راه اندازی ماژول ساعت DS1307 با آردوینو را آغاز کنید و برای انجام این گونه پروژهها منبع مناسبی در اختیار داشته باشید. فراموش نکنید که میتوانید سوالات و نظرات خود را همیشه با ما در میان بگذارید.
۲۰ دیدگاه. Leave new
سلام
خیلی جامع و مفید توضیح دادید، خیلی ممنونم
سوال من این هستش که الان ما برای جلوگیری از فراموشی ساعت حین برق رفتگی، باید کدی بنویسیم که در هرلحظه ساعت رو از حافظه بخونه و براش یک ثانیه اضافه کنه و در همون لحظه ساعت جدید رو در حافظه ذخیره کنه؟
سلام فردین عزیز، خواهش میکنم
خیر، پشت این ماژول یک جا باتری برای باتری بک آپ وجود داره. با این باتری بک آپ، ماژول حتی وقتی برق میره هم زمان رو نگهداری میکنه.
مثل پست های قبلی که از شما خوندم بسیار عالی بود…
سلام سجاد عزیز،
خیلی ممنون از شما،
خوشحالیم که ما رو همراهی میکنی.
امیدواریم همیشه بتونیم به تولید محتوایی آموزنده و مفید ادامه بدیم و شما را کنار خودمون داشته باشیم.
باسلام خیلی از مطلب مفیددتون ممنون مثل همیشه عالی فقط من یه سوال داشتم من میخوام با کمک این مازول کنتلرل جوجه کشی بسازم فقط اینکه مثلا چطور میتونیم بگیم که مثلا بدا ۱۷ روز دیگه موتور رو روشن نکن.سپاس فراوان
سلام محمود عزیز، ممنون از شما که ما رو همراهی میکنی،
ما توی مقاله زمان حال حاضر و زمان ۷ روز بعد رو خوندیم و نمایش دادیم. همچنین نحوه خواندن و نوشتن در حافظه EEPROM ماژول رو توضیح دادیم.
با مطالعه دقیق مقاله و درک پروژههایی که انجام شده این عملکرد به سادگی قابل انجامه.
برای مثال شما میتونی در هر لحظه زمان فعلی رو بخونی و زمان ۱۷ روز آینده رو محاسبه کنی.
حالا میتونی زمان آینده رو در حافظه ماژول ذخیره کنی و توی حلقه تکرار کد، هر بار بین زمان فعلی و زمان مدنظر مقایسه انجام بدی،
وقتی زمان موردنظر فرارسید، فرمان روشن شدن موتور صادر بشه.
سلام. ابتدای پست نوشتید آدرس eeprom ماژول 0x50 هست اما توی کد آدرس 0x57 استفاده کردید. کدوم درسته؟
سپاس
سلام و درود به شما،
کد اصلاح شد. 0x50 درسته.
سلام
برای استفاده ی رله به طور زمانی (برای مثال در ساعت ۳:۴۵ رله فعال شود)
چه متغیری رو باید وارد دستور if کرد؟
سلام امیر حسین عزیز،
با فرض اینکه نام شی تعریف شده از کتابخانه RTC_DS1307 مثل مقاله rtc باشه، rtc.hour() به شما ساعت و rtc.minute() دقیقه رو میده.
سلام ممنون از شما
چون این ماژول اگر به ۵ ولت وصل شود مدام باتری سکه ای را شارژ می کند و باعث از بین رفتن باتری و نگه نداشتن زمان می شود
برای رفع این مشکل اگر از باتری CR2032 استفاده می شود حتما مقاومت های R4,R5,R6 و دیود D1 را از مدار خارج کنید و دو سر مقاومت R6 را اتصال کوتاه کنید تا باتری شارژ نشود و آی سی نسوزد
سلام فرهاد عزیز،
خواهش میکنم، خیلی ممنون بابت نظرت.
باسلام خدمت همکاران گرامی
آیا میشه ماژول DS1307 رو با آی سی Atmega8 راه اندازی کرد
سلام عاطف عزیز،
بله این ماژول I2C است و با میکروی atmega8 هم بهراحتی قابل راه اندازیه.
سلام برای من این ارور میاد
Error compiling for board Arduino Uno.
سلام و درود،
لطفا بررسی کن که کد درست کپی شده و همچنین کتابخانه RTClib بهدرستی نصب شده باشه.
سلام و خداقوت
ممنون بابت مطالب خوبتون.
سوال من اینه، من اگر بخوام از این کتابخانه برای کنترل ماژول Ds3231 استفاده کنم، باید آدرس های کنترل و دیتا رو فقط تغییر بدم؟
من میخوام همین کتابخانه که شما منتشر کردید رو با تغییراتی، قابل استفاده برای da1307 بشه
سلام و درود به مبینا عزیز
شما میتوانید مقاله مربوط به DS3231 رو از لینک زیر مطالعه کنید که شامل همین کتابخانه RTClib هست:
https://roboeq.ir/blog/%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-%D9%85%D8%A7%DA%98%D9%88%D9%84-%D8%B3%D8%A7%D8%B9%D8%AA-ds3231-%D8%A8%D8%A7-%D8%A2%D8%B1%D8%AF%D9%88%DB%8C%D9%86%D9%88/
موفق باشید دوست عزیز
سلام و خسته نباشید خدمت شما. بنده این ماژول رو بهمراه سون سگمنت بزرگ و آردوینو نانو راه اندازی کردم ولی نمیتونم زمان و تاریخ رو تنظیم کنم لطف میکنید بفرمایید دقیقا کجای کد رو باید تغییر بدم؟
سلام امین عزیز
تنظیم زمان و تاریخ با استفاده از تابع TimeSpan انجام میشود که داخل مقاله هم این موضوع را بطور کامل توضیح دادیم.