你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于stm32c8t6的智能加湿系统

[复制链接]
STMCU小助手 发布时间:2022-10-27 17:35
一、硬件部分8 ?5 K5 y: @2 N. ?" y; `! t/ ]3 X

! k9 |5 J: U# E; D ~US{9PQYR6H2}($P]4B@15N.png
+ A  }& o( V7 ?' K
8 S- t) ^: J) k5 F0 p3 C图1 c8t6) X' C0 Y9 t+ @, v5 [) j3 H4 ~

1 `( a' l7 M) T  X: o- ^ 56ef8cda98304a4bb6a6925e6032a8c1.png
) K& P) i7 i% W! c0 p$ j3 A1 W8 Y* X
图2 加湿器9 ]' Q+ a- Z3 m# m4 y
4 ~! u9 y" p3 G  M  x( m* s
3479a9a9c48440a9aad110270c9b97c2.png 9 a7 e! `2 t# b& {
, q, s5 x! J- p/ y' J' \/ G
图3 oled
  I' k0 ?# X* X9 \. `0 g
6 m  Y- p+ V5 I  ]  T0 Q 9bc1c8cec1294bd5b1d720b018445f15.png
& `9 Z  m# ~5 X5 y5 T$ @% o0 |3 }: Y; k8 ^. X0 w
图4 水位传感器6 D. _7 v; M* I( k' v' q
) R3 J- Y/ Q) Q  f" m4 }
aa29624f18914e76a87d1fb3538f4894.png
% c  [6 o. `! t/ H) p' Z! y/ o
2 y0 s+ W- W4 @0 g& D+ P图5 继电器3 }. ^2 f  P, X* \( L
& s; M5 Z; v( ]' @1 O& j
a20b7187703b49f8a3ac1a386b97722e.png
% j& _2 q' R5 _: f/ @+ M4 A! q
. k. ~6 R6 K* U: j" y图6 dht11
. z+ y( M) r# k# Z: x' _
# p2 [$ Z( D4 E. ^& a( { 4bd4ec4d653b4ae292ae9878ec0290b2.png
' `2 G1 a8 W4 {3 s' L
2 ]: x. y. N" J, _% W# G9 G图7 蜂鸣器
3 q8 o* u- x' D9 I' ~8 i% G5 ~5 ^, ^& |) i. N8 t+ }
cf155d6867f9477a960b07bceb677713.png 6 k6 @. D, w5 ]6 _8 z  X

5 }4 x8 j& c8 V二、软件部分

; B( L7 B; N/ V/ l1开发环境 烧入 调试工具
$ y" P, Z  g) a  V. L
& v8 u5 Z8 P1 T# e$ _, ^ bec6cdbadc994ff7bfd3b17a836da234.png , Q+ I! E" ]# i& H# t/ u

/ U- Q5 V' Y7 h6 j/ b- f2 主程序
, `8 }) Y2 h! t
" t: \3 e, Z! l8 S
  1. /************************************智能加湿器系统********************************
    / L. r" V1 R( r' e* l' f

  2. 3 Z6 |  }, X6 O' M% B
  3. 1、可以通过按键设置湿度阈值。
    : r; R/ |+ q+ T4 t( a/ s  H
  4. 2、可以通过按键设置湿度阈值。- E: h9 l( O/ t- i- D5 j

  5. , D, W0 ?, G8 Q; O. [
  6. 3、如果当前湿度低于阈值,则加湿器打开,否则加湿器断开。3、液晶屏幕可以实时显示湿度和湿度阈值。
    $ `' O+ I0 E3 r) ]
  7. 4、如果当前湿度低于阈值,则加湿器打开,否则加湿器断开。3、液晶屏幕可以实时显示湿度和湿度阈值。6 m5 Y7 _% v; Z& A  w2 p

  8. ) u1 r; f6 z' x' W, m
  9. 5、环境湿度测量范围:20%-95% RH,测量误差:±5%。5、具有容器水位检测功能。: K7 W5 c  f8 k* h
  10. 6、环境湿度测量范围:20%~95%RH,测量误差:±5%。5、具有容器水位检测功能。
    3 y1 s9 |( z/ b7 d5 F$ |; i5 d7 n! B

  11. 5 j' ~9 i( |& E+ k( j7 m  m
  12. 系统采用3个不同颜色的LED灯表示三种不同的湿度状态
    0 W) c: b) p1 L3 F$ d8 o* D
  13. 湿度<40  40 < s湿度< 60  湿度 > 60/ }. T5 w# V5 J6 q1 t

  14. ( J4 q& i* h4 ?6 q( `
  15. *******************************************************************************
    7 q, `8 {7 T/ C' b! l6 ^" v7 t" d
  16. Author:xiao yin
    % X2 c9 \$ f. ~0 ]. W
  17. Date:2022-4  y. P0 P) F. |* @. L/ }- d+ r; O
  18. *******************************************************************************/6 v+ l5 G( s2 H) ]/ V
  19. #include "stm32f10x.h"- F2 Y/ l9 o, L" ]$ u/ B
  20. #include "usart.h"# B/ T. r6 {. D# j/ ^: P0 w/ D
  21. #include "oled.h"
    + o8 x- H( F& |! k* Y! C8 `
  22. #include "delay.h"! y3 ~' B0 X/ W0 u# Q6 b
  23. #include "led.h"
    6 k0 ?& G7 ?: d
  24. #include "adc.h"
    6 u! }( k2 ^" ?$ |: |+ }
  25. #include "key.h"
    ( ~1 X$ R7 x' g
  26. #include "buzzer.h"+ G# G, \' U. p/ ]' `
  27. #include "string.h"
    % Q+ W0 N9 x5 M" q8 J
  28. #include "jdq.h"
    $ t6 k- k% ]8 e. D+ j- @6 `% v
  29. #include "dht11.h"' b% k) D) ~% n3 \
  30. #include "water.h". _7 E2 E% {% V8 b

  31. 0 c5 O5 N: U8 Z, n! O
  32. 0 ~/ Q8 @9 }9 C9 J
  33. uint16_t i;1 h+ f% O, F$ y, |" m
  34. uint8_t k;
    6 q5 a* U; r, L( [% A3 a9 X
  35. uint8_t kk;
    # L& X' A3 y# W4 F+ q* o! _
  36. uint8_t kkk; //温湿度变量相关
    ' |' B2 b5 H6 j' E
  37. unsigned char keyvalue;//按键返回值& k9 a$ T- [7 B" n7 d
  38. unsigned char flag;//界面切换标志) I% v' M+ K; ?3 n) b
  39. unsigned char flag_function = 0;//函数功能标志位
    : b; O! V) u8 E
  40. unsigned char interface_flag = 0; //在温湿度实现界面标志
    " N4 W/ m. L( \! _
  41. unsigned char m_humidity = 20; //修改湿度变量 设置初值
    & r, i) R% V0 G& ^
  42. unsigned char Relay = 1;// 继电器状态标志  默认为关   0开
    , e7 V$ j6 F8 M1 J
  43. unsigned char water = 20; //水位高度0 Y+ R/ X/ V- |3 j0 t
  44. unsigned char hfier = 1;//  加湿器状态标志  默认为关   0 开9 l- i. o. |* S' K0 P
  45. extern unsigned int ad_value;' v& b4 O& f! {
  46. extern unsigned int val;
    * L5 y" }" f7 }, v" V: U, i7 K
  47. $ j) R  W/ r2 P5 m# A1 j) h  S' r6 `, j
  48. void main_interface(void);  //主界面
    2 {9 n: n& D. s0 ?+ @" L% Q5 j2 l
  49. void Interface2(void);  //湿度数值界面
    ( e& ^) b7 s2 H/ n' X* i0 z
  50. void Key_Mode(void); //模式切换
    ! B) o2 @+ z  c0 a+ ^
  51. - Z: L! {, c& [3 T0 Y- d

  52. 7 b% }; a3 @) x% z4 W9 e& U
  53. /*********************************************界面显示函数*****************************/
    1 r& c" P5 r: u) E! h4 {& j+ A2 N
  54. //主页面3 r1 b0 i1 ]2 Y7 N, G
  55. void main_interface(void)1 H+ G/ v% Y8 L4 |4 Z3 q+ X
  56. {
    5 Y; w- W7 r( T5 a# L6 E
  57. //                OLED_Clear(0);
    # j5 J3 _+ t. c) {# N
  58. //                delay_ms(10);
    : U  j- ?8 [+ t1 k( y

  59. # R; ]8 |2 V- {7 }5 c3 t" ]& M
  60.                 OLED_ShowCHinese_six(6,0,0);//智
    ) g  X2 }' _, K* ^, m/ l
  61.                 OLED_ShowCHinese_six(26,0,1);//能
    ( j3 {" r. Y1 z
  62.                 OLED_ShowCHinese_six(46,0,2);//加  e0 a! Y) O6 U+ J1 h2 Y0 P
  63.                 OLED_ShowCHinese_six(66,0,3);//湿
    ( q" p% ?; O* m% o( p
  64.                 OLED_ShowCHinese_six(82,0,4);//系' [8 v/ ]( {% }
  65.                 OLED_ShowCHinese_six(98,0,5);//统          , Y3 x0 i  r8 M# ~2 f
  66.                 OLED_ShowNum(6,3,2022,4,16);. m. ^5 t+ Q7 j: t
  67.                 OLED_ShowCHinese_TWO(40,3,0);//年 1 F' P0 O- D: r* f) l( i
  68.                 OLED_ShowNum(50,3,4,2,16);
    " k1 ]: T% p$ q% c1 P' y1 R
  69.                 OLED_ShowCHinese_TWO(74,3,1);//月 , h4 i  q7 G) x/ T
  70.                 OLED_ShowNum(92,3,12,2,16);! ~0 o' U! v5 j# `# \
  71.                 OLED_ShowCHinese_TWO(108,3,2);//日         . u/ ^5 V( e: v: W6 @
  72.                 OLED_ShowCHinese_six(35,6,6); //名字显示
    % h' |5 ]- l" j; b
  73.                 OLED_ShowCHinese_six(55,6,7);
    ! v/ L1 j- B. N, b5 V* x7 S
  74.                 OLED_ShowCHinese_six(75,6,8);, n% r# ^* n" o7 W: k
  75.             \6 `" b! f0 z. f5 W/ w
  76. }
    : ]; u, ]* Z. j, \9 X
  77. / Q4 ?7 @6 p# [
  78. //界面2 温湿度显示及湿度修改值. i2 I) y# ^1 P
  79. void Interface2(void)
    / o4 k) E9 A7 y; f; \& B
  80. {
    ( H: h, m! T2 }
  81.         //以字符串的形式显示
    * B; b" ^% [# Z& ^% N& y  p
  82.         OLED_ShowString(35,1,(unsigned char *)"C_T:",3); // Current_Temperature 当前温度9 ?: p. v' G7 T1 Y0 m
  83.         OLED_ShowCHinese_Three(85,0,11); //C( M9 A9 v7 H6 t+ ?5 E! ~  I4 d1 J; @
  84.         / l: S( c& B9 T! T8 L- k+ f  ]
  85.         OLED_ShowString(35,3,(unsigned char *)"C_H:",3); // Current_Humidity 当前湿度( U2 h1 r0 u9 M2 _; d7 y
  86.         OLED_ShowCHinese_Three(85,2,13); //./ [: W$ ~: K3 ~: |$ g0 l2 {9 J; u
  87.           y3 a6 d- W/ ?
  88.         OLED_ShowString(35,5,(unsigned char *)"M_H:",3); // Modi_Humidity 修改当前湿度- m" _1 ]3 ~* B; |. |
  89.         OLED_ShowCHinese_Three(85,5,13); //.        
    5 G) m& D+ E& D2 K, T; E' ~& i9 z6 \
  90. }
    / x% c  G2 E; r/ s3 [2 `

  91. , u- E/ U3 p5 y& k! t8 T& \
  92. //界面三 水位、继电器、加湿器状态显示
    9 V4 u8 M/ J& z3 A+ Y& @
  93. void Interface3(void)
    ! O4 a; W! [9 Q
  94. {: P; g/ p) Y0 w7 H/ X2 O
  95.         //以字符串的形式显示
    0 y0 V- G! v+ I2 L9 S
  96.         OLED_ShowString(35,1,(unsigned char *)"Relay:",6); //Realy 状态 0-》开 on 1 -》关 off4 {: I7 ]% K5 u4 M  K8 H7 Y
  97.         OLED_ShowNum(88,1,Relay,1,3); //状态值9 W; a0 b9 u8 N1 H2 B4 U
  98.         
    2 K# u! R$ @, C: f/ F9 a* k1 u
  99.         OLED_ShowString(35,3,(unsigned char *)"Hfier:",6); // 加湿器状态 0->开On  1-》关 0ff
    ! ]5 ~' S5 S) T9 U
  100.         OLED_ShowNum(88,3,hfier,1,3);//状态值
    . n: }. G/ f, t
  101.         OLED_ShowString(35,5,(unsigned char *)"Water:",6); // 水位高度
    7 H$ ~2 P. w5 f
  102.         OLED_ShowNum(88,5,water/100,1,3); //状态值2 K" K4 I3 `6 I( B
  103.         OLED_ShowNum(96,5,water/10%10,1,3);; e$ N% \( W# I" v8 `  A, w: k' e+ V
  104.         OLED_ShowNum(102,5,water%10,1,3);8 a$ m0 P: @9 U8 C- h/ W
  105. }
    0 h# T) G: D+ @. `

  106. 1 o; j( l, [6 ^% u$ n

  107. : u  l( V$ S& \4 T; F' w9 c" g8 `
  108. /******************************三种LED控制********************************/6 s) M# E# p) A- n- A1 U9 n+ a
  109. void Led_Switch(void)
    3 m, a6 O, A5 _- y6 y
  110. {5 t+ f/ K' R( V
  111.         //1.湿度 < 40
    , o, M" z4 W3 T8 ]# B+ G
  112.         if(kk < 40): ^1 ~# l8 `% @& p2 f
  113.         {
    3 ^8 h1 w$ z# o' T8 i+ `+ d$ _8 s
  114.                         Led1_on();% C2 s+ G* o' E
  115.                         //printf("led1_on\n");
    4 l& e0 l4 N% x
  116.         }
    2 I1 z2 H8 m7 q" `; f0 R5 F
  117.         else- s9 [3 y6 l# M7 p0 z
  118.         {
    6 e: o4 W8 P4 n( m% F& M
  119.                 Led1_off();. L) }& O( s3 P1 L5 g4 ?
  120.                 //printf("led1_off\n");
    9 P) M* ?; ^4 g6 P+ e2 v  e
  121.         }
    ' ^( }- I0 w, F! G. y
  122.         
    + Y! N! D, t2 O: `* m: x
  123.         //2.40 < 湿度 < 60# s2 Z& c' o) e* f6 h
  124.         if((kk > 40) &&(kk < 60)). S' D* _3 W; r/ i0 X' r9 t
  125.         {9 ~* w) q5 w$ D. M# `$ L$ |+ n
  126.                 Led2_on();
    ' @& z- }" _) r0 |: _  K1 W
  127.                 //printf("led2_on\n");
    + o: M- E5 X4 ~7 l) U* O
  128.         }               
      N: X! }; R4 a  {
  129.         else
    ! D. m5 i- J4 ^1 g
  130.         {
    * h2 S5 E2 O* a+ l0 s
  131.                 Led2_off();
    " W3 m3 f2 ?6 o. X( |
  132.                 //printf("led2_off\n");
      U4 Z, M% E! N7 s) {* C$ N: Z. v
  133.         }- N: A- E; n4 `' E$ [. E
  134.         
    , N! b5 [+ R) x: e5 ^
  135.         //3.湿度 > 60* i+ T3 A% F/ t- W& a+ v
  136.         if(kk > 60)
    4 a. A0 n& @8 Z0 P7 p, \8 A/ r- g9 w: U
  137.         {
    : M7 s: d' Q( R- v
  138.                         Led3_on();: P. c  F7 f5 p( p( v5 B
  139.                 //printf("led3_on\n");4 X: I0 u9 m) u2 r  j
  140.         }
    ; V  _+ Z+ x8 x) F  ~
  141.         else4 m, V( M+ K2 J4 r2 P
  142.         {
    5 v6 E" ^$ I- C1 Z9 j
  143.                   {) _: V  w* ?
  144.                 Led3_off();7 Y+ n9 a) c. w6 k
  145.                 //printf("led3_off\n");8 F2 z" c5 t0 Q9 C( P3 r. Q
  146.         }; _& n! E; Q9 C( I% {' E
  147.                 , s. L% S5 y. R' }  [0 X  k% m9 `
  148. }
    ; e" q$ G( b% p/ d
  149. 2 ?: y7 ^( c9 o( D0 ]
  150. //温度获取函数
    ; v# c+ k' z0 e5 n
  151. void Get_Temperature(void)
    $ S6 F1 G' a% p3 \+ r2 h3 o, {) N5 W
  152. {- D1 {# j* {3 |/ ~0 N/ J$ Y
  153. //                uint16_t i;
      ?. \4 L2 n9 @
  154. //                uint8_t k;
    ; V; G2 H% @% X. o% g& Z2 d
  155. //                uint8_t kk;1 m$ K& M; v- A
  156. //                uint8_t kkk;
    9 O* U; T, I) s9 f9 T
  157. //上面定义为全局 其他地方要用到5 I8 J+ s3 \1 J: F' C
  158.                 DHT11_UpdateData();* G/ f2 V; ^% B7 `2 y1 i0 y! d3 v
  159.                
    * P* k% E7 }6 g9 p, d; b( K# z2 n1 Q
  160.                 i =  Rxbuff[0]+ Rxbuff[1]+Rxbuff[2]+ Rxbuff[3];; r3 r; q& {1 `' m, R4 j7 a
  161.     if(Rxbuff[4] ==i)5 S* z5 c/ J+ J
  162.                 {# K" m: B+ X6 I1 S" O% _
  163.                           k=Rxbuff[2];
    ) [: \: [$ |, `. U; f
  164.                         kk=Rxbuff[0];' ~' ]1 R7 ]* w5 r
  165.                         kkk=Rxbuff[3];
    $ n* q1 o  b1 s( w
  166.                         OLED_ShowNum(68,1,k/10,3,3);1 ~# K  s3 C# v  V3 L! H2 j2 s
  167.                         OLED_ShowNum(76,1,k%10,3,3);. m# a1 U0 L" g  {. n7 e
  168.                         OLED_ShowNum(68,3,kk/10,3,3);% K  l' g3 B- ]* C
  169.                         OLED_ShowNum(76,3,kk%10,3,3);
    4 w5 d( ^+ h: W5 U; t+ f
  170.                         OLED_ShowNum(68,5,m_humidity/10,3,3);  //修改湿度值显示
    % H0 a0 q! L) E
  171.                         OLED_ShowNum(76,5,m_humidity%10,3,3);
    8 ~6 t9 n) q4 t! X3 S2 o1 E  R

  172. ( A# ?( c' S  L$ A# j4 M
  173.                 }
    + k6 J4 R% W" i
  174.                                 Led_Switch();
    * W0 I+ S# f% s$ p0 G* A( J
  175.                         //printf("t:%d  %d\n",k,kk);  //测试的时候通过串口打印数据( [' ~" w3 m' d9 g$ B2 s* g
  176. }9 C0 T( F6 o3 y/ a3 w8 R2 H

  177.   M/ ~/ a3 H, ]7 J, d: ]: y. p" w9 v
  178.   N. h" n4 y2 }& p
  179. /************************************功能函数********************************************/
    + w; z( H* a; U+ J) Y2 P+ D7 r* l3 p

  180. ) Y  F. d) @! d$ y5 F
  181. //通过按键来进行界面的切换( s/ {( s6 }$ X! K- u) U+ A
  182. void Key_Mode(void)
    : |1 h, ~- @, g8 _
  183. {6 |0 z5 q& _+ P3 j
  184.         keyvalue = KEY_Scan(); //按键1来进行模式的切换
    6 _4 A- Y" F, r
  185.         4 X( G% I* c$ C6 N# y  V0 T) U  h5 p
  186.         if(keyvalue == 1) //判断按键1是否被按下 向上进行界面切换
    , C$ y! Q& c: f7 I2 v4 b
  187.         {$ Y& [  Q$ m' F: ^2 V
  188.                 Buzzer_On();
    * @2 L! K6 B. G" P! r7 M
  189.                 delay_ms(100);
    1 Y$ A+ `7 |* q8 T. k1 b" @
  190.                 Buzzer_Off();
    ' O0 l- D+ ~  _# k6 A" V
  191.                 delay_ms(100);
    4 @5 a9 a$ x5 w+ f, P5 C2 \  n! @
  192.                 flag++;        
    # S$ b. u3 c3 M9 R' t
  193.                 if(flag > 3) //界面边界处理
    3 e1 t' `5 q: ^( J: u1 _
  194.                 {
    6 b: H, C' ~, k4 |4 v! P
  195.                         flag = 1;7 T4 ~8 o2 q% X1 \! y. v; _  l
  196.                 }1 ]/ s7 T# E. i. W
  197.         }        
    1 Z  u/ q& I5 J% V* p! N, n
  198.         if(keyvalue == 4)  //向下进行界面切换3 B1 c* S4 `8 |6 n+ U# _$ s+ S
  199.         {
    * }; [2 k& W' d( C5 I
  200.                 Buzzer_On();
      v8 l% g0 P* U! O
  201.                 delay_ms(100);
      \& N' f' e5 X# J; ?& h5 A
  202.                 Buzzer_Off();2 G1 ~3 C2 t$ m) }+ V
  203.                 delay_ms(100);        
    / [6 |2 K7 V% K- ]2 B. B9 {! l
  204.                 flag--;
    : z; |6 ?; t- S0 j! s; l
  205.                 if(flag < 1)  //界面边界处理' s" n2 ~: k& c+ v' k: J. ~7 y, ~% i
  206.                 {
    ! W7 B/ T: b1 ^2 t% r
  207.                         flag = 3;
    1 t% c6 Y0 v9 g+ c3 z
  208.                 }
    : H. F' k& l5 Z' j
  209.         }
    7 V9 o5 B! ]/ j, U" C7 Q, ?$ S
  210.         if(flag == 2) //按键处理 进行湿度修改
    : e$ \* A/ |( a% D
  211.         {
    " f. p9 ]: o+ K6 i
  212.                
    5 F8 F$ D2 v' t( D" b
  213.                 if(keyvalue == 2)- S3 I3 o. o& R! v" x! }6 q
  214.                 {
    8 l& v. S7 Q  ]7 {
  215.                         Buzzer_On();
    5 s4 x9 K4 j* J' L5 I
  216.                         delay_ms(100);. X) f+ E0 o3 T8 G
  217.                         Buzzer_Off();
    - [7 d: h& e/ J6 q' k. z$ u
  218.                         delay_ms(100);
    , [% Y$ {5 T! k6 t
  219.                         m_humidity +=2; //每次加2
    & ~9 {7 L1 Y3 m" I' @
  220.                         if(m_humidity >= 95) //边界处理最大95" B( f+ b: E) y6 K8 W8 w' B1 Z' p
  221.                         {
    5 n& e0 S; W. Q
  222.                                         m_humidity = 20;  //超过最大值重新置为初值! U% y8 z. @8 d! l" f
  223.                         }' {" m5 F. q( [) U" o* }
  224.                         2 M- M1 c$ Z5 z6 }) k8 W
  225.                 }
    * F+ r1 i  l/ X8 l
  226.                
      |0 Y, n8 w" _0 ^
  227.                 if(keyvalue == 3)4 {( Q. {8 d& h, |, B% N) u
  228.                 {  t8 X* |- |9 u/ ]6 m) H6 M
  229.                         Buzzer_On();
    4 S# Q. u% e3 {
  230.                         delay_ms(100);
    " G, s# y6 `# w/ P* ]
  231.                         Buzzer_Off();2 e: p' a  o. R
  232.                         delay_ms(100);
    4 Z( u$ t0 t- |- L( }
  233.                         m_humidity -= 2;//每次减2* J( y, z4 u$ x
  234.                         if(m_humidity <= 20) //边界最小处理! ]8 Q2 s. l7 v4 V. c: K0 p1 F
  235.                         {$ w9 j- G5 g; U6 r0 Q% }7 i
  236.                                         m_humidity = 95; //小于最小值设置为最大值
    & ~# F; A7 \. G& D
  237.                         }        + M0 C! x4 Q; c
  238.                 }  v+ g. D3 T  P4 L) I
  239.         }5 _0 U- k5 X3 U; h6 f$ V/ U9 j
  240.                 " ?/ a: S; W: \/ P
  241. }* A1 v+ m+ ]& i4 {" A$ R

  242. 3 b8 Q7 l- u+ Z

  243. 2 c: i, K! ]/ l2 p
  244. void Relay_Controal(void)& N4 W3 Z# D4 x; U; \4 O
  245. {
    . U) O9 c) L; q6 v) e: q" u" S
  246.                 unsigned char i =0;//次数
    * t- t4 ]5 ?% m0 r* a# p+ e! R; ^, c
  247.                 //通过比较当前湿度与我们设置的阈值 和水位控制继电器的开与断; F& k" f1 u' A- V! b
  248.          //当前湿度小于我们所设置的阈值 打开继电器进行加湿7 x( ~( s$ r) F9 ^9 D; A1 D- v& n
  249.                 if((kk < m_humidity) &&((water !=0)))3 a; _9 a3 q1 m) N2 y
  250.                 {) _- U6 }* |0 _. |, O0 f, I
  251.                         Relayopen();
    1 X% x9 Z/ o+ v- h
  252.                         Relay = 0; //打开标志: [# X- q7 A( y" K8 ?0 h
  253.                         hfier = 0; //加湿标志7 W) f; E# K/ q$ D
  254.                 }
    7 }0 ]; A' ~: Q. j. @- F
  255.                 else if(kk > m_humidity)//关闭: }. H- ^* b# l- W6 t
  256.                 {
    7 V4 |% v& |' @, a4 y
  257.                         Relayoff();% E3 L: d$ z2 O) q/ |
  258.                         Relay = 1; //关闭标志
    # s( b$ Z' j) ?, S
  259.                         hfier = 1; //加湿标志
    ) \" p4 v# |- }  X' q8 z% n
  260.                 }        
    + {5 U/ F2 l- a3 p4 c, v
  261.         //水位为0 是发出警报/ Y- ]- ~- I( f5 V
  262.                 else        if(water == 0)
    & b9 b9 h' L$ t) V+ ]
  263.                         {0 J" {$ m- u3 G) K# U; ]
  264.                                 Relayoff();
    ( y8 E, `$ |1 z( W' a. z
  265.                                 Relay = 1; //关闭标志8 q. p/ J8 Y9 N( @% _
  266.                                 hfier = 1; //加湿标志
    ) Z$ e) w' b/ G8 v# _" k. V, l/ f
  267.                                 for(i =0;i<5;i++)
    % _6 j2 u( B2 r3 P  I- h7 p# d# n6 |
  268.                                 {  m9 B) C8 e/ n
  269.                                         Buzzer_On();0 v) W0 b: d$ ?
  270.                                         delay_ms(100);2 B0 w* i' ?" \6 i% j
  271.                                         Buzzer_Off();
    / f: F/ p# Q2 x, T) `
  272.                                         delay_ms(100);
    # Y6 O% u- [- d7 U2 S( f
  273.                                 }
      n0 @: z- j- v% C
  274.                         }               
    , o/ E# M1 ^# ?: \
  275. }
    " G& z. |6 S' {
  276. 7 d, ?; i3 Q$ m
  277. /*****************************************主函数*********************************/
    2 L4 B& p* |( U1 i
  278. int main(void)* m. j2 P. M' v  @1 Y* A
  279. {                # l: [8 e& ?* p' Z
  280.          KEY_GPIO_INIT();//按键初始化
    & s1 r- T* q+ j0 T# J" p
  281.          USART_INIT(115200);' P* p- q' v1 @3 B: D- B
  282.          LED_GPIO_INIT();// led初始化2 x$ i) h& F. j0 T
  283.          InitRelay();; _, M/ l: }. P: N( ^& E
  284.          ADC1_Init(); //水位传感器初始化* x) Z- s4 R/ ?3 h2 G  V0 e
  285.          Buzzer_GPIO_Init();//蜂鸣器初始化
    - E- J5 v2 O8 v# {
  286.          OLED_Init();                        //初始化OLED  
    ( P  ~* J. I: U0 W& r; M
  287.          OLED_Clear(0);        " K0 p) P: |+ X$ u2 w9 F, F6 ~  f
  288.          Relayoff();        
    2 N+ T" ^( e( T% T5 R* n9 b& S
  289.         while(1)3 v! |6 i' @5 z+ y( X4 }
  290.         {
    ) m! q" L- F' L8 [( a

  291. ; `1 ~$ ?" \& ]! v5 s/ I1 ?2 @+ b# T
  292.                 Key_Mode();7 d/ {  b" r% }
  293.                 switch(flag)' ^' Y* Y1 x# _* ]# M# P( x. g
  294.                 {* j% ~6 _3 F! h; @
  295.                         case 1: OLED_Clear(0);main_interface();break;
    " a; h) p4 ?; J- i, A( H
  296.                         case 2: OLED_Clear(0);Get_Temperature();Interface2();break;) h9 I+ V3 y6 m6 l3 u8 y* j# K
  297.                         case 3: OLED_Clear(0);Interface3();break;& y) g. D8 I! @: c# v
  298.                         default:, _& m  Q/ b& ?( T' ]& _% h( e
  299.                                 break;, N3 J& @/ e5 o# T9 U2 a
  300.                 }
    9 ]2 P' q8 {* S
  301.                 Relay_Controal();
    6 _# _; c- f1 p% U, L+ U
  302.                 Led_Switch();4 A$ w/ R& Y8 B8 P0 X
  303.                 water = water_Get_Value();
    , L9 o  c7 q! g- B; y( z7 v+ g

  304. , @/ j7 n$ `5 K* r& Z2 F8 I; u
  305.         }- ~" c# T& D- m6 a0 A+ }
  306. }
复制代码

& a: C2 J6 e, N三、效果图

/ b: T8 |4 _8 n. _3 s) g- _
2 V7 E: U! s% J: D! d接线有点乱 整体效果还是有的
3 i" |  e5 N* k% ^5 u9 H
# S% Z( x$ P0 F, D ab2cb9f738524a8abf543e0b03d9f0af.jpg ) E+ V" Z9 W  e$ J

: A* v/ T% U, T 81f2cff405e640fb8ca470f8df58cfe7.png 9 F+ F/ I6 U, M# I
e6216eb71d264581826485a2adfd5e69.png
1 t  F& R  }0 H8 \$ B' S1 g# x( n. e. |1 d$ Z
————————————————6 w$ u6 z$ n9 |9 C" W; A0 X; W' ]
版权声明:@slow-walker8 p$ Z2 \& P7 f& T* a/ z$ o+ ^/ N

5 g7 M2 D$ ]& m* f& [- R/ s- c$ o" I
赞 收藏 评论0 发布时间:2022-10-27 17:35

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版