自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用鴻蒙開發(fā)板制作一個(gè)空壓機(jī)儲(chǔ)氣罐自動(dòng)排水裝置

開發(fā) 前端
文章由鴻蒙社區(qū)產(chǎn)出,想要了解更多內(nèi)容請(qǐng)前往:51CTO和華為官方戰(zhàn)略合作共建的鴻蒙技術(shù)社區(qū)https://harmonyos.51cto.com

[[403297]]

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

潤(rùn)和的Neptune開發(fā)板,是一塊具有較高性價(jià)比的鴻蒙開發(fā)板,也可以應(yīng)用于工業(yè)控制領(lǐng)域。

夏季到了,很多地方的空氣比冬季潮濕了許多,于是壓縮空氣的含水量也大了起來(lái),即使有冷干機(jī),儲(chǔ)氣罐也常常會(huì)在罐底積留一部分水分,不及時(shí)排出,會(huì)影響工廠氣路和氣動(dòng)元件的正常運(yùn)行。更不用說沒有冷干機(jī)的供氣系統(tǒng)。儲(chǔ)氣罐在很多工廠還是人工排水,存在排水不及時(shí)和費(fèi)時(shí)費(fèi)工的弊端。這個(gè)夏季,我們就用鴻蒙開發(fā)板來(lái)完成儲(chǔ)氣罐的自動(dòng)排水。

說干就干,先做準(zhǔn)備:

1. 潤(rùn)和海王星 Neptune HH-SLNPT102 開發(fā)板一塊。

2. 潤(rùn)和HiSpark_WIFI_IoT_OLED_VER.A顯示板一塊。

3. 潤(rùn)和HiSpark_WIFI_IoT_EXB_VER.A底板一塊。

4. 電磁水閥一個(gè),尺寸和儲(chǔ)氣罐下部的排水口匹配,管道根據(jù)儲(chǔ)氣罐現(xiàn)場(chǎng)配套。

5. 3.3v繼電器一個(gè),按鈕兩個(gè),杜邦線若干,電源線。

6. 編輯,編譯環(huán)境,Ubuntu20.04.2 LTS, 燒錄 Windows環(huán)境SecureCRT

7. 程序框架,hihope/neptune_iot,1.0.1版(2021.04.29)

如圖做好連接:

1. Neptune HH-SLNPT102 開發(fā)板和HiSpark_WIFI_IoT_OLED_VER.A顯示板直接插在底板上。

2. 繼電器線圈受PB_10控制,連接底板的D10, 3V3及GND.繼電器的輸出端控制電磁水閥的通斷從而實(shí)現(xiàn)自動(dòng)排水功能。

3. 藍(lán)色按鈕接底板的D1和GND,對(duì)應(yīng)開發(fā)板的PB_06,每按下一次,電磁水閥關(guān)閉時(shí)間增加10分鐘,最長(zhǎng)間隔24小時(shí)。

4. 紅色按鈕接底板的D0和GND,對(duì)應(yīng)開發(fā)板的PB_07,每按下一次,電磁水閥開啟時(shí)間增加1秒鐘,單次排水最長(zhǎng)時(shí)間3分鐘。

5. 開發(fā)板板載按鈕PB_09按下一次,轉(zhuǎn)換一種工作模式,分別是:常開,常閉,間歇排水模式。

