電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>用于激活設(shè)備的可編程定時(shí)器-第三部分

用于激活設(shè)備的可編程定時(shí)器-第三部分

2022-12-16 | zip | 0.88 MB | 次下載 | 免費(fèi)

資料介紹

描述

介紹

在第三部分中,我們實(shí)現(xiàn)了幾個(gè)步驟來(lái)創(chuàng)建幾個(gè)函數(shù),如 ReadKeyPad、AdjustHour 和 ActivationHour。

通過(guò)這些功能,我們創(chuàng)建了項(xiàng)目的第一部分。第二部分可以在以下鏈接中訪(fǎng)問(wèn):訪(fǎng)問(wèn)文章的第二部分。

現(xiàn)在,我們實(shí)現(xiàn)項(xiàng)目的新功能。

開(kāi)發(fā)項(xiàng)目

通過(guò)到目前為止已實(shí)現(xiàn)的功能,在這第三部分中,我們將實(shí)現(xiàn)新功能以提高項(xiàng)目的質(zhì)量。

此后,將介紹新功能:

  • 實(shí)現(xiàn) DeactivationHour() 函數(shù);
  • 實(shí)現(xiàn)一個(gè)邏輯系統(tǒng)來(lái)比較時(shí)鐘以激活和停用連接在繼電器中的設(shè)備;
  • 實(shí)現(xiàn)信號(hào)化以指示按下的鍵。

基于新功能,實(shí)現(xiàn)了如圖 2 所示的新電路。

?
pYYBAGOYtGGAP_y_AAH1M9glNy0897.png
圖 2 - 電路的電子原理圖。
?

首先,我們將介紹新函數(shù) DeactivateHour()。此函數(shù)等同于函數(shù) ActivateHour。

唯一的區(qū)別是用于保存停用設(shè)備的小時(shí)和分鐘的 EEPROM 位置。

現(xiàn)在,我們將看到 DeactivateHour 函數(shù)。

實(shí)現(xiàn) DeactivateHour 函數(shù)()

通過(guò)這段代碼,您可以看到在 ActivateHour 函數(shù)處代碼是相等的。所有邏輯編程都在第二部分——訪(fǎng)問(wèn)第二部分中介紹

void DeactivationHour(void)
{
   int times[6];
   int  DadosTempo[7];
   bool controle = 0;
   bool EstadoSobe = 0, EstadoDesce = 0;
   byte cont = 0;
   byte number = 0;
   int digitos[6];
   byte PosCursor = 0;
   bool Validate = 0;
  
   lcd.clear();
  
         for(byte i = 0; i < 6; i++)
         {
           digitos[i] = 0;
         }
  
         do
         {  
             lcd.setCursor(0,0);
             lcd.print("                ");
             lcd.setCursor(1,0);  
             lcd.print("Shutdown Hour:");
             lcd.setCursor(0,1);
             lcd.print("                ");
             lcd.setCursor(5,1);
             lcd.print("00:00h");
             PosCursor = 5;
             Validate = 0;
          
           do
           {
             number = ReadKeyPad();
             delay(100);
  
             if( (number >= 0 && number <= 9) && (controle == 0) && (cont < 4) )
             {
               digitos[cont] = number;  
               cont++;
               controle = 1;
               lcd.setCursor(PosCursor,1);
               lcd.print(number);                
               PosCursor++;
               
               if(cont == 2 || cont == 4)
               {
                 PosCursor = PosCursor + 1;
               }
             }
  
             if(number == 16 && controle == 1)
             {
               controle = 0;
             }
  
             if(number == 12)
             { 
                 for(cont = 0; cont < 4; cont++)
                 {
                   digitos[cont] = 0;
                 }  
  
               lcd.setCursor(0,1);
               lcd.print("                ");
               lcd.setCursor(5,1);
               lcd.print("00:00h");
               PosCursor = 5;
               cont = 0;
  
               for(int i = 4; i < 6; i++)
               {
                 times[i] = 0;  
               }
  
             }
  
           }while(number != 13);  
  
           times[4] = (digitos[0]*10) + digitos[1];
           times[5] = (digitos[2]*10) + digitos[3];
  
           EEPROM.write(3, times[4]);
           EEPROM.write(4, times[5]);
  
           if((times[4] < 0 || times[4] > 23) || (times[5] < 0 || times[5] > 59))
           {
             lcd.clear();
             lcd.setCursor(4,0);
             lcd.print("Invalid");
             lcd.setCursor(6,1);  
             lcd.print("Hour");
  
             delay(2000);
  
             Validate = 1;
             lcd.clear();
  
             lcd.setCursor(0,0);
             lcd.print("                ");
             lcd.setCursor(1,0);
             lcd.print("Shutdown Hour:");
  
             lcd.setCursor(0,1);
             lcd.print("                ");
             lcd.setCursor(5,1);
             lcd.print("00:00h");
             sprintf(tempo, "%02d:%02dh", 0, 0);
             PosCursor = 5;              
  
             cont = 0;
  
             for(cont = 0; cont < 4; cont++)
             {
              digitos[cont] = 0;
             }
           }
         }while(Validate == 1);
  
             do
             {
               number = ReadKeyPad();
               delay(200);
             }while(number != 16);
}

