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

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

micolover ( 楼主 ) 2015-8-24 09:31:46  只看该作者 倒序浏览
    话说收到 [MicroKit-3288] 后就一直出差,看到大家都有作品出来 赶紧折腾下别落了大队伍
$ f4 A; @" T: @) g: I) }9 V    微信控制RGB的还是有些复杂 暂时没弄通,  索性先来个 根据光线强度 控制RGB灯的小实验吧# s( ^+ c1 m9 S0 J
    实验目的:& w. ~. G, e7 R& O. i' g" z; s8 G
         1、采集光线强度传感器数据
9 B6 K; r4 X5 }0 }  z         2、根据光线强度 改变 RGB灯的亮度
' t- A/ f$ A# X         3、通过KEY1、KEY2来调整 RGB的色调
; _+ R" `6 T) a% j         4、OLED屏的信息显示
3 z5 ?! l- k+ l& ?8 z     以上都是最基本的功能,但拿到庆科的SDK源码后 发现程序封装的层较多  阅读起来还是有些繁琐,但熟悉了后,移植起来会很方便
* e* w# a! o1 z6 R
$ Y; s1 J0 m, _9 B5 c1 U     实验步骤:
: }. E* L4 x5 O' m. Y9 s* B         1、下载官方SDK_MiCOKit_V2.2.0.6_Beta   % Y3 U0 ~9 v5 j3 r  i
         2、选择 MiCokit_Enjoy-Micokit-3288 工程