主程序代碼如下:

  1. #include <stdio.h> 
  2. #include <unistd.h> 
  3.  
  4. #include "ohos_init.h" 
  5. #include "cmsis_os2.h" 
  6. #include "wifiiot_gpio.h" 
  7. #include "wifiiot_gpio_ex.h" 
  8. #include "oled_ssd1306.h" 
  9. #include "wifiiot_gpio_w800.h" 
  10.  
  11.  
  12. int working = 0;  //電磁水閥工作狀態(tài) 0/開  1/關(guān) 
  13. int m = 60;      //間歇工作電磁水閥關(guān)閉時(shí)間初始值1分鐘 
  14. int n = 5;        //間歇工作電磁水閥開啟時(shí)間初始值5秒 
  15. int times = 0;    //計(jì)時(shí),秒為單位 
  16.  
  17. enum State 
  18.     ON = 0, 
  19.     OFF
  20.     SPARK, 
  21. }; 
  22.  
  23. enum State g_State = SPARK;  
  24.  
  25. static void DrainageTask(void *arg) 
  26.     (void)arg; 
  27.     OledInit(); 
  28.  
  29.     OledFillScreen(0x00); 
  30.     OledShowString(0, 1, "Air Comprwssor", 2); //開機(jī)顯示2秒 
  31.     OledShowString(0, 5, "Auto Drainage", 2);  
  32.     osDelay(2000); 
  33.      
  34.     OledFillScreen(0x00); 
  35.     while (1) 
  36.     { 
  37.         OledShowString(0, 0, "****************", 2); 
  38.         OledShowString(0, 2, "* Auto Drainage*", 2); //OLED固定顯示 
  39.         OledShowString(0, 4, "*              *", 2); 
  40.         OledShowString(0, 6, "*              *", 2); 
  41.         osDelay(500); 
  42.         static char line[32] = {0}; 
  43.         static char line1[32] = {0}; 
  44.         
  45.         switch (g_State) 
  46.         { 
  47.         case ON:  //電磁水閥常開工作模式 
  48.             GpioSetOutputVal(WIFI_IOT_GPIO_PB_10, WIFI_IOT_GPIO_VALUE0); 
  49.             snprintf(line, sizeof(line), "*              *");  
  50.             snprintf(line1, sizeof(line1), "*  ON   ");  
  51.             break; 
  52.   
  53.         case OFF:  //電磁水閥常閉工作模式 
  54.             GpioSetOutputVal(WIFI_IOT_GPIO_PB_10, WIFI_IOT_GPIO_VALUE1); 
  55.             snprintf(line, sizeof(line), "*              *");  
  56.             snprintf(line1, sizeof(line1), "*        OFF");  
  57.             break; 
  58.  
  59.         case SPARK:  //電磁水閥間歇工作模式 
  60.             times++;  
  61.             if (working == 0)   //排水定時(shí)控制 
  62.             { 
  63.                 snprintf(line, sizeof(line), "* ON Remaining");          
  64.                 snprintf(line1, sizeof(line1), "*   %d sec", n - times); //秒顯示,倒計(jì)時(shí) 
  65.                 if (times<n) 
  66.                 { 
  67.                     GpioSetOutputVal(WIFI_IOT_GPIO_PB_10, WIFI_IOT_GPIO_VALUE0); 
  68.                 } 
  69.  
  70.                 if (times>=n) 
  71.                 { 
  72.                     working = 1; 
  73.                     times = 0; 
  74.                 } 
  75.             } 
  76.             else   //電磁水閥關(guān)閉定時(shí)控制 
  77.             { 
  78.                 snprintf(line, sizeof(line), "*OFF Remaining");           
  79.                 snprintf(line1, sizeof(line1), "*   %d min", (m - times)/60);  //分鐘顯示,倒計(jì)時(shí) 
  80.                 if (times<m) 
  81.                 { 
  82.                     GpioSetOutputVal(WIFI_IOT_GPIO_PB_10, WIFI_IOT_GPIO_VALUE1); 
  83.                 } 
  84.                 if (times>=m) 
  85.                 { 
  86.                     working = 0; 
  87.                     times= 0; 
  88.                 } 
  89.             }; 
  90.             break; 
  91.  
  92.         default
  93.             break; 
  94.         }  
  95.         OledShowString(0, 4, line, 2);  //OLED動(dòng)態(tài)顯示 
  96.         OledShowString(0, 6, line1, 2); //OLED動(dòng)態(tài)顯示 
  97.         osDelay(500);                
  98.     } 
  99.  
  100. static void GpioIsr(char *arg)  //板載按鈕中斷方式切換工作模式 
  101.     (void)arg; 
  102.     enum State nextState = SPARK; 
  103.     printf(" P9 Press!  \n"); 
  104.     GpioSetIsrMask(WIFI_IOT_GPIO_PB_09, 1); 
  105.  
  106.     switch (g_State) 
  107.     { 
  108.     case ON
  109.         nextState = OFF
  110.         break; 
  111.  
  112.     case OFF
  113.         nextState = SPARK; 
  114.         break; 
  115.  
  116.     case SPARK: 
  117.         nextState = ON
  118.         break; 
  119.  
  120.     default
  121.         break; 
  122.     } 
  123.     g_State = nextState; 
  124.     GpioSetIsrMask(WIFI_IOT_GPIO_PB_09, 0); 
  125.  
  126. static void F1(char *arg)  //外置F1按鈕中斷方式調(diào)整閥關(guān)閉時(shí)間,最長(zhǎng)24小時(shí),步長(zhǎng)10分鐘 
  127.     (void)arg; 
  128.     printf(" P6 Press!  \n"); 
  129.     GpioSetIsrMask(WIFI_IOT_GPIO_PB_06, 1); 
  130.     if (m>86400) 
  131.     { 
  132.         m = 0 ; 
  133.     } 
  134.     m = m + 600 ; 
  135.     times = 0; 
  136.     GpioSetIsrMask(WIFI_IOT_GPIO_PB_06, 0); 
  137.  
  138. static void F2(char *arg)  //外置F2按鈕中斷方式調(diào)整開啟時(shí)間,最長(zhǎng)3分鐘,步長(zhǎng)1秒 
  139.     (void)arg; 
  140.     printf(" P7 Press!  \n"); 
  141.     GpioSetIsrMask(WIFI_IOT_GPIO_PB_07, 1); 
  142.  
  143.     if (n>180) 
  144.     { 
  145.         n = 0 ; 
  146.     } 
  147.     n = n + 1 ; 
  148.     times = 0; 
  149.     GpioSetIsrMask(WIFI_IOT_GPIO_PB_07, 0); 
  150.  
  151. static void DrainageDemo(void) 
  152.     osThreadAttr_t attr; 
  153.  
  154.     
  155.     GpioInit(); 
  156.     GpioSetDir(WIFI_IOT_GPIO_PB_10, WIFI_IOT_GPIO_DIR_OUTPUT);  //通過繼電器控制電磁水閥。  底板的D10 
  157.  
  158.     GpioSetDir(WIFI_IOT_GPIO_PB_09, WIFI_IOT_GPIO_DIR_INPUT);   //開發(fā)版板載P9按鈕,中斷輸入。 
  159.     IoSetPull(WIFI_IOT_GPIO_PB_09, WIFI_IOT_GPIO_ATTR_PULLHIGH); 
  160.     GpioRegisterIsrFunc(WIFI_IOT_GPIO_PB_09, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, GpioIsr, NULL); 
  161.      
  162.     GpioSetDir(WIFI_IOT_GPIO_PB_06, WIFI_IOT_GPIO_DIR_INPUT);  //外置P6按鈕,中斷輸入。  底板的D1 
  163.     IoSetPull(WIFI_IOT_GPIO_PB_06, WIFI_IOT_GPIO_ATTR_PULLHIGH); 
  164.     GpioRegisterIsrFunc(WIFI_IOT_GPIO_PB_06, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, F1, NULL); 
  165.  
  166.     GpioSetDir(WIFI_IOT_GPIO_PB_07, WIFI_IOT_GPIO_DIR_INPUT);  //外置P7按鈕,中斷輸入。  底板的D0 
  167.     IoSetPull(WIFI_IOT_GPIO_PB_07, WIFI_IOT_GPIO_ATTR_PULLHIGH); 
  168.     GpioRegisterIsrFunc(WIFI_IOT_GPIO_PB_07, WIFI_IOT_INT_TYPE_EDGE, WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, F2, NULL); 
  169.  
  170.     attr.name = "DrainageTask"
  171.     attr.attr_bits = 0U; 
  172.     attr.cb_mem = NULL
  173.     attr.cb_size = 0U; 
  174.     attr.stack_mem = NULL
  175.     attr.stack_size = 4096; 
  176.     attr.priority = osPriorityNormal; 
  177.  
  178.     if (osThreadNew(DrainageTask, NULL, &attr) == NULL
  179.     { 
  180.         printf("[DrainageDemo] Falied to create DrainageTask!\n"); 
  181.     } 
  182.  
  183. APP_FEATURE_INIT(DrainageDemo); 

 編譯,下載,重啟開發(fā)板后,顯示和控制正常。按下板載PB_09按鍵,切換到常開模式,再按一次,切換到常閉模式,相應(yīng)OLED屏做顯示。

再按一次PB_09按鍵,進(jìn)入間歇工作模式,每次電磁水閥開啟一段時(shí)間進(jìn)行排水(開啟時(shí)間長(zhǎng)短由紅色按鈕F2調(diào)整),關(guān)閉一段時(shí)間(時(shí)間長(zhǎng)短由藍(lán)色按鈕F1調(diào)整),周而復(fù)始,實(shí)現(xiàn)空壓機(jī)儲(chǔ)氣罐的自動(dòng)排除底部積水。每次開啟和關(guān)閉時(shí)間長(zhǎng)短,可以根據(jù)各自壓縮空氣系統(tǒng)實(shí)際情況來(lái)調(diào)整。

Neptune開發(fā)板由于較高的性價(jià)比,在工業(yè)領(lǐng)域有廣闊的應(yīng)用空間。比如,本文的儲(chǔ)氣罐排水控制器還可以與空壓機(jī)聯(lián)動(dòng),也可以發(fā)揮網(wǎng)絡(luò)功能實(shí)現(xiàn)遠(yuǎn)程監(jiān)控等,期待廣大鴻蒙開發(fā)者發(fā)掘更多的應(yīng)用領(lǐng)域。

想了解更多內(nèi)容,請(qǐng)?jiān)L問:

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com

 

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2020-12-29 09:59:01

