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

基于stm32c8t6的智能加湿系统

[复制链接]
STMCU小助手 发布时间:2022-10-27 17:35
一、硬件部分. N+ h( Q* n3 v
  u) m" y: Z& r# y( m4 o
~US{9PQYR6H2}($P]4B@15N.png & z/ I0 m* y8 M2 F, \
! m2 d# g1 l4 p% u: @1 j& l
图1 c8t6" f( o* o: }- W# l# x+ \+ X
1 a# [/ \$ e! e5 N2 o: ]( f: f! F
56ef8cda98304a4bb6a6925e6032a8c1.png - ~" w1 _5 }3 ]' c! x

; q& p' O% t0 c图2 加湿器
. i3 c/ T( `" A8 V# i8 @3 t. l1 K" O! |$ Y# ]! ]/ A
3479a9a9c48440a9aad110270c9b97c2.png ( E: C9 Z4 _1 m; q) G
  f5 T6 Q5 r( P& j
图3 oled7 b: C& i0 l$ x5 w9 W6 Q+ \

! b; u- r3 E1 p1 f6 I4 `9 ^ 9bc1c8cec1294bd5b1d720b018445f15.png $ b3 M9 a$ o1 y; l

: N5 n' t+ r* O/ Y1 d" K3 S2 X9 N+ j图4 水位传感器' x7 z% }$ M  U' ~5 Y: v
* t! P5 m+ F1 O/ e2 M4 ?: t
aa29624f18914e76a87d1fb3538f4894.png . p% H6 \/ @0 m5 H, P  \! K

! w8 ~& r) s# ?' k; M" R7 Q$ Z; j图5 继电器
$ X: i* w8 q4 d- T* |" j' b- H. a0 B9 }: J8 h5 Z; k
a20b7187703b49f8a3ac1a386b97722e.png
6 j1 F, T+ b6 K
# [3 z' C; _/ ]$ P; @图6 dht11
5 d7 |2 V  c' X2 k$ U  }# Z- N& z* H, k* r, X+ N8 w1 Z
4bd4ec4d653b4ae292ae9878ec0290b2.png ' I, ?4 p, s8 V: U1 W: J

- P3 X8 }$ L, ?$ L图7 蜂鸣器+ P0 L' T2 h) X# k