8 A  V; X. C# S$ f- m$ `; k2 V+ p: i         3、在MicoEntrace.c 增加如下函数
0 @  S/ Q4 J9 \0 @4 _            #ifdef USE_MiCOKit_EXT
  X% A+ D7 J5 M0 j3 L0 @                     if(MicoShouldEnterTestMode()==true){
2 _" M$ f  O' ~. V% z/ W/ m( d                           mico_log( "Enter test mode by user button" );# _  a4 [" h$ L# v, {! A$ l  s
                          micokit_ext_mfg_test(context);  // MicoKit-EXT board mfg test3 B- l) l% B  T
                     }
) v. u( C0 e2 u, C9 {8 L/ [4 W$ H: m                 #endif' i& z( E8 P6 f
                 micokit_ext_mfg_Mytest(context);  //20150819 ++ //新增加的函数6 I& H& W4 U3 ~2 V" h

* y9 F' p  d8 Y- y              4、Micoket_ext_mfg.c函数增加 micokit_ext_mfg_Mytest(context);  实体
9 C6 g6 z4 X: T2 Q5 ?$ [% ^
7 k5 q* e/ ]6 j$ o. V* a  Gvoid micokit_ext_mfg_Mytest(mico_Context_t *inContext)
3 [- W; \0 F6 m) |( J4 [7 V' E{$ b/ M, J7 i) i7 J) Q, M
  OSStatus err = kUnknownErr;
' g# P, }" H2 q) h$ O% D7 r  char str[64] = {''};
- ~; y) }2 l5 e  p9 |" w4 ]2 m5 ]/ F" G. z7 w
  int rgb_led_hue = 0;( F' S) T' l, [6 y' v8 L! x9 z5 `

% z7 d5 D0 ^8 s) ~4 w9 g& U8 a  int light_ret = 0;
1 z5 ~: F$ |: i: G. D  uint16_t light_sensor_data = 0;7 ^2 Y* A3 ~+ F! J, X/ k$ A% \" Y

$ N' y) t! z' }! Z1 a  UNUSED_PARAMETER(inContext);
: d! Q2 `- _9 h6 D5 h1 O5 S; y8 @  i% d4 b+ o$ N6 s
  mico_rtos_init_semaphore(&mfg_test_state_change_sem, 1); 2 t: O4 C$ i/ D
  err = MICOAddNotification( mico_notify_WIFI_SCAN_COMPLETED, (void *)mico_notify_WifiScanCompleteHandler );
% O  }+ z# \( D% H6 n  require_noerr( err, exit );
7 X6 {* ]+ L, ]% y6 U
* J1 B, p" e5 u' N. N  //获取当前light sensor value
$ K, O* o2 {' e% K* K" r  //根据 LightValue 值改变 RGB灯亮度
$ r/ f3 }8 d( \3 K$ I7 r6 y  //按key1、key2键 分别切换 RGB灯的颜色
1 i: v- x) J0 W2 v) M  user_key1_init();5 h" S; t# E- c
  user_key2_init();
% ^: a. a! N( y5 c5 U! W/ n
, |' W0 Q6 F9 ~0 R/ w  while(1): D1 \& J6 k2 N0 d1 W7 i! A
  {. f& r  g9 b* |  J$ o( E; H! a
        //while(kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, 0))8 L, K8 W+ r; w5 N2 t- u
        {3 h9 r  ~  L; l$ c+ o
          light_ret = light_sensor_read(&light_sensor_data);  8 L- L4 r' r" x$ s: [3 I2 L
        }
1 U5 N$ U3 d0 U" D
# B% a: A. H, L- }( N5 @3 Q        //若key2按下 则将颜色 rgb_led_hue+10) k, K0 X$ E7 t  D. t
        if( MicoGpioInputGet((mico_gpio_t)USER_KEY2)==false)
8 P' H0 p/ C# \8 B% d. z$ z; r        {   rgb_led_hue+=10;  }- }# n6 |: W! o& ]( Q
        if(rgb_led_hue >360)
! S. Z  I1 Q0 V3 ]        {  rgb_led_hue=0; }$ W6 U- H; [& g& T! @! |( B2 |
$ i# t1 P! [: r  y7 ?1 C5 o1 d
        //若key1按下 则将颜色 rgb_led_hue-107 [+ I% [$ X* l. c' m$ q
        if( MicoGpioInputGet((mico_gpio_t)USER_KEY1)==false)
4 H# u8 ~1 d: i$ Z% s        { 1 K1 o2 B- H0 X1 l: U+ s8 N# @( ^
          if(rgb_led_hue>10)
3 M5 ^1 L; K2 v7 P. Y, v          {  rgb_led_hue-=10; }  @+ x% M1 C  q3 c6 h( O
          else' r5 r: }2 ^: @3 Z0 Q+ @
          {  rgb_led_hue =360; }$ B1 r1 ?' n# k' r3 c& a+ S
        }5 m7 {! H, H$ n
, `: _. Y* S4 g. ^( b. b% @' V

% {2 x2 E( m! b% A% c- ~7 [        if(light_ret==0) //光线传感器数据 读取成功  " b2 O- q7 U/ j0 [( Z. C
        {   8 r0 u! a) n+ U* r
           light_ret =(light_sensor_data-1300)/5;
+ L0 e8 p9 k, [  b2 P: c           h***2rgb_led_open(rgb_led_hue, 80, light_ret);   ; p: `1 ~* r- n% |
        }
7 k- {/ s& F" |) I. w' U( o        memset(str, '', sizeof(str));3 ^( g: O* Q: O  ]7 O7 Y3 B2 A
        sprintf(str,"My_test: #43");
  y0 i( }6 a) o% w        OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_1, (uint8_t*)str);; f! l5 @; D$ ^( F/ I4 @
3 x. E3 A# Y) d/ g7 K( K
        memset(str, 0x00, sizeof(str));) t* e! \$ t. |3 t
        sprintf(str,"Light: %d",light_sensor_data);
# x# r* [* k* I! r2 g. v, u  p/ g        OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_2, (uint8_t*)str);
5 d6 d5 Y# [/ z% M
5 z5 N3 b2 t3 S; s7 k. l, s$ ?% m        memset(str, 0x00, sizeof(str));
% F& q  b1 ~* ]0 y' ^        sprintf(str,"Bright: %d   ",light_ret);
( Q2 l/ X& m6 ]9 U/ Y1 h+ W        OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_3, (uint8_t*)str);4 _0 O$ o8 x* Z6 N* q; F
% @6 M4 t* ?# K" V& I4 I4 L
        memset(str, 0x00, sizeof(str));' b5 A/ o6 Y) {
        sprintf(str,"RgbHue: %d   ",rgb_led_hue); , o6 e: g) u+ N: e# p
        OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_4, (uint8_t*)str);
0 L0 }3 ]) `% K/ d
0 O% T" B& P5 e        mico_thread_msleep(50);
1 b2 g$ R: \3 }$ Q5 e, u- d! A  }9 c: L) Q) j2 S% O1 O) u
) o6 M, b- j& {) F/ l# V$ X
exit:
# I2 W4 e( Z( l  mico_thread_sleep(MICO_NEVER_TIMEOUT);
7 i- q; b% K% y( r}  ( z- p" s4 E& K2 n. n( u* e6 J
     编译下载后 就能实现上述预期功能 : v* N7 w3 q1 E. H, _0 @8 u, `
2 g2 p( Y7 j- |/ L
视频链接:
) |5 Z; d! z3 {http://v.youku.com/v_show/id_XMTMxMzc0MzY5Mg==.html4 O+ k5 N) D; I) M

5 v* l( T* W3 p7 J原作者:3466756555
7 b. q# k+ x6 g7 R感谢!
- l9 Z% t+ i. w% {1 v2 Q
" i5 V, l, b' b5 K2 ^3 K( P  R

0个回复

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

本版积分规则


关闭

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

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

GMT+8, 2024-9-29 06:18 , Processed in 0.524550 second(s), Total 44, Slave 32 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

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