唯一的區(qū)別是用于保存小時(shí)和分鐘的 EEPROM 位置,如前所述。

EEPROM.write(3, times[4]);
EEPROM.write(4, times[5]);

此后將在圖 3 中執(zhí)行該功能時(shí)顯示在屏幕上。

?
poYBAGOYtGOAL3BTAAGUJ99Nw0I51.jpeg
圖 3 - 調(diào)整關(guān)機(jī)時(shí)間。
?

在此屏幕中,用戶(hù)將配置您的設(shè)備停用的時(shí)間。用戶(hù)插入小時(shí)后,系統(tǒng)將驗(yàn)證,如項(xiàng)目的第二部分所示。

之后,系統(tǒng)將返回 void 循環(huán)函數(shù)并執(zhí)行塊代碼。

當(dāng) 73 值保存在位置 MEMORY 中時(shí),存儲(chǔ)在 EEPROM 位置 1、2、3 和 4 中的值保存在兩個(gè)向量中:TimeActiveDevice 和 TimeDeactiveDevice。

這兩個(gè)向量用于存儲(chǔ)定時(shí)器以激活和停用連接在繼電器中的設(shè)備。

void loop()
{
   if(EEPROM.read(MEMORY) != 73)
   {
     AdjustTime();
     lcd.clear();
     ActivationHour();
     lcd.clear();
     DeactivationHour();
     lcd.clear();
     EEPROM.write(MEMORY, 73);
  
     TimeActiveDevice[0] = EEPROM.read(1);
     TimeActiveDevice[1] = EEPROM.read(2);
     TimeDeactiveDevice[0] = EEPROM.read(3);
     TimeDeactiveDevice[1] = EEPROM.read(4);
   }
  
   DS1307.getDate(DataTime);    
   SegAtual = DataTime[6];
  
   if(ReadKeyPad() == 10)
   {
     AdjustTime();
     lcd.clear();
     ActivationHour();
     lcd.clear();
   }
  
   if(abs(SegAtual - SegAnt) >= 1)
   {
     sprintf(tempo, "%02d:%02d:%02d", DataTime[4], DataTime[5], DataTime[6]);
     sprintf(data, "%02d/%02d/%02d", DataTime[2], DataTime[1], DataTime[0]);
     lcd.setCursor(4,1);
     lcd.print(tempo);
     lcd.setCursor(4,0);
     lcd.print(data);
     SegAnt = SegAtual;
   }
  
   //Active and Deactive the device according to the time
   if(DataTime[4] == TimeActiveDevice[0] && DataTime[5] == TimeActiveDevice[1])
   {
     digitalWrite(RELAY, LOW);
   }
  
   if(DataTime[4] == TimeDeactiveDevice[0] && DataTime[5] == TimeDeactiveDevice[1])
   {
     digitalWrite(RELAY, HIGH);
   }
}

因此,在此之后,系統(tǒng)將在LCD中顯示小時(shí)和日期并且,此后,將當(dāng)前小時(shí)和分鐘與向量的值進(jìn)行比較。

這樣,繼電器將根據(jù)一天中的時(shí)間激活或停用。

最后,我們將實(shí)現(xiàn)一個(gè)蜂鳴器,以指示用戶(hù)按下了一個(gè)鍵。

蜂鳴器指示按鍵被按下

蜂鳴器對(duì)于指示用戶(hù)按下了鍵非常重要。通常,用戶(hù)不確定是否輸入了值。這樣,蜂鳴器會(huì)提示按鍵已被按下。

byte ReadKeyPad(void)
{   
 byte teclado[4][4] = {
 {1,2,3,10},
 {4,5,6,11},
 {7,8,9,12},
 {14,0,15,13}};
   byte coluna[4] = {8,9,10,11};
   byte linha[4]  = {12,13,14,15};
   bool tecla;
   byte digito_tecla = 16;
   for(byte y = 0; y <= 3; y++)
   {
     digitalWrite(coluna[y], LOW);
   }
   for(byte y = 0; y <= 3; y++)
   {
     digitalWrite(coluna[y], HIGH);
  
       for(byte x = 0; x <= 3; x++)
       {
           tecla = digitalRead(linha[x]);  
           if(tecla == 1)
           {
             digito_tecla = teclado[x][y];
               digitalWrite(BUZZER, HIGH);  
               delay(100);
               digitalWrite(BUZZER, LOW);
             return digito_tecla;
           }             
       }
    digitalWrite(coluna[y], LOW);
   }
   return digito_tecla;
}

在 for 循環(huán)內(nèi)部,蜂鳴器會(huì)啟動(dòng) 400 毫秒以向用戶(hù)發(fā)出信號(hào)。

現(xiàn)在,您將根據(jù)時(shí)間看到繼電器的工作情況。

激活繼電器

為了執(zhí)行繼電器激活測(cè)試,繼電器被編程為在上午 10:46 激活。從圖 4 中可以看出,繼電器已停用。

此狀態(tài)由綠色LED表示。

?
poYBAGOYtI-AcOX2AA8NnA5u0Hc206.jpg
?

現(xiàn)在,在圖 5 中,繼電器被激活,綠色LED被啟動(dòng)以表示繼電器的激活。

?
poYBAGOYtLGAO4b3AA5fFEoLQo4332.jpg
?

最后,我們已經(jīng)能夠?qū)崿F(xiàn)主要功能以在預(yù)定時(shí)間執(zhí)行繼電器的激活。

現(xiàn)在您可以使用整個(gè)項(xiàng)目來(lái)應(yīng)用到需要在預(yù)定時(shí)間觸發(fā)的設(shè)備。

我們很快就會(huì)為我們的設(shè)備創(chuàng)建新功能。

?


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1DC電源插座圖紙
  2. 0.67 MB   |  2次下載  |  免費(fèi)
  3. 2AN-1269: 采用ADP2441/ADP2442同步降壓DC-DC穩(wěn)壓器設(shè)計(jì)反相電源
  4. 389.42KB   |  次下載  |  免費(fèi)
  5. 3AN87-線(xiàn)性技術(shù)雜志電路集,第五卷
  6. 1.41MB   |  次下載  |  免費(fèi)
  7. 4AN135-為L(zhǎng)TC3880實(shí)施強(qiáng)大的PMBus系統(tǒng)軟件
  8. 122.98KB   |  次下載  |  免費(fèi)
  9. 5AN-953: 具可編程模數(shù)的直接數(shù)字頻率合成器(DDS)
  10. 278.15KB   |  次下載  |  免費(fèi)
  11. 6AN-793: iCoupler隔離產(chǎn)品的ESD/閂鎖考慮因素
  12. 1.01MB   |  次下載  |  免費(fèi)
  13. 7AN-718: ADuC7020評(píng)估板參考指南
  14. 413.19KB   |  次下載  |  免費(fèi)
  15. 8HSW-TTY6754 二鍵觸摸感應(yīng)IC_V1
  16. 1.15 MB  |  次下載  |  免費(fèi)

本月

  1. 1ADI高性能電源管理解決方案
  2. 2.43 MB   |  450次下載  |  免費(fèi)
  3. 2免費(fèi)開(kāi)源CC3D飛控資料(電路圖&PCB源文件、BOM、
  4. 5.67 MB   |  137次下載  |  1 積分
  5. 3基于STM32單片機(jī)智能手環(huán)心率計(jì)步器體溫顯示設(shè)計(jì)
  6. 0.10 MB   |  128次下載  |  免費(fèi)
  7. 4使用單片機(jī)實(shí)現(xiàn)七人表決器的程序和仿真資料免費(fèi)下載
  8. 2.96 MB   |  44次下載  |  免費(fèi)
  9. 53314A函數(shù)發(fā)生器維修手冊(cè)
  10. 16.30 MB   |  31次下載  |  免費(fèi)
  11. 6美的電磁爐維修手冊(cè)大全
  12. 1.56 MB   |  22次下載  |  5 積分
  13. 7如何正確測(cè)試電源的紋波
  14. 0.36 MB   |  17次下載  |  免費(fèi)
  15. 8感應(yīng)筆電路圖
  16. 0.06 MB   |  10次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935121次下載  |  10 積分
  3. 2開(kāi)源硬件-PMP21529.1-4 開(kāi)關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
  4. 1.48MB  |  420062次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233088次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費(fèi)下載
  8. 340992  |  191367次下載  |  10 積分
  9. 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  10. 158M  |  183335次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81581次下載  |  10 積分
  13. 7Keil工具M(jìn)DK-Arm免費(fèi)下載
  14. 0.02 MB  |  73810次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65988次下載  |  10 積分