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

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

micolover ( 楼主 ) 2015-8-24 09:31:46  只看该作者 倒序浏览
    话说收到 [MicroKit-3288] 后就一直出差,看到大家都有作品出来 赶紧折腾下别落了大队伍
4 s: J+ N# R3 D    微信控制RGB的还是有些复杂 暂时没弄通,  索性先来个 根据光线强度 控制RGB灯的小实验吧
+ e4 A" M% a2 N/ A    实验目的:
4 c: S5 f- {5 T* }" l         1、采集光线强度传感器数据
: v3 a' ?) l- `. `         2、根据光线强度 改变 RGB灯的亮度, U( H: |+ e. s
         3、通过KEY1、KEY2来调整 RGB的色调& [$ h* _9 y7 n, I, A
         4、OLED屏的信息显示
2 W" j! i1 _$ ]/ ?     以上都是最基本的功能,但拿到庆科的SDK源码后 发现程序封装的层较多  阅读起来还是有些繁琐,但熟悉了后,移植起来会很方便
" \! p) G) {8 n/ `  V+ c% E- o& M4 w$ }) j" n; A. l) O% d: j
     实验步骤:- f5 L0 D" @. p7 w
         1、下载官方SDK_MiCOKit_V2.2.0.6_Beta   / t! |+ C' h2 I3 G* z. F* ?3 k: W
         2、选择 MiCokit_Enjoy-Micokit-3288 工程
  k- @2 L3 g9 w; Q* r         3、在MicoEntrace.c 增加如下函数1 C1 p4 G6 A7 H" H" l; j
            #ifdef USE_MiCOKit_EXT
( {$ j; b8 V4 O4 {; Z4 x                     if(MicoShouldEnterTestMode()==true){
8 ]. P! Y. X' \, _                           mico_log( "Enter test mode by user button" );: T; S* f5 n8 M- Y7 b9 u
                          micokit_ext_mfg_test(context);  // MicoKit-EXT board mfg test( e* c, F7 _9 G* s  m
                     }* [# n% L! w- ?. |
                 #endif
/ o" T, P3 p4 S6 l                 micokit_ext_mfg_Mytest(context);  //20150819 ++ //新增加的函数- L* R- B* E( Y' d( ]7 t0 N
! r6 O/ m6 c6 n2 s3 g2 `
              4、Micoket_ext_mfg.c函数增加 micokit_ext_mfg_Mytest(context);  实体
) v- L( S. z2 T+ x
  e: J0 p3 j, y. Vvoid micokit_ext_mfg_Mytest(mico_Context_t *inContext)
, c# {0 j. O0 h$ L+ g{! Z* ~5 d/ q6 j/ T( @! V
  OSStatus err = kUnknownErr;0 |1 T/ e5 |$ ]4 [( Z4 h' f% H3 H
  char str[64] = {''};2 W& V$ J* Y1 b! x$ Y
4 y* E  e" P7 X4 d
  int rgb_led_hue = 0;+ D' \* O7 |4 b( g
9 F# u+ i; {2 P% w/ j2 A
  int light_ret = 0;- h8 B, h% z6 u4 ~
  uint16_t light_sensor_data = 0;2 w  }+ L& N. k) Y  [

' x: F+ r! A" [% }2 C  UNUSED_PARAMETER(inContext);
* t; G$ u$ }# y% n5 H" ~6 f
" ?0 U1 y& L" i) J/ ?4 n  mico_rtos_init_semaphore(&mfg_test_state_change_sem, 1);
) {3 Z, x) V: e; w( B% \  err = MICOAddNotification( mico_notify_WIFI_SCAN_COMPLETED, (void *)mico_notify_WifiScanCompleteHandler );
5 {; p& m9 d$ b5 k/ O  require_noerr( err, exit );& M/ J/ M( C$ I9 d3 o+ {; M& p
+ A6 }/ v$ x% k, p* t' f# a( S
  //获取当前light sensor value
0 f+ y& C5 M( o6 K# Q* C- ?  //根据 LightValue 值改变 RGB灯亮度 ; c9 C, j% A- k# k
  //按key1、key2键 分别切换 RGB灯的颜色
! B. H4 E) }) @  user_key1_init();3 q8 k1 }1 L. }& X
  user_key2_init();2 p' g. u& v5 Z. i% o$ `+ y

/ H0 b: X- d' u" y# |9 C  while(1)
! b- w# A3 |% o5 U/ w) @7 j  {
3 @* ]7 `4 |6 h) C8 L$ A        //while(kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, 0))9 n# [& t5 e+ `$ Z9 R
        {
6 f- Q! l" Z; J. Z& w" Z6 e4 n          light_ret = light_sensor_read(&light_sensor_data);  
: M. z3 U- d' h6 D1 h3 h        }
" w2 R, B. q' d- P7 l
# H/ B: O! D; q7 d( o        //若key2按下 则将颜色 rgb_led_hue+10: [! }) d2 l$ x8 ^2 Y; J6 S5 H: v
        if( MicoGpioInputGet((mico_gpio_t)USER_KEY2)==false)
+ z- h5 S& Z& `6 b2 I6 J        {   rgb_led_hue+=10;  }) k, ^7 H) @0 E: K: Z
        if(rgb_led_hue >360)
' m% \( ~' Y- w: O        {  rgb_led_hue=0; }& Q6 N: |' _) B/ v& H

5 S1 ?: T8 s/ ^        //若key1按下 则将颜色 rgb_led_hue-10: V; r2 \. c8 d8 x! T* h! v0 N
        if( MicoGpioInputGet((mico_gpio_t)USER_KEY1)==false)
1 K: M9 _( J  ^; n8 k" m8 b        { + q7 |8 P, u9 }. u/ n1 _. L5 M
          if(rgb_led_hue>10)
/ ?& d1 P6 p9 l9 K          {  rgb_led_hue-=10; }
1 h- K: d% z$ O; r  q! w, V          else6 s- r. E, k! h9 f
          {  rgb_led_hue =360; }
4 N! {- i5 N1 \- Z' K        }) _' |9 a4 F# K5 ^- K
: e2 t3 \  }' c
" Z1 |) U/ f1 \% K+ A2 H- J( O  M
        if(light_ret==0) //光线传感器数据 读取成功  
8 l: D0 F7 D0 D7 D& C8 A" d        {   # l2 x$ ~7 y: z
           light_ret =(light_sensor_data-1300)/5;8 R; f' a% x4 n- s9 _
           h***2rgb_led_open(rgb_led_hue, 80, light_ret);   , B! z) g- f4 c3 ]; X  a& H
        }
5 n" J. \% K+ \        memset(str, '', sizeof(str));
7 h3 \1 G" Q+ y1 N% K        sprintf(str,"My_test: #43");
$ c% I7 n% S# i( H, C        OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_1, (uint8_t*)str);) r6 l/ E. n9 b

) Y3 ~0 X, T$ d        memset(str, 0x00, sizeof(str));0 ^6 s) e$ H1 H8 P+ {/ @
        sprintf(str,"Light: %d",light_sensor_data);
5 Z1 k  V! ]: [, u8 [( x3 [8 x        OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_2, (uint8_t*)str);$ W' g, p* e/ ^; h
, j3 [3 C2 j; M( u- M/ c. h* b
        memset(str, 0x00, sizeof(str));) k& F6 _9 S% i- R: G. F
        sprintf(str,"Bright: %d   ",light_ret);
) A! T, E2 [/ b) m3 t5 E: ^        OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_3, (uint8_t*)str);4 X  d4 h9 m$ y, S* ?9 j5 L

: B% ?+ A; n& Y4 K# a        memset(str, 0x00, sizeof(str));
2 b3 G# c& p: I        sprintf(str,"RgbHue: %d   ",rgb_led_hue); . D$ _+ d* O/ l9 z* z
        OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_4, (uint8_t*)str);
7 }/ ?% o' _& v, z" O+ a! U! G2 U& _+ Q
        mico_thread_msleep(50);* H- e  S. a' \4 ?0 i
  }; C  Q: X9 ^) Y+ g4 {2 d5 a3 T

6 y5 R& P) d$ nexit:! R* N: L# E7 o" w  J5 Q
  mico_thread_sleep(MICO_NEVER_TIMEOUT);
" P$ A0 k4 M$ B- q( V7 U}  6 W; e9 |' h, x$ V, d" ~
     编译下载后 就能实现上述预期功能
) l, A( O, O) Z! i5 ^# G& `5 }$ u6 z+ z' c* d& w
视频链接:( T. c4 C: ?2 \5 k+ B
http://v.youku.com/v_show/id_XMTMxMzc0MzY5Mg==.html
, A/ h, @- Z1 }% o5 v; l
: \  F- l+ `8 y& b, V' H/ z原作者:3466756555
, L; ], ]0 ]0 W- K2 w5 x感谢!
1 q# w% @9 H( k- u5 Z* S9 K: h8 q1 E6 x, Z+ h& w! M

0个回复

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

本版积分规则


关闭

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

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

GMT+8, 2025-12-2 15:42 , Processed in 0.692357 second(s), Total 48, Slave 34 queries .

Powered by 电子发烧友网

© 2015 bbs.elecfans.com

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