【MiCO分享贴】开发板光敏控灯 - 问答 - 电子技术论坛 - 最好最受欢迎电子论坛!

【MiCO分享贴】开发板光敏控灯

micolover ( 楼主 ) 2015-8-24 09:31:46  只看该作者 倒序浏览
    话说收到 [MicroKit-3288] 后就一直出差,看到大家都有作品出来 赶紧折腾下别落了大队伍% \7 D9 j2 F+ m, W& V* J
    微信控制RGB的还是有些复杂 暂时没弄通,  索性先来个 根据光线强度 控制RGB灯的小实验吧
* u7 D: A9 P9 l2 o+ L    实验目的:
! |* q' s! p: U& \: U# @2 V0 O         1、采集光线强度传感器数据: w% R" N3 M0 d0 i9 H- r' ^
         2、根据光线强度 改变 RGB灯的亮度4 P# o1 o- J1 o- J, G5 C
         3、通过KEY1、KEY2来调整 RGB的色调' k. {( a2 Z, z% i/ ?- t
         4、OLED屏的信息显示( L. f7 i1 k; q' n( r) M2 K
     以上都是最基本的功能,但拿到庆科的SDK源码后 发现程序封装的层较多  阅读起来还是有些繁琐,但熟悉了后,移植起来会很方便% O; f, |/ w1 \
, p) p7 i+ h- C0 U1 G' x$ W
     实验步骤:
0 p! D6 y9 n# U4 G0 }4 P, T/ v" {         1、下载官方SDK_MiCOKit_V2.2.0.6_Beta   
8 l, y8 }: E. I) t8 J* x. _6 A8 j         2、选择 MiCokit_Enjoy-Micokit-3288 工程
6 S0 b6 T7 Q6 L" ?         3、在MicoEntrace.c 增加如下函数- T& N, i* x. U( j# t! Z3 n! R
            #ifdef USE_MiCOKit_EXT
/ S5 c/ \! P1 {                     if(MicoShouldEnterTestMode()==true){
! V$ n+ p; F) }) U$ E0 k                           mico_log( "Enter test mode by user button" );" @; R5 N8 r1 ^* L6 p
                          micokit_ext_mfg_test(context);  // MicoKit-EXT board mfg test! a& w) Z* v0 I. ?( d  ^& S  l
                     }
6 T4 I# h# A  e6 L                 #endif! f0 Z- Q( W3 s0 F4 Z/ s% }' P
                 micokit_ext_mfg_Mytest(context);  //20150819 ++ //新增加的函数# j1 ]" h1 P8 B+ U

+ O/ y* C* A4 b# k8 W/ P4 k              4、Micoket_ext_mfg.c函数增加 micokit_ext_mfg_Mytest(context);  实体
0 a- `0 k4 H7 _% b3 M' l9 t; `9 U" m+ e, A
! |% n% g7 j& V7 h+ \$ H- Pvoid micokit_ext_mfg_Mytest(mico_Context_t *inContext)) }4 N! U; G8 P/ V7 z+ `* Y) F& v& U
{& k  j' r6 ]" G* N" p! P7 [( R9 D
  OSStatus err = kUnknownErr;0 M; p2 j6 B4 t" k9 Q9 h' E3 Z% q
  char str[64] = {''};
! E9 B$ z! \2 ~# r4 u6 I( M7 v- {5 b! q2 d4 j6 D
  int rgb_led_hue = 0;; @1 [1 w6 J/ B* p  a
) M; P5 k0 o' Z4 `+ L, I
  int light_ret = 0;
" `' {2 R0 i% W  uint16_t light_sensor_data = 0;& S9 |  Y/ R7 f8 w0 J- M- ~
/ L' q2 `1 P# d0 \( B2 ]
  UNUSED_PARAMETER(inContext);5 V" p* `& \, U0 Q& Z2 ~* b

7 }1 D7 w" T$ i  mico_rtos_init_semaphore(&mfg_test_state_change_sem, 1);
  \3 j, h8 X/ ?  err = MICOAddNotification( mico_notify_WIFI_SCAN_COMPLETED, (void *)mico_notify_WifiScanCompleteHandler );5 P  \( w" o& V3 |1 A! d0 U
  require_noerr( err, exit );
+ \5 j' q0 Q8 }; {0 F& {
0 E  M1 W' C1 _  //获取当前light sensor value
" F7 p% W0 n8 p8 r, ?, b  //根据 LightValue 值改变 RGB灯亮度 7 m/ [: V, j1 E) ~# Z* _7 e
  //按key1、key2键 分别切换 RGB灯的颜色
% t# O: G0 d9 G  user_key1_init();
. i, A0 R. B- x: k& a  A. K9 Y8 q  user_key2_init();
% v. N' Y: ~4 X( p9 O1 J, f1 C# O+ P, k2 A& A" h! v/ y- g
  while(1)
" W% ]% B1 q, _/ Q8 k; y  {$ p8 u, K3 M& |3 i, q% M
        //while(kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, 0))
4 k8 X  |, P+ W8 y' Z        {
; Z3 F+ F: n0 ~5 G          light_ret = light_sensor_read(&light_sensor_data);  5 Y1 n6 K; ?& T/ p1 F. D2 ~
        }
