Advertisement
DukeSilver

digital_clock | Arduino

Jan 17th, 2022
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Arduino 11.10 KB | None | 0 0
  1. #include <dht.h>
  2. #include <LiquidCrystal.h>
  3. #include <Wire.h>
  4. #include<EEPROM.h>
  5. #include <RTClib.h>
  6. LiquidCrystal lcd(13, 12, 6, 5, 4, 3);
  7. RTC_DS1307 RTC;
  8. int temp,inc,hours1,minut,add=11,temp1=3,mode=0;
  9. int tSeconds=0, tMinutes=0, hours=0;  //this line, along with another line in void timerFunction(), is where you can adjust the amount of time that is counted down in                                  
  10.  
  11. //the timer function
  12. int centiseconds=0, sSeconds=0, sMinutes=0;
  13. int next=A0;    
  14. int INC=A1;
  15. int set_mad=A2;
  16. int shw_dat=A3;
  17. int buzzer=11;
  18. int HOUR,MINUT,SECOND=0;
  19. dht DHT;
  20.  
  21. #define DHT11_PIN 10
  22.  
  23. void setup(){
  24.  Wire.begin();
  25.  RTC.begin();
  26.  lcd.begin(16,2);
  27.  pinMode(INC, INPUT);
  28.  pinMode(next, INPUT);
  29.  pinMode(set_mad, INPUT);
  30.  pinMode(shw_dat, INPUT);
  31.  pinMode(buzzer, OUTPUT);
  32.  digitalWrite(next, HIGH);
  33.  digitalWrite(set_mad, HIGH);
  34.  digitalWrite(INC, HIGH);
  35.  digitalWrite(shw_dat, HIGH);
  36.  
  37.  
  38.  
  39.    lcd.begin(16, 2);
  40.    lcd.clear();
  41.    lcd.print(" Hello IST !! ");
  42.    delay(2000);
  43.    lcd.clear();
  44.    lcd.setCursor(0,0);
  45.    lcd.print(" We are ");
  46.    lcd.setCursor(0,1);
  47.    lcd.print("The EnigMatorS");
  48.    delay(3000);
  49.    lcd.clear();
  50.    lcd.print("Our Project name");
  51.    delay(2000);
  52.    lcd.clear();
  53.    lcd.setCursor(0,0);
  54.    lcd.print("Temperature");
  55.    lcd.setCursor(0,1);
  56.    lcd.print(" and Humidity");
  57.    delay(2000);
  58.    lcd.clear();
  59.    lcd.setCursor(0,0);
  60.    lcd.print("Measuremnt with");
  61.    delay(2000);
  62.    lcd.clear();
  63.    lcd.setCursor(0,0);
  64.    lcd.print("Smart Digital");
  65.    lcd.setCursor(0,1);
  66.    lcd.print("Clock");
  67.    delay(2000);
  68.    lcd.clear();
  69.    
  70.    
  71.    if (! RTC.isrunning()) {
  72.     //Serial.println("RTC is NOT running!");
  73.     // following line sets the RTC to the date & time this sketch was compiled
  74.     RTC.adjust(DateTime(F(__DATE__), F(__TIME__)));
  75.     // This line sets the RTC with an explicit date & time, for example to set
  76.   }
  77.  
  78.   //RTC.adjust(DateTime(2017, 1, 24, 9, 48, 0));
  79. }
  80. void loop()
  81. {
  82.  
  83.   int temp=0,val=1,temp4;
  84.    DateTime now = RTC.now();
  85.   int chk = DHT.read11(DHT11_PIN);
  86.   if(digitalRead(shw_dat) == 0)
  87.   {mode++;}
  88.  
  89.   if(digitalRead(shw_dat) == 0 && mode==1)      //set Alarm time
  90.    {
  91.      lcd.setCursor(0,0);
  92.      lcd.print("    SET ALARM ??    ");
  93.     delay(2000);
  94.     //defualt();int temp,inc,hours1,minut,add=11;
  95.    while(1)
  96.    {   if(digitalRead(set_mad) == 0)
  97.     {
  98.     time();
  99.     delay(1000);
  100.     lcd.clear();
  101.     lcd.setCursor(0,0);
  102.     lcd.print(" ALARM TIME SET ");
  103.      lcd.setCursor(9,1);
  104.      lcd.print(HOUR=hours1,DEC);
  105.      lcd.print(":");
  106.      lcd.print(MINUT=minut,DEC);
  107.      lcd.print(":");
  108.      lcd.print(SECOND=now.second(),DEC);
  109.      CheckTime();
  110.      delay(1000);
  111.     }
  112.     if(digitalRead(shw_dat) == 0)
  113.     break;
  114.    }
  115.    }
  116.  
  117.  if(digitalRead(shw_dat) == 0 && mode==3)      //set Timer
  118.    {
  119.     lcd.clear();
  120.     lcd.setCursor(0,0);
  121.     lcd.print("    SET TIMER     ");
  122.     while(1)
  123.     {
  124.     if(digitalRead(set_mad) == 0)
  125.     {
  126.     timerFunction();
  127.     }
  128.    if(digitalRead(INC) == 0)
  129.    break;
  130.     }
  131.    }
  132. if(digitalRead(shw_dat) == 0 && mode==4)      //set Stopwatch
  133.    {
  134.     lcd.clear();
  135.     lcd.setCursor(0,0);
  136.     lcd.print("    STOPWATCH     ");
  137.    
  138.     while(1)
  139.     {
  140.     if(digitalRead(set_mad) == 0)
  141.     {
  142.     stopwatchFunction();
  143.     }
  144.    if(digitalRead(INC) == 0)
  145.    break;
  146.     }
  147.    
  148.     }
  149.  if(mode>=5)
  150.     {mode=0;}
  151.  lcd.clear();
  152.  lcd.setCursor(0,0);
  153.  lcd.print(HOUR=now.hour(),DEC);
  154.  lcd.print(":");
  155.  lcd.print(MINUT=now.minute(),DEC);
  156.  lcd.print(":");
  157.  lcd.print(SECOND=now.second(),DEC);
  158.  lcd.setCursor(0,1);
  159.  lcd.print(now.day(),DEC);
  160.  lcd.print("/");
  161.  lcd.print(now.month(),DEC);
  162.  lcd.print("/");
  163.  lcd.print(now.year(),DEC);
  164.   lcd.setCursor(9,0);
  165.   lcd.print("H:");
  166.   lcd.print(DHT.humidity);
  167.   lcd.setCursor(15,0);
  168.   lcd.print("%");
  169.   lcd.setCursor(11,1);
  170.   lcd.print("T:");
  171.   lcd.print(DHT.temperature);
  172.   lcd.print((char)223);
  173.   lcd.setCursor(15,1);
  174.   lcd.print("C");
  175.   delay(1000);
  176. }
  177. /*Function to set alarm time and feed time into Internal eeprom*/
  178. void time()                            
  179. {
  180.   int temp=1,minuts=0,hours=0,seconds=0;
  181.  
  182.     while(temp==1)
  183.     {
  184.      
  185.      if(digitalRead(INC)==0)
  186.      {
  187.       HOUR++;
  188.       if(HOUR==24)
  189.       {
  190.        HOUR=0;
  191.       }
  192.       while(digitalRead(INC)==0);
  193.      }
  194.      lcd.clear();
  195.      lcd.setCursor(0,0);
  196.      lcd.print("Set Alarm Time ");
  197.    //lcd.print(x);
  198.     lcd.setCursor(0,1);
  199.     lcd.print(HOUR);
  200.     lcd.print(":");
  201.     lcd.print(MINUT);
  202.     lcd.print(":");
  203.     lcd.print(SECOND);
  204.     delay(100);
  205.     if(digitalRead(next)==0)
  206.     {
  207.       hours1=HOUR;
  208.       EEPROM.write(add++,hours1);
  209.      temp=2;
  210.      while(digitalRead(next)==0);
  211.     }
  212.     }
  213.    
  214.     while(temp==2)
  215.     {
  216.      if(digitalRead(INC)==0)
  217.      {
  218.       MINUT++;
  219.       if(MINUT==60)
  220.       {MINUT=0;}
  221.       while(digitalRead(INC)==0);
  222.      }
  223.      // lcd.clear();
  224.     lcd.setCursor(0,1);
  225.     lcd.print(HOUR);
  226.     lcd.print(":");
  227.     lcd.print(MINUT);
  228.     lcd.print(":");
  229.     lcd.print(SECOND);
  230.     delay(100);
  231.       if(digitalRead(next)==0)
  232.       {
  233.        minut=MINUT;
  234.        EEPROM.write(add++, minut);
  235.        temp=0;
  236.        while(digitalRead(next)==0);
  237.       }
  238.      
  239.     }
  240.     delay(1000);
  241. }
  242. /* Function to chack medication time */
  243. void CheckTime()
  244. {
  245.   int tem[17];
  246.   while(1)
  247.   {
  248.     DateTime now = RTC.now();
  249.   lcd.setCursor(0,1);
  250.  lcd.print(HOUR=now.hour(),DEC);
  251.  lcd.print(":");
  252.  lcd.print(MINUT=now.minute(),DEC);
  253.  lcd.print(":");
  254.  lcd.print(SECOND=now.second(),DEC);
  255.   for(int i=11;i<17;i++)
  256.   {
  257.     tem[i]=EEPROM.read(i);
  258.   }
  259.   if(HOUR == tem[11] && MINUT == tem[12])
  260.   {
  261.    for(int j=0;j<5;j++)
  262.    {
  263.     digitalWrite(buzzer, HIGH);
  264.     delay(500);
  265.     digitalWrite(buzzer, LOW);
  266.     delay(500);
  267.    
  268.     }
  269.    hours1=0;
  270.     minut=0;
  271.     add=11;
  272.     return;
  273.    
  274.    }
  275.  }
  276. }
  277. void timerFunction()  //the timer function was made with the help of this post: http://pastebin.com/f57045830
  278. {
  279.   int set=0;
  280.     lcd.setCursor(4,1);
  281.     //lcd.setCursor(0, 1);
  282.     lcd.print("00:00:00");
  283.   while(1)
  284.   {
  285.  
  286.  
  287.                    while(digitalRead(shw_dat)==1)
  288.                     {
  289.                       set=1;
  290.                    if(digitalRead(set_mad)==0)  //if "Start/Stop" is pressed, the timer counts down
  291.                       {
  292.                         tSeconds++;
  293.                         lcdOutput();
  294.                         delay(300);
  295.                         if(tSeconds==60)
  296.                         {
  297.                         tMinutes++;
  298.                         tSeconds=0;
  299.                         }
  300.                        }
  301.                  if(digitalRead(INC)==0)  //if "Start/Stop" is pressed, the timer counts down
  302.                       {
  303.                         tMinutes++;
  304.                         lcdOutput();
  305.                         delay(300);
  306.                         if(tMinutes==60)
  307.                         {
  308.                         hours++;
  309.                         tMinutes=0;
  310.                         }
  311.                       }
  312.                   if(digitalRead(next)==0 )  //if "Start/Stop" is pressed, the timer counts down
  313.                   {
  314.                         hours++;
  315.                         lcdOutput();
  316.                         delay(300);
  317.                         if(hours==24)
  318.                         {
  319.                         hours=0;
  320.                         }
  321.                   }      }
  322.   if(digitalRead(shw_dat)==0 && set==1)
  323.   {
  324.     lcd.clear();
  325.     lcd.setCursor(0,0);
  326.     //lcd.setCursor(0, 1);
  327.     lcd.print(" TIMER SET FOR  ");
  328.     lcd.setCursor(4,1);
  329.     //lcd.setCursor(0, 1);
  330.     lcd.print("00:00:00");
  331.             while(digitalRead(INC)==1)
  332.             {
  333.             static unsigned long lastTick = 0;
  334.               if (tSeconds > 0)
  335.                 {
  336.                 if (millis() - lastTick >= 1000)
  337.                 {
  338.                 lastTick = millis();
  339.                 tSeconds--;
  340.                 lcdOutput();
  341.                 }
  342.                 }
  343.             if (tMinutes > 0)
  344.                {
  345.               if (tSeconds <= 0)
  346.               {
  347.                 tMinutes--;
  348.                 tSeconds = 60;
  349.               }
  350.               }
  351.             if (hours > 0)
  352.               {
  353.               if (tMinutes <= 0)
  354.               {
  355.                 hours--;
  356.                   tMinutes = 60;
  357.                 }
  358.               }
  359.              
  360.               if(hours == 00 && tMinutes == 00 && tSeconds == 00)  //when timer ends, the alarm goes on
  361.                 {
  362.               while(digitalRead(shw_dat) == 1)  //the alarm will only go off until "Restart" is pressed
  363.               {
  364.                 set=2;
  365.                 lcd.setCursor(4, 1);
  366.                 lcd.print("00:00:00");
  367.                 for(int i=0;i<5;i++)
  368.                 {
  369.                 digitalWrite(buzzer, HIGH);
  370.                 delay(500);
  371.                 digitalWrite(buzzer, LOW);
  372.                 delay(500);
  373.                 }
  374.               }
  375.               }
  376.               }
  377.   }
  378.   if(digitalRead(shw_dat) == 0 && set==2)
  379.                {
  380.                 set=0;
  381.                 mode=0;
  382.                 break;
  383.                 }
  384.   }
  385.  
  386.   }
  387.  
  388. void lcdOutput()  //this is just used to display the timer on the LCD
  389. {
  390.   lcd.setCursor(4, 1);
  391.   printDigits(hours);
  392.   lcd.setCursor(7, 1);
  393.   printDigits(tMinutes);
  394.   lcd.setCursor(10, 1);
  395.   printDigits(tSeconds);
  396.   delay(100);
  397. }
  398.  
  399. void printDigits(int digits)  //this void function is really useful; it adds a "0" to the beginning of the number, so that 5 minutes is displayed as "00:05:00", rather than "00:5 :00"
  400. {
  401.   if(digits < 10)
  402.   {
  403.     lcd.print("0");
  404.     lcd.print(digits);
  405.   }
  406.   else
  407.   {
  408.     lcd.print(digits);
  409.   }
  410. }
  411. void stopwatchFunction()
  412. {
  413.  int count=1,sMin,sSec,sCen;
  414.  
  415.     lcd.setCursor(4,1);
  416.     //lcd.setCursor(0, 1);
  417.     lcd.print("00:00:00");
  418.    
  419.   while(1)
  420.   {
  421.   if(digitalRead(shw_dat) == LOW )
  422.     {
  423.       count=0;
  424.       loop();
  425.      
  426.     }    
  427.   if(digitalRead(next) == LOW)  //if the "Start/Stop" button is pressed, the time begins running
  428.   {
  429.    
  430.   while(1)
  431.     {
  432.       int count=1;
  433.       delay(6);
  434.   lcd.setCursor(4, 1);
  435.   printDigits(sMinutes);
  436.   lcd.setCursor(7, 1);
  437.   printDigits(sSeconds);
  438.   lcd.setCursor(10, 1);
  439.   printDigits(centiseconds);
  440.     centiseconds++;
  441.     sCen=centiseconds;
  442.     if(centiseconds==100)
  443.     {
  444.       sSeconds++;
  445.       sSec=sSeconds;
  446.       centiseconds=0;
  447.       if(sSeconds==60)
  448.       {
  449.         sMinutes++;
  450.         sMin=sMinutes;
  451.         sSeconds=0;        
  452.         }
  453.     }
  454.     if(digitalRead(set_mad) == 0)
  455.       {
  456.         centiseconds = 0;
  457.         sSeconds = 0;
  458.         sMinutes = 0;
  459.         break;
  460.       }
  461. if(digitalRead(INC) == LOW && count ==1)
  462.     {
  463.       while(1)
  464.       {
  465.      lcd.setCursor(4, 1);
  466.   printDigits(sMinutes);
  467.   lcd.setCursor(7, 1);
  468.   printDigits(sSeconds);
  469.   lcd.setCursor(10, 1);
  470.   printDigits(centiseconds);
  471.      
  472.       if(digitalRead(set_mad) == 0)
  473.       {
  474.         count=2;
  475.         centiseconds = 0;
  476.         sSeconds = 0;
  477.         sMinutes = 0;
  478.         break;
  479.       }
  480.      
  481.      
  482.       }
  483.       }
  484.      
  485.       }
  486.     }
  487.    
  488.   }
  489.  
  490. }
  491.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement