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

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

micolover ( 楼主 ) 2015-8-24 09:31:46  只看该作者 倒序浏览
    话说收到 [MicroKit-3288] 后就一直出差,看到大家都有作品出来 赶紧折腾下别落了大队伍( h. k" u- x0 E( g4 L
    微信控制RGB的还是有些复杂 暂时没弄通,  索性先来个 根据光线强度 控制RGB灯的小实验吧  J, z# Q0 t0 f* a. q$ r$ v
    实验目的:/ F8 ?, T3 T" x/ R; B: r
         1、采集光线强度传感器数据
, l9 U9 k' {5 T0 W         2、根据光线强度 改变 RGB灯的亮度3 [0 Z0 L9 O2 T$ d3 U0 B
         3、通过KEY1、KEY2来调整 RGB的色调( `" J6 F1 y* r% T7 S8 [
         4、OLED屏的信息显示% ^! g, ^* l" r1 c9 e  Z! ?
     以上都是最基本的功能,但拿到庆科的SDK源码后 发现程序封装的层较多  阅读起来还是有些繁琐,但熟悉了后,移植起来会很方便1 x( ?2 `- D0 u: q% [3 W3 K5 i' o( \: `
- h, |2 g/ B, P$ y' J2 v
     实验步骤:/ j8 {' g. F, s5 W* x
         1、下载官方SDK_MiCOKit_V2.2.0.6_Beta   5 A1 A$ c% e/ ~+ o0 G9 F
         2、选择 MiCokit_Enjoy-Micokit-3288 工程
/ D) w. z& E% ~4 I! P9 U         3、在MicoEntrace.c 增加如下函数; e) D0 t# j( A# O
            #ifdef USE_MiCOKit_EXT
6 d$ s) ?, `6 B. B                     if(MicoShouldEnterTestMode()==true){+ [5 g: y( a. |  g) \0 L
                           mico_log( "Enter test mode by user button" );
4 Y$ n8 L( f+ b( r1 n) h+ d                          micokit_ext_mfg_test(context);  // MicoKit-EXT board mfg test
3 P* k, k2 P4 e2 y, g                     }
% ?0 K# i  G( u3 l                 #endif) F2 `; [0 V4 i$ _% }' Y
                 micokit_ext_mfg_Mytest(context);  //20150819 ++ //新增加的函数2 a6 [) H: \/ T3 Y: E9 a/ \

# I% k& T# P' k              4、Micoket_ext_mfg.c函数增加 micokit_ext_mfg_Mytest(context);  实体3 I" i9 V# f) r* ~
; Z; R$ O! Q+ K- g! C! X
void micokit_ext_mfg_Mytest(mico_Context_t *inContext)
- w, U: i. H( s; q0 R) R{/ P4 E3 q1 J8 W; [' Y, W
  OSStatus err = kUnknownErr;9 V4 {1 k+ |3 E0 C; }8 C: ~
  char str[64] = {''};
1 U1 X/ H  v! L3 E  I$ R1 p- g# w! G! I* w. p( d& q
  int rgb_led_hue = 0;
5 ?  c& v& ^& _* Y6 o( m1 z0 Y/ A' O* V5 ~9 W" O3 j6 ~
  int light_ret = 0;
5 b$ w$ ^# y& [  d4 [7 x( o  uint16_t light_sensor_data = 0;
8 r: ?1 k. q) T4 g' M* G7 S% ]6 k) U) i1 r$ d; H! R4 C" h
  UNUSED_PARAMETER(inContext);
- c8 p, q* U  C# g: H
: A# ?2 U$ [; V* y  mico_rtos_init_semaphore(&mfg_test_state_change_sem, 1);
  o8 M5 _$ I. @+ `( U# e1 ^- q# I  err = MICOAddNotification( mico_notify_WIFI_SCAN_COMPLETED, (void *)mico_notify_WifiScanCompleteHandler );- ]' s0 s+ i9 P9 @
  require_noerr( err, exit );! w% n; h; Q, a! D  [  j
% J, t/ A8 s6 D# g, Q" d0 H
  //获取当前light sensor value
" f% {3 @, X& M  //根据 LightValue 值改变 RGB灯亮度
. B/ ~1 c1 U: B9 a# C  //按key1、key2键 分别切换 RGB灯的颜色) t$ O, m' p9 t% K9 f, W( q( n
  user_key1_init();2 A/ M/ m1 I! d- C& ~
  user_key2_init();
& M# M) ]- R* P$ u7 H& R, e# C6 f, X+ i3 t
  while(1)+ u1 m* Y% A  ~( V
  {" S* ~8 F, a( r5 ~  @# O5 u' B
        //while(kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, 0))" I# {3 J7 \6 C. S. h  k, A, Y
        {
2 B3 k( \' U! s' V9 s8 J          light_ret = light_sensor_read(&light_sensor_data);  5 G6 r8 G" E- |/ S2 t
        }
; T8 n2 p% D3 Z; u
9 @$ l+ y, @7 H4 a        //若key2按下 则将颜色 rgb_led_hue+10
! n. D" y0 j- [- p- T! X        if( MicoGpioInputGet((mico_gpio_t)USER_KEY2)==false)& r0 N8 s! `2 G2 R" O
        {   rgb_led_hue+=10;  }
  S0 s& {) z+ T2 g1 |        if(rgb_led_hue >360)
2 g$ A* p& B/ |; E5 t9 C        {  rgb_led_hue=0; }) Q% a9 v. r) K& N! W! \
* y' U' y$ D% O2 }+ e
        //若key1按下 则将颜色 rgb_led_hue-106 P0 n% d% \1 V+ X
        if( MicoGpioInputGet((mico_gpio_t)USER_KEY1)==false)( q; f( C/ M' n2 k; d5 L# g
        { 8 H; \( B1 G6 r, ~  q, t  b* v, y
          if(rgb_led_hue>10)
# Z: N" o! Y2 m          {  rgb_led_hue-=10; }' Y2 U4 g" K6 `$ P
          else
, }/ W4 B" [' z7 b) b; ^          {  rgb_led_hue =360; }
. K9 K. T4 J! I& d        }
/ \3 }( B6 C: r$ t
9 `. |# q/ x" N7 `. d1 ~8 e3 ?( H* O% U" L
        if(light_ret==0) //光线传感器数据 读取成功  3 V/ r( G) J2 q6 ]) k% m$ o' S, V
        {   2 \% e& m2 r% H. X
           light_ret =(light_sensor_data-1300)/5;  e  C( a" D3 M( m  O
           h***2rgb_led_open(rgb_led_hue, 80, light_ret);   1 y- H* Z# C" d: |. D
        }
& w  b/ G, G7 N: I7 H7 b& J2 @1 K        memset(str, '', sizeof(str));
/ r7 n& A/ ]# ]6 l. ^: A+ t        sprintf(str,"My_test: #43"); 3 U# B* y8 y. r( n4 A7 ^
        OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_1, (uint8_t*)str);  B7 V5 v& L* W5 A2 D
- L* x& Y# Z- O6 j/ F$ q% p0 H
        memset(str, 0x00, sizeof(str));. R% ^) f( \) ?* ~2 D; w1 ]/ _- t
        sprintf(str,"Light: %d",light_sensor_data); - l, ~, x6 |5 n  d: `5 k9 j
        OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_2, (uint8_t*)str);6 ]9 o) t, R! k- P$ v; z

4 S  i! z% l6 g        memset(str, 0x00, sizeof(str));
# F* P* T8 N* T! V1 m. E        sprintf(str,"Bright: %d   ",light_ret); - V+ n- m( M; ]" q* ~
        OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_3, (uint8_t*)str);8 ]1 P% R9 e! @( D1 a

% m3 F2 X6 ?3 A8 a' n        memset(str, 0x00, sizeof(str));
3 w3 h0 \' f0 Z! S9 D        sprintf(str,"RgbHue: %d   ",rgb_led_hue); : ?: v; \" x) R: ^  E$ o; |% r
        OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_4, (uint8_t*)str);
) w9 y( N1 j% ^4 V2 h( I$ K6 \
        mico_thread_msleep(50);* g  P- k% Y5 ~0 I
  }+ U8 b7 y) g( V; y" f" l
' U: s: w% b  F7 ~
exit:% P! C# t! m& B" G+ I3 R& r
  mico_thread_sleep(MICO_NEVER_TIMEOUT);
: C& K8 _* ~2 L2 c- _( R}  & U- }5 {$ F  ?) E" ?: }
     编译下载后 就能实现上述预期功能 5 c8 b+ x6 H5 u" }# Y

( C: Y% z6 o- o* A" m4 z视频链接:. `9 Z7 [7 a; I' u$ \4 y9 I' o  B
http://v.youku.com/v_show/id_XMTMxMzc0MzY5Mg==.html
9 }% V( z0 b, h1 b- n/ X  }
% ]% a( g6 Z4 ^+ f原作者:3466756555* Q% F. _- I/ h" c5 _
感谢!
' b- O. R8 u6 M! P: s) w3 M+ ]/ q1 A

0个回复

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

本版积分规则


关闭

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

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

GMT+8, 2025-12-2 04:30 , Processed in 0.649737 second(s), Total 48, Slave 34 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

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