السلام عليكم اخواني اعضاء القرية
اشكر الاخ F.Abdelaziz على المعلومات القيمة
وبعد اذنه اردت اضافة اول مشروع لدي بواسطة الاردوينو
فكرة واساسيات المشروع من الموقع في الرابط
https://circuitdigest.com/microcontr...no-alarm-clock
لكنني عدلت عليه حسب احتياجاتي
المشروع عبارة عن ساعة رقمية بنظام توقيت 12 ساعة مع منبه
يوجد اربعة مفاتيح لضبط المنبه
مفتاح set لفتح قائمة ضبط المنبه
مفتاح next للاختيار بين الساعات او الدقائق
مفتاحي inup و indown لزيادة او انقاص الوقت
تم استخدام المتكاملة ds1307 لضبط الوقت الحقيقي وعرض التاريخ على شاشة lcd 16*2
هذه صورة الدائرة
الكود
( يمكنك حذف الاسم ما بين الاقواس و تضع اسمك في هذا السطر lcd.print("BAHAA.kr & AHMED "); )
كود:
/* ----- Program for Arduino based Alarm Clock 12 Hour ---- */
/*BAHAA AND AHMED */
#include <Wire.h>
#include<EEPROM.h>
#include <RTClib.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd( 7, 6, 5, 4, 3, 2);
RTC_DS1307 RTC;
int temp, inc, hours1, minut, add = 11;
int next = 10;
int INUP = 11;
int INDOWN = 12;
int setalarm = 8;
int HOUR12 = 0;
#define buzzer 9
int HOUR, MINUT, SECOND;
void setup()
{
Wire.begin();
RTC.begin();
lcd.begin(16, 2);
pinMode(INUP, INPUT);
pinMode(INDOWN, INPUT);
pinMode(next, INPUT);
pinMode(setalarm, INPUT);
pinMode(buzzer, OUTPUT);
digitalWrite(next, HIGH);
digitalWrite(setalarm, HIGH);
digitalWrite(INUP, HIGH);
digitalWrite(INDOWN, HIGH);
lcd.setCursor(0, 0);
lcd.print("Real Time Clock");
lcd.setCursor(0, 1);
lcd.print("BAHAA.kr & AHMED ");
// lcd.setCursor(0, 2);
// lcd.print("*****WITH*****");
// lcd.setCursor(0, 3);
// lcd.print("AHMED Abo SHANAB ");
delay(3000);
if (!RTC.isrunning())
{
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}
void loop()
{
int temp = 0, val = 1, temp4;
DateTime now = RTC.now();
if (digitalRead(setalarm) == 0) //set Alarm time
{
lcd.setCursor(0, 0);
lcd.print(" Set Alarm ");
delay(2000);
defualt();
time();
delay(1000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" Alarm time ");
lcd.setCursor(0, 1);
lcd.print(" has been set ");
delay(2000);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Time");
lcd.setCursor(5, 0);
HOUR = now.hour(), DEC;
if (HOUR > 12) {
HOUR12 = map (HOUR , 13, 24, 1, 12);
lcd.print(HOUR12);
}
else if (HOUR <= 12) {
lcd.print(HOUR);
}
lcd.print(":");
lcd.print(MINUT = now.minute(), DEC);
lcd.print(":");
lcd.print(SECOND = now.second(), DEC);
lcd.setCursor(0, 1);
lcd.print("Date: ");
lcd.setCursor(6, 1);
lcd.print(now.day(), DEC);
lcd.print("/");
lcd.print(now.month(), DEC);
lcd.print("/");
lcd.print(now.year(), DEC);
if (HOUR > 12) {
HOUR12 = map (HOUR , 13, 24, 1, 12);
lcd.setCursor(14, 0);
lcd.print("PM");
}
else if (HOUR <= 12) {
lcd.setCursor(14, 0);
lcd.print("AM");
}
// lcd.setCursor(0, 2);
// lcd.print("Gaza local time ^_^");
match();
delay(200);
}
void defualt()
{
lcd.setCursor(0, 1);
lcd.print(HOUR);
lcd.print(":");
lcd.print(MINUT);
lcd.print(":");
lcd.print(SECOND);
}
/*Function to set alarm time and feed time into Internal eeprom*/
void time()
{
int temp = 1, minuts = 0, hours = 0, seconds = 0;
while (temp == 1)
{
if (digitalRead(INUP) == 0)
{
HOUR++;
if (HOUR == 25)
{
HOUR = 1;
} delay (50);
while (digitalRead(INUP) == 0);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Set Alarm Time ");
//lcd.print(x);
lcd.setCursor(0, 1);
// lcd.print(HOUR);
/////////////////////////////////////////////
if (HOUR > 12) {
HOUR12 = map (HOUR , 13, 24, 1, 12);
lcd.print(HOUR12);
}
else if (HOUR <= 12) {
lcd.print(HOUR);
}
// delay (50);
///////////////////////////////////////////////
lcd.print(":");
lcd.print(MINUT);
lcd.print(":");
lcd.print(SECOND);
if (HOUR > 12) {
lcd.setCursor(14, 1);
lcd.print("PM");
}
else if (HOUR <= 12) {
lcd.setCursor(14, 1);
lcd.print("AM");
}
delay(100);
if (digitalRead(INDOWN) == 0)
{
HOUR--;
if (HOUR == 0)
{
HOUR = 24;
} delay (50);
while (digitalRead(INDOWN) == 0);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Set Alarm Time ");
//lcd.print(x);
lcd.setCursor(0, 1);
// lcd.print(HOUR);
//////////////////////////////////////////////////
if (HOUR > 12) {
HOUR12 = map (HOUR , 13, 24, 1, 12);
lcd.print(HOUR12);
}
else if (HOUR <= 12) {
lcd.print(HOUR);
}
// delay (50);
/////////////////////////////////////////////////
lcd.print(":");
lcd.print(MINUT);
lcd.print(":");
lcd.print(SECOND);
//////////////////////////////////////////////////**********************
if (HOUR > 12) {
lcd.setCursor(14, 1);
lcd.print("PM");
}
else if (HOUR <= 12) {
lcd.setCursor(14, 1);
lcd.print("AM");
}
// delay(50);
if (digitalRead(next) == 0)
{
hours1 = HOUR;
EEPROM.write(add++, hours1);
temp = 2;
while (digitalRead(next) == 0);
}
}
while (temp == 2)
{
if (digitalRead(INUP) == 0)
{
MINUT++;
if (MINUT == 60)
{
MINUT = 0;
}
while (digitalRead(INUP) == 0);
}
// lcd.clear();
lcd.setCursor(0, 1);
// lcd.print(HOUR);
//////////////////////////////////////////////////////
if (HOUR > 12) {
HOUR12 = map (HOUR , 13, 24, 1, 12);
lcd.print(HOUR12);
}
else if (HOUR <= 12) {
lcd.print(HOUR);
}
// delay (50);
////////////////////////////////////////////////////////
lcd.print(":");
lcd.print(MINUT);
lcd.print(":");
lcd.print(SECOND);
delay(100);
if (digitalRead(INDOWN) == 0)
{
MINUT--;
if (MINUT == 0)
{
MINUT = 60;
}
while (digitalRead(INUP) == 0);
}
// lcd.clear();
lcd.setCursor(0, 1);
// lcd.print(HOUR);
//////////////////////////////////////////////////////////
if (HOUR > 12) {
HOUR12 = map (HOUR , 13, 24, 1, 12);
lcd.print(HOUR12);
}
else if (HOUR <= 12) {
lcd.print(HOUR);
}
// delay (50);
/////////////////////////////////////////////////////////
lcd.print(":");
lcd.print(MINUT);
lcd.print(":");
lcd.print(SECOND);
delay(100);
if (digitalRead(next) == 0)
{
minut = MINUT;
EEPROM.write(add++, minut);
temp = 0;
while (digitalRead(next) == 0);
}
}
delay(1000);
}
/* Function to chack medication time */
void match()
{
int tem[17];
for (int i = 11; i < 17; i++)
{
tem[i] = EEPROM.read(i);
}
if (HOUR == tem[11] && MINUT == tem[12])
{
tone(buzzer, 1000); // Send 1KHz sound signal...
delay(1000); // ...for 1 sec
noTone(buzzer); // Stop sound...
delay(1000); // ...for 1sec
lcd.clear();
lcd.print("Wake Up........");
lcd.setCursor(0, 1);
lcd.print("Wake Up.......");
tone(buzzer, 1000); // Send 1KHz sound signal...
delay(1000); // ...for 1 sec
noTone(buzzer); // Stop sound...
delay(1000); // ...for 1sec
}
}
هذا رابط ان اردت تحميل الكود مع الدائرة على بروتس للتاكد من الحاكاة والتعديل حسب الرغبة
https://top4top.io/downloadf-1547a78af1-rar.html
والسلام عليكم