4 N+ n2 w& m% N5 s, o1 x5 j4 l- R- s- z" m
        //若key2按下 则将颜色 rgb_led_hue+10
- f" L3 c) ?. g/ m/ E( u: _        if( MicoGpioInputGet((mico_gpio_t)USER_KEY2)==false)$ G  l/ @9 O# N
        {   rgb_led_hue+=10;  }
$ G& j7 Y: [+ M" ?4 B8 @. f        if(rgb_led_hue >360)/ p  u  c8 A5 G0 t) X
        {  rgb_led_hue=0; }
- E8 o: ^. v5 E  b1 C' t" o- n$ R4 @+ A4 p5 i- s2 |
        //若key1按下 则将颜色 rgb_led_hue-10# b+ N6 f8 A% w' E
        if( MicoGpioInputGet((mico_gpio_t)USER_KEY1)==false)
/ n5 n! s# O: b0 ~% a        { # b# Y) N4 _# \! E7 a
          if(rgb_led_hue>10)6 J4 X! B1 \' |/ q0 E$ p
          {  rgb_led_hue-=10; }
# ^, I( e1 t# a% M# J7 p% T4 b          else
2 s! B# E  X; U          {  rgb_led_hue =360; }, x. }! ?2 c) x4 P
        }( t! Z8 v* |4 l! e6 V: o
; w0 n3 q1 y( t: t3 x( T& b; F
+ @9 G0 Y2 z- d( z7 w9 h: }$ }6 L
        if(light_ret==0) //光线传感器数据 读取成功  * C7 p4 H& W# V3 V. F
        {   % `* k& l9 N/ p  o
           light_ret =(light_sensor_data-1300)/5;
" j5 l0 ~! _, Q$ `           h***2rgb_led_open(rgb_led_hue, 80, light_ret);   + D6 h: G( Q+ {5 t  C
        }- f1 y0 J) Y0 v6 J  Z0 e. q" d! Y
        memset(str, '', sizeof(str));! K8 `9 d5 F: d, Y( r* E% f' L, D
        sprintf(str,"My_test: #43");
3 s6 q9 n5 Z: X/ S5 S- n8 [- I        OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_1, (uint8_t*)str);# z7 X; O$ `/ S0 S' Z( n1 R

$ T) C! i# t! M, K- a0 N: H        memset(str, 0x00, sizeof(str));
3 g! g) n: h- y" V" [        sprintf(str,"Light: %d",light_sensor_data); + a; g) D) {* x4 O8 l4 A
        OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_2, (uint8_t*)str);
9 X; z4 x6 q# f+ g( z
& W2 v) I: H5 a/ s4 j$ |+ U        memset(str, 0x00, sizeof(str));' |" k$ C( _( j+ S' f* g7 m0 I6 X% j0 [
        sprintf(str,"Bright: %d   ",light_ret); , D2 q6 a8 V0 M4 g
        OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_3, (uint8_t*)str);
0 ~9 S9 W! k$ z1 s' u, }& V
& a  Z, b) ~- {2 J5 V7 ~6 G        memset(str, 0x00, sizeof(str));
3 n* q( C* y3 \# L- U% t        sprintf(str,"RgbHue: %d   ",rgb_led_hue); $ u. U* C+ J0 I1 X' o
        OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_4, (uint8_t*)str);7 C- l8 i3 x& l
3 v2 d6 f$ e& K: y! V. u1 Z
        mico_thread_msleep(50);5 k# t1 g, T* m4 x- Q1 V1 Y* B
  }
: U# j  |0 }* Q$ r1 @9 @% b' N) q8 h% b
exit:  ^$ b% W) ~  ^$ d$ P
  mico_thread_sleep(MICO_NEVER_TIMEOUT); . G" l# V9 i  [# g2 z. W, F, u/ M
}  - \9 r/ Z/ b3 t3 T1 R
     编译下载后 就能实现上述预期功能
( y' r# }( c, u: R( i! D: J; a' U) r5 K& T
视频链接:5 B/ F2 E3 {7 ?+ j" g) b
http://v.youku.com/v_show/id_XMTMxMzc0MzY5Mg==.html7 i3 I7 ]7 J4 o2 y
0 ]% I0 u3 M& K; Q  N" G
原作者:3466756555
1 ^4 P( E% p, q9 [0 w) y. x感谢!0 o# F- a; y, f( _+ E3 V" Q
0 E* o. ]* O+ y) _8 L

0个回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则


关闭

站长推荐上一条 /6 下一条

小黑屋|手机版|Archiver|电子发烧友 ( 湘ICP备2023018690号 )

GMT+8, 2024-11-21 01:39 , Processed in 0.541061 second(s), Total 40, Slave 29 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

微信扫描
快速回复 返回顶部 返回列表