鴻蒙HarmonyOS智能家居

2020-10-30 17:12:05

Hi3861

2020-12-16 10:05:48

鴻蒙開發(fā)板Onenet平臺(tái)

2022-06-28 14:30:29

camera組件照片回傳

2020-10-30 09:48:03

Hi3861開發(fā)板get請(qǐng)求

2020-10-27 10:00:26

鴻蒙開發(fā)板物聯(lián)網(wǎng)

2020-11-19 10:25:24

MQTT

2020-12-02 11:55:40

OLED

2020-11-17 12:15:36

MQTT開發(fā)

2022-07-13 15:31:29

手繪板canvas鴻蒙

2021-01-07 11:24:51

鴻蒙HarmonyOS音樂

2021-12-15 15:28:18

鴻蒙HarmonyOS應(yīng)用

2020-11-26 12:02:07

OneNet平臺(tái)

2020-12-10 12:12:32

鴻蒙開發(fā)板init_lite

2021-12-30 16:12:07

鴻蒙HarmonyOS應(yīng)用

2009-07-02 10:02:40

JSP程序

2021-01-08 10:00:53

鴻蒙訊飛平臺(tái)語(yǔ)音控制

2021-09-16 10:03:39

鴻蒙HarmonyOS應(yīng)用

2020-10-20 09:32:43

HiSparkWi-FiIoT

2022-04-01 15:54:01

DHCP網(wǎng)絡(luò)協(xié)議開發(fā)板
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)