4 m" \9 n. b0 l" q' V cf155d6867f9477a960b07bceb677713.png 9 C# l' b0 F. L% Y1 ?
% ?* W% w) r; q( G" e- \* A
二、软件部分
. T1 G0 Z6 U6 R  }# A/ ~. j1 T1 }
1开发环境 烧入 调试工具* h1 R5 B& ^8 A4 [4 D
, P" e! [% Z7 }( v5 d; E9 d
bec6cdbadc994ff7bfd3b17a836da234.png
% }; }7 p+ c$ ?; [3 I4 d% a, m3 ]$ e+ v' t0 Z0 V4 k7 ?+ X
2 主程序  V  \0 E! t  y2 [! k
# b( q3 t/ g! U
  1. /************************************智能加湿器系统********************************
      O. n1 Y+ M# q( `' M
  2. " t, E8 K; U  w$ Q5 t+ V
  3. 1、可以通过按键设置湿度阈值。
    " v  u7 d( D9 m5 i! |* c9 S
  4. 2、可以通过按键设置湿度阈值。
    $ ~. V6 ]1 Z3 \/ g) S' i; ^+ O; K
  5. 9 q: j4 S2 G* R& q
  6. 3、如果当前湿度低于阈值,则加湿器打开,否则加湿器断开。3、液晶屏幕可以实时显示湿度和湿度阈值。
    & [7 o. n. w3 }+ n
  7. 4、如果当前湿度低于阈值,则加湿器打开,否则加湿器断开。3、液晶屏幕可以实时显示湿度和湿度阈值。
    $ x# u4 r( b+ c3 l5 |

  8. * l/ ~, F* N. v* K: L7 q
  9. 5、环境湿度测量范围:20%-95% RH,测量误差:±5%。5、具有容器水位检测功能。0 |$ `; m/ Q; f) \; R
  10. 6、环境湿度测量范围:20%~95%RH,测量误差:±5%。5、具有容器水位检测功能。! Y! F) j/ H! o

  11. 7 B2 A+ N+ d4 B7 k  {
  12. 系统采用3个不同颜色的LED灯表示三种不同的湿度状态( m8 W* I  V7 L7 o) T$ f+ G
  13. 湿度<40  40 < s湿度< 60  湿度 > 60
    ! W/ V7 C+ i- J  M
  14. * c7 q/ [  A9 G/ G% n. t
  15. *******************************************************************************
    " K* }2 v- W) u* c7 q1 K2 d
  16. Author:xiao yin
    6 f, i+ R# O' {2 N' a0 F! @
  17. Date:2022-4/ p5 D$ v5 y4 }9 f: N7 ^
  18. *******************************************************************************/
    # u/ I; @) }/ l8 ^
  19. #include "stm32f10x.h"
    & W  W; k  }0 t8 M) m  ~3 p
  20. #include "usart.h"8 H+ t/ q7 Q2 H
  21. #include "oled.h". W5 _" V5 D/ o" E* V
  22. #include "delay.h": v' {2 Z  X0 V+ F4 F
  23. #include "led.h"1 n' I. B' B5 r/ l8 a+ u$ q
  24. #include "adc.h"
    4 x. U2 `/ `+ W5 y& E: P' E
  25. #include "key.h"; J1 t, S1 {, ^4 _
  26. #include "buzzer.h"
    9 j0 K3 b9 e( Q0 ]# e" S
  27. #include "string.h"& g8 F/ k: Q2 |/ r
  28. #include "jdq.h"
    4 c) ~0 S/ g3 g2 ?1 b  v
  29. #include "dht11.h"
    # b8 r; z( Z4 W5 b- q7 }
  30. #include "water.h"
    & h4 e8 x' R- p& i( P; p
  31. 1 u$ o  |; V* L4 |5 A
  32. " ~  i; Y5 t6 K2 r* `/ l7 B1 F
  33. uint16_t i;
    $ K5 |. n2 X3 B' P- y3 j. z6 z/ k
  34. uint8_t k;% q3 H) P, E1 n
  35. uint8_t kk;8 t0 ~( T5 N) g1 s4 Y
  36. uint8_t kkk; //温湿度变量相关: |+ u# w9 I( o; k% R
  37. unsigned char keyvalue;//按键返回值3 `0 d: E4 n. h: o
  38. unsigned char flag;//界面切换标志3 T& G9 P& V6 y+ [, F& d
  39. unsigned char flag_function = 0;//函数功能标志位
    / `* h5 d+ x3 g# u  x  K; C
  40. unsigned char interface_flag = 0; //在温湿度实现界面标志
    + z8 X1 \- |3 h- l
  41. unsigned char m_humidity = 20; //修改湿度变量 设置初值1 N" n9 j& i% G7 B; k( S
  42. unsigned char Relay = 1;// 继电器状态标志  默认为关   0开
    . U! Y( O- |: `' N# B
  43. unsigned char water = 20; //水位高度
    8 w2 P; Y; k' N1 @8 E
  44. unsigned char hfier = 1;//  加湿器状态标志  默认为关   0 开# P/ c4 A( m0 a) ?- l  X# n2 M
  45. extern unsigned int ad_value;+ Y; ~' M& K. [0 U  D0 R
  46. extern unsigned int val;) u7 Z( t; S% i- T9 @7 x  d7 D( D3 u
  47. & |8 v3 E" Y3 C6 A$ ]
  48. void main_interface(void);  //主界面
    8 l4 g6 R) E+ M. b5 c
  49. void Interface2(void);  //湿度数值界面* P+ p2 d8 W) l+ U- D4 \+ @2 M2 V/ I
  50. void Key_Mode(void); //模式切换1 p* E4 e/ }- t2 R6 Q( j( s. V

  51. 9 ~. f1 t6 v: V; U  Z1 @2 P0 j

  52. * s. O# y% X# T
  53. /*********************************************界面显示函数*****************************/
    5 J5 i0 R+ M6 H# T
  54. //主页面
      q  I7 q7 s% B- W
  55. void main_interface(void)
    # `* r& H# h; f' h4 T* f
  56. {
    9 O1 E/ N5 k: h( \
  57. //                OLED_Clear(0);) F$ s1 r* N) U+ m% r1 R9 {
  58. //                delay_ms(10);
    , N1 V' c0 U+ h

  59. $ e. V: v" a; h" R
  60.                 OLED_ShowCHinese_six(6,0,0);//智
    1 S+ t# {3 h  y/ v2 x, _; }" W
  61.                 OLED_ShowCHinese_six(26,0,1);//能
    3 C  m* H% W% {, [! P( O7 d7 z
  62.                 OLED_ShowCHinese_six(46,0,2);//加) w! j( w/ ]3 ]+ }+ a- h
  63.                 OLED_ShowCHinese_six(66,0,3);//湿2 @( U* C2 }& a  d. C
  64.                 OLED_ShowCHinese_six(82,0,4);//系7 G$ P' [- h0 t2 L
  65.                 OLED_ShowCHinese_six(98,0,5);//统          % U/ a* s7 q# l5 A& o2 x: s
  66.                 OLED_ShowNum(6,3,2022,4,16);
    0 }6 p  C8 \% E8 q' Z/ k. F0 U; W
  67.                 OLED_ShowCHinese_TWO(40,3,0);//年 + N- c% z1 [7 k, j% `7 j
  68.                 OLED_ShowNum(50,3,4,2,16);
    ( _8 g: C# p/ \& Q' Z' k2 K' j! h
  69.                 OLED_ShowCHinese_TWO(74,3,1);//月 " j, {' p4 _. g/ P- M9 P7 @. U
  70.                 OLED_ShowNum(92,3,12,2,16);
    8 I% m6 {2 o4 ~1 p
  71.                 OLED_ShowCHinese_TWO(108,3,2);//日         
    + C: b" n  N' {. L. Q
  72.                 OLED_ShowCHinese_six(35,6,6); //名字显示5 q" \* d, V& J+ a0 L) Y
  73.                 OLED_ShowCHinese_six(55,6,7);" n& O, m3 F' @) |
  74.                 OLED_ShowCHinese_six(75,6,8);1 `4 f( W) y/ a5 D, w
  75.          
    ) X8 J0 h' F3 @' s9 E# U
  76. }
    : D5 p  n/ \4 T8 f* O! t4 ~. S

  77. + A( k% O7 j& p3 G: C( C
  78. //界面2 温湿度显示及湿度修改值
    5 [  e3 I8 M) z
  79. void Interface2(void)
    - |9 H+ H$ Q0 N* ~; f8 f
  80. {
    / {* J* \& ^9 p' C  x: a
  81.         //以字符串的形式显示
    - L0 J+ `% w+ B' _3 W
  82.         OLED_ShowString(35,1,(unsigned char *)"C_T:",3); // Current_Temperature 当前温度) V1 L3 V5 W1 n% M
  83.         OLED_ShowCHinese_Three(85,0,11); //C1 @) H( F  z$ U* S! l$ T+ I$ p
  84.         " Q5 s. [; R& b- K
  85.         OLED_ShowString(35,3,(unsigned char *)"C_H:",3); // Current_Humidity 当前湿度; N, P) f7 A  r# [
  86.         OLED_ShowCHinese_Three(85,2,13); //.1 z# i3 s) Q  u. Q
  87.         
    6 Y, m2 \6 t, l3 M
  88.         OLED_ShowString(35,5,(unsigned char *)"M_H:",3); // Modi_Humidity 修改当前湿度
      X8 `& I. P' C- s  H$ i. C! }
  89.         OLED_ShowCHinese_Three(85,5,13); //.        
    8 A# ?# A2 m3 d; k% P" S" S
  90. }  v1 _: L) a( p' H
  91. 3 [6 I; u" |  [/ n  X2 l6 n
  92. //界面三 水位、继电器、加湿器状态显示! p; r7 @$ Q  R! w( |2 ^/ h
  93. void Interface3(void)1 B3 Q1 R' P& g9 O1 N
  94. {- @1 s# p: c8 X' F1 j+ r2 T. O! Z
  95.         //以字符串的形式显示
    ! S( J  e$ E9 p+ \( Y% d) x
  96.         OLED_ShowString(35,1,(unsigned char *)"Relay:",6); //Realy 状态 0-》开 on 1 -》关 off
    3 h6 b6 s. `8 p5 ]: ^( h
  97.         OLED_ShowNum(88,1,Relay,1,3); //状态值2 O5 J0 f7 s) ~5 J3 Q
  98.         
    7 ^% D# i/ h/ s8 d
  99.         OLED_ShowString(35,3,(unsigned char *)"Hfier:",6); // 加湿器状态 0->开On  1-》关 0ff( Y: L8 ]! d5 R5 G2 x# j: M
  100.         OLED_ShowNum(88,3,hfier,1,3);//状态值
    8 d9 p2 L( N9 w
  101.         OLED_ShowString(35,5,(unsigned char *)"Water:",6); // 水位高度; X% `* M2 p% k0 f
  102.         OLED_ShowNum(88,5,water/100,1,3); //状态值8 @# Z! \6 ]& W) R  K7 t0 y; M; e8 Z
  103.         OLED_ShowNum(96,5,water/10%10,1,3);! |& i- A$ [% K* z
  104.         OLED_ShowNum(102,5,water%10,1,3);/ A. C7 t- e* y7 @' A% C# R  q0 C5 A
  105. }
    - V. z8 J5 u  b) L

  106. 3 f3 p8 ?& h  `$ X: q2 }
  107. - R) r, t, U4 {8 g" I% z
  108. /******************************三种LED控制********************************/+ O! t3 W5 x% I' X6 P9 b
  109. void Led_Switch(void). K3 n6 F6 j2 ^4 ^3 g7 u% V7 S1 G0 x
  110. {. ]0 a9 q4 C& I4 P" [! Y
  111.         //1.湿度 < 40
    " O$ Y7 W# {0 C( X5 N
  112.         if(kk < 40)
    0 T8 p- z5 H. h. Q4 x
  113.         {
    ! n7 N( Z+ Q4 K; {" c
  114.                         Led1_on();
    ! J  H+ q  U7 {# X$ F# c
  115.                         //printf("led1_on\n");
    & F5 T3 h. n7 \
  116.         }
    - X! h2 |1 \" ^/ Q' o
  117.         else
    7 I" g; [$ l" C- t" q. U0 i
  118.         {
    # n8 c; d5 H, s9 x7 w
  119.                 Led1_off();2 _0 R( M7 E* r* A# h7 W
  120.                 //printf("led1_off\n");2 H  A6 a, K2 B1 ^& M' B) g# o, a6 S
  121.         }+ T  @6 s/ \: v- j0 v# g6 H
  122.         . K5 g2 U7 I% |8 f4 x
  123.         //2.40 < 湿度 < 60- e0 x' g+ G% j$ c+ S
  124.         if((kk > 40) &&(kk < 60))
    9 q$ [7 l1 ]: J0 a3 u
  125.         {
    % p5 ?, H! e. l3 X( v
  126.                 Led2_on();. D9 F) I5 C1 x4 _0 U% c, R$ x
  127.                 //printf("led2_on\n");) B0 L, I8 T* `
  128.         }                + U. @" O9 r: D2 T4 f' `
  129.         else
    7 c7 o" l' f- d! L0 R
  130.         {/ Q+ \! A% \& F4 Y  Z
  131.                 Led2_off();0 I" ^6 W- X% j! e3 Z
  132.                 //printf("led2_off\n");3 b% R  F. K4 j. X3 r- X
  133.         }) U, @' g5 S% r0 X! J- q1 h
  134.         # L( f; ]1 E7 y3 ]2 Q8 _: C# r4 F
  135.         //3.湿度 > 606 y) v8 A) ^6 n; g! x' v% L3 v: u+ ?0 u
  136.         if(kk > 60)) ^- j$ u8 ?7 U0 B
  137.         {
    ( c$ [8 i5 }" q! @* q) y: l9 ~; R
  138.                         Led3_on();6 a" w; [( ]9 T
  139.                 //printf("led3_on\n");9 w' Z: ]# R' D, I- H9 Z$ p! v' `
  140.         }% u. s4 q9 c' G& N1 e- R
  141.         else' s7 y: T, G; z; W/ }6 v
  142.         {
    - J  L  x) t/ c4 s
  143.                
    ( i0 S$ i" K  d  {  l& N+ L2 t$ r3 o
  144.                 Led3_off();1 d% A7 U& K' l! y. K
  145.                 //printf("led3_off\n");8 U, J9 u# a# _9 e7 }5 N4 B1 F
  146.         }
    3 @5 `. b; c1 O" i' |
  147.                 8 O: |2 X7 G9 ]; h3 w2 T2 J4 `" y- H
  148. }
    + d, I7 b# |- {4 F! F+ @% t
  149. 0 ^! s1 J; _, S
  150. //温度获取函数
    " A- l$ }: K/ h4 h& g; H, P
  151. void Get_Temperature(void)
    0 m, o' ~% \( s1 u7 e- Q( u4 \
  152. {
    4 b3 H3 Y- `! p$ ]. {. e
  153. //                uint16_t i;
    $ l8 r( K) {' K3 x4 ?
  154. //                uint8_t k;4 X  c! h: H2 h
  155. //                uint8_t kk;6 \1 V" P8 q4 n8 y* ^1 @
  156. //                uint8_t kkk;
    7 r" y1 }" j& {# Y
  157. //上面定义为全局 其他地方要用到
    , E. y1 X& @) R0 ]% J
  158.                 DHT11_UpdateData();, g2 B* k$ H% j: n( X
  159.                
    1 q. V4 R) @( ?3 _3 B( k
  160.                 i =  Rxbuff[0]+ Rxbuff[1]+Rxbuff[2]+ Rxbuff[3];
    1 u& j% ?  V9 S( c; E5 s- X
  161.     if(Rxbuff[4] ==i)
    ; W! i& n- \, p% w8 s- H3 d3 E' I1 u
  162.                 {
    * P- t$ n, y2 m( K# o
  163.                           k=Rxbuff[2];
    7 d/ X7 h9 _8 N7 @. l1 C" k3 `; u
  164.                         kk=Rxbuff[0];# i" I( A6 E& C" i
  165.                         kkk=Rxbuff[3];' U$ P9 F. f0 U7 u" m
  166.                         OLED_ShowNum(68,1,k/10,3,3);
    : C+ b3 Y1 J  z, h
  167.                         OLED_ShowNum(76,1,k%10,3,3);
    * x8 X: {& W  n# a% h
  168.                         OLED_ShowNum(68,3,kk/10,3,3);- O* j: q6 k- d" r+ H6 N2 n
  169.                         OLED_ShowNum(76,3,kk%10,3,3);% K1 `; E3 [* g3 y6 f/ g
  170.                         OLED_ShowNum(68,5,m_humidity/10,3,3);  //修改湿度值显示
    9 J+ D: t/ K. Q, _- m, }, R, m
  171.                         OLED_ShowNum(76,5,m_humidity%10,3,3);% K0 a. E- S9 l- J$ l  c6 Y! W

  172. : E" r( M  i) y: `
  173.                 }: F1 i: [" p: y( n1 P$ ]- l
  174.                                 Led_Switch();
    1 |$ |% ]8 M7 m4 r( [, ^; U
  175.                         //printf("t:%d  %d\n",k,kk);  //测试的时候通过串口打印数据
    . ~9 J; X  v4 z1 G" c* P3 H" B; q2 r, S8 h
  176. }. T7 B" l& [5 R! Y
  177. : E0 D+ @+ v. y8 g' ^) I" L. T

  178. / Z; f& q, ?+ O, E- _
  179. /************************************功能函数********************************************/* n+ i' V3 K0 ~. w+ O. d2 w, @

  180. ) F+ Z- T& U) T0 o) e0 i
  181. //通过按键来进行界面的切换
      H$ R$ h* ^! ^' Y4 `5 T7 @
  182. void Key_Mode(void)
    - m5 J7 h6 C- W6 `" u
  183. {. y! [  Z* _3 r% T
  184.         keyvalue = KEY_Scan(); //按键1来进行模式的切换
    , r. ^5 ]/ _- P( o  R8 Q5 X5 u
  185.         / R/ H: F: [. ]% Y: G1 P& v/ `
  186.         if(keyvalue == 1) //判断按键1是否被按下 向上进行界面切换
    " `3 E1 D0 h# R2 e- b8 G! P# t0 B
  187.         {3 A; _( d+ o+ Q9 W4 F
  188.                 Buzzer_On();
    5 ^* O9 X% A. l
  189.                 delay_ms(100);
    7 v4 D, j1 s; j8 j; H5 ~
  190.                 Buzzer_Off();
    7 E6 _& @# M- [, W0 `
  191.                 delay_ms(100);
    ) J$ |1 P1 w$ ^- @
  192.                 flag++;        # r& x( O+ b5 k9 v3 ~
  193.                 if(flag > 3) //界面边界处理
    * A9 p, O2 C$ H8 u' B' P
  194.                 {( r% y* e; m  V1 h, C; `
  195.                         flag = 1;
    4 x- z; Y1 A$ E+ _  i% |! S% d
  196.                 }
    9 z3 A) Y; O' Y* r* ~
  197.         }        5 g* E) ]; h% l7 F4 m6 e1 z
  198.         if(keyvalue == 4)  //向下进行界面切换
    3 i" D1 k1 w% m0 H
  199.         {0 i. M& k# E# T2 x4 G" u  M
  200.                 Buzzer_On();. K7 {( z8 O) R; ]/ _9 l% |( [
  201.                 delay_ms(100);8 V9 q7 x3 K3 _3 n& Y$ ~
  202.                 Buzzer_Off();% z1 H7 q: c! \2 \  }
  203.                 delay_ms(100);        
    + D8 u2 _; R( |+ f
  204.                 flag--;
    ! T$ ^* h0 v$ z( w5 r$ A
  205.                 if(flag < 1)  //界面边界处理6 }" k  H2 a( E: c# s7 A  L
  206.                 {
    2 K4 x6 E( ]& {/ h  B
  207.                         flag = 3;/ M2 |* ?7 ?: `6 `
  208.                 }4 k7 n+ s% u7 r8 m' Y) a
  209.         }
    : L* c, Q/ C5 s" d: n
  210.         if(flag == 2) //按键处理 进行湿度修改" `! N1 j7 H( P& K. e/ e4 _
  211.         {
    & P) w; a3 K( t' L
  212.                 ' h7 c& P% t) L& K
  213.                 if(keyvalue == 2)
    8 |6 R: x* b) W$ w: Q
  214.                 {
    ' Q$ E8 j/ x* i  L+ C
  215.                         Buzzer_On();1 z/ {  @  w  p7 ]
  216.                         delay_ms(100);
    8 O) B# w5 R8 |: ?  B2 o
  217.                         Buzzer_Off();! n4 Y7 e- `0 m& a
  218.                         delay_ms(100);
    - t  C7 q% @3 V! B& m
  219.                         m_humidity +=2; //每次加22 Z/ |( I* `0 `( J- x2 ]( K0 C3 H
  220.                         if(m_humidity >= 95) //边界处理最大950 c2 r, J1 ?4 X% l6 U* i
  221.                         {
    3 {6 A- ^' O5 e. ?. N
  222.                                         m_humidity = 20;  //超过最大值重新置为初值
      D' T6 N5 _- e- r5 z" G
  223.                         }$ h5 f" g& z( v, Y
  224.                         . u. _# A& w/ I* T, K. x( Z5 ]
  225.                 }
    : q9 s8 ~4 ]8 j# [" X: J- J' x
  226.                   d) [: c/ ^! @* j
  227.                 if(keyvalue == 3)0 y% @+ F9 T5 u/ X" g& X
  228.                 {
    6 f0 s. x' v" I6 D. }  e  @
  229.                         Buzzer_On();5 a  i, q  ?5 U* G0 k
  230.                         delay_ms(100);
    % i! ?! e# U- }1 u3 ?! p
  231.                         Buzzer_Off();
    $ G% }' Q- G* z8 i( k5 o! @! B
  232.                         delay_ms(100);
    $ H5 E3 k- t/ M' P. b' A6 e) e0 }1 X
  233.                         m_humidity -= 2;//每次减2
    3 F/ e2 z* W2 q0 e' R$ |
  234.                         if(m_humidity <= 20) //边界最小处理
    % K" u( X$ ^* V: }8 e
  235.                         {# S; y/ t9 k: e+ S
  236.                                         m_humidity = 95; //小于最小值设置为最大值( m1 p/ M2 M6 t# ]" j0 s; u
  237.                         }        . N0 _7 d2 N+ c; `3 O9 [2 ^
  238.                 }' Z( P* j' N' U9 `, D
  239.         }, V; j/ i9 O6 q. C" y
  240.                
    ; x; a7 ~& N& b* n6 `3 A2 C3 J
  241. }
    , O8 {2 N) e, K

  242. + M0 A" d0 t( |8 ]. m
  243. 5 a5 m; s/ b1 e& ]; }
  244. void Relay_Controal(void)6 L8 `0 M3 ]1 d2 L- b7 K! D$ O7 p
  245. {3 u, j' b  [. i4 B' l: Q
  246.                 unsigned char i =0;//次数1 [7 \) u( F7 j7 Y8 O
  247.                 //通过比较当前湿度与我们设置的阈值 和水位控制继电器的开与断
    8 d8 Z. u( W: M
  248.          //当前湿度小于我们所设置的阈值 打开继电器进行加湿$ e3 `( [  n; w3 p; u4 e8 C
  249.                 if((kk < m_humidity) &&((water !=0)))
    ' f4 m( ?7 f' V% Y: i' X6 d/ I# D: K5 g
  250.                 {( C3 W8 [! G) u: g+ l
  251.                         Relayopen();2 c5 U& A. J9 k
  252.                         Relay = 0; //打开标志9 ?5 y* Z" G# J4 Q2 D2 p- t8 D
  253.                         hfier = 0; //加湿标志3 _. G9 `+ L& l  I' ~$ J4 x# n3 J
  254.                 }
    " h2 J& Z, {' @1 {
  255.                 else if(kk > m_humidity)//关闭+ H$ I/ i5 v% {" N. ?
  256.                 {
    $ y( v. v4 X% k( y: k$ O  K
  257.                         Relayoff();
    ) n7 X: I2 Z; E# e. s
  258.                         Relay = 1; //关闭标志
    6 h3 `) ^8 a4 G
  259.                         hfier = 1; //加湿标志
    $ V! q+ f8 R8 W9 h3 N+ p
  260.                 }        * n4 \5 H3 ^# R( l/ Y
  261.         //水位为0 是发出警报# U  K7 ]6 F1 v7 S" Q2 o2 D
  262.                 else        if(water == 0) - K0 s+ B( s9 m
  263.                         {
    % E6 \/ A/ ~5 _6 K& W7 O
  264.                                 Relayoff();+ Z, l9 O5 r3 W! i8 M! q# \
  265.                                 Relay = 1; //关闭标志6 F1 n3 A0 b- K% C* H' y7 ?" [
  266.                                 hfier = 1; //加湿标志
    5 X2 A' Q) n1 x7 v* ~0 e
  267.                                 for(i =0;i<5;i++)
    + L0 s. ]" v( p" N: Q" D
  268.                                 {# _" S. N0 |* X& v3 c
  269.                                         Buzzer_On();! y! K; P" c& @3 \/ ~+ }& X5 c+ y
  270.                                         delay_ms(100);2 l/ c$ R% g( V1 X8 d
  271.                                         Buzzer_Off();8 ^9 D' J% C+ `2 K- z5 y
  272.                                         delay_ms(100);
    ; `9 o0 j2 ?6 j6 T- l
  273.                                 }' @7 J% N" P1 v. ]
  274.                         }                / S" H7 s4 l8 \% h0 ^4 |
  275. }
    . g& Y& {" k/ p5 G7 q5 Q  @

  276. 2 y8 y. ~0 i* i0 i9 C8 w
  277. /*****************************************主函数*********************************/
    # g, S2 z+ G" T" z. O! O
  278. int main(void)
    7 _: @3 Z7 d# M' ~# ~
  279. {               
      m! q; j! }6 Z5 {4 i2 n
  280.          KEY_GPIO_INIT();//按键初始化
    ( m: w5 |! n$ y  U8 R
  281.          USART_INIT(115200);
    9 I0 d5 d4 i, ?/ `6 L8 |
  282.          LED_GPIO_INIT();// led初始化
    ! P% H2 Z7 o, S
  283.          InitRelay();
    # {3 w+ Y  r! f
  284.          ADC1_Init(); //水位传感器初始化
    - t9 ^7 T( T4 K) \5 C
  285.          Buzzer_GPIO_Init();//蜂鸣器初始化0 |4 i; ]+ Q6 V) e7 m" p
  286.          OLED_Init();                        //初始化OLED  
    ' I; Y. p! w; ?# p: Q
  287.          OLED_Clear(0);        : W- @3 D7 W, G* x' ?( M) @8 J
  288.          Relayoff();        , k9 U2 a1 }" S
  289.         while(1)* }" w' z7 k* Y  ~
  290.         {1 V, i4 M' k3 T4 g  p1 c& z6 Q, t! W% t

  291. 4 R6 L  T* f/ P2 a7 {4 {
  292.                 Key_Mode();% b6 ~/ r6 v$ l& b
  293.                 switch(flag)0 l; g9 M" _9 ]5 ]6 X1 Z
  294.                 {8 K: ]; v/ s7 P+ L2 O! T$ e
  295.                         case 1: OLED_Clear(0);main_interface();break;6 ]7 s' w# F& g8 _) m7 P
  296.                         case 2: OLED_Clear(0);Get_Temperature();Interface2();break;: d! a- t, |0 a2 N" N% \
  297.                         case 3: OLED_Clear(0);Interface3();break;
    ( q; ~8 V; D/ A# F& a$ c' R4 B
  298.                         default:
    8 c( f+ v. @4 e9 L# x$ B
  299.                                 break;
    / O0 V/ x: g6 X5 _, t: v$ N9 N7 l( c! j
  300.                 }
    : C4 e% j: m7 o# R
  301.                 Relay_Controal();* q# }9 R+ `' i1 h  z6 m
  302.                 Led_Switch();+ L4 u( Y  `' D% }
  303.                 water = water_Get_Value();
    , r' ?5 @8 `7 p- A! o) D

  304. # h" K( m' T4 \% {5 R% C+ k5 t! ~
  305.         }
    . z: |  ^9 U% a& Q& f
  306. }
复制代码
. r  h* B5 K+ u+ @9 Q  m3 i+ O0 U
三、效果图
  C+ C. K+ R5 `& U# w; A5 D
$ w$ u! t& u$ o8 t# [
接线有点乱 整体效果还是有的1 \6 F* q# u! ?. u% R
$ Z3 R7 E, ]' @2 J/ j3 ?
ab2cb9f738524a8abf543e0b03d9f0af.jpg
. d; s2 E0 \  u- z( S) z& T0 y2 s' \" ^$ C6 o, m9 Y7 B" V  |
81f2cff405e640fb8ca470f8df58cfe7.png
# x* \. N; I8 f$ M e6216eb71d264581826485a2adfd5e69.png
/ i5 F* V8 @2 ~& u4 q
# r: U7 k! c5 ?3 _: W; [5 a) h————————————————
0 I3 l) a9 z: n' m7 x) x) S" v版权声明:@slow-walker
3 Y; b# M$ m6 v) U& v) _' W$ V* n, f0 ^, `5 {6 }: S2 S* ^# l

% K8 W* ]4 [2 _0 G" n6 S
收藏 评论0 发布时间:2022-10-27 17:35

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版