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

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

[复制链接]
micolover2015 发布时间:2015-8-24 09:38
    话说收到 [MicroKit-3288] 后就一直出差,看到大家都有作品出来 赶紧折腾下别落了大队伍0 j4 s' \1 m2 N( i, w  |
    微信控制RGB的还是有些复杂 暂时没弄通,  索性先来个 根据光线强度 控制RGB灯的小实验吧! ~7 u( ]0 b, d/ v; g1 B
    实验目的:
$ D5 @8 g, o! _0 T         1、采集光线强度传感器数据
# ~( V, q3 L0 B         2、根据光线强度 改变 RGB灯的亮度
+ o# Q8 D2 V* u; ~3 y% q         3、通过KEY1、KEY2来调整 RGB的色调& h0 X" {2 [: k) ~
         4、OLED屏的信息显示; ~' Z& {6 z4 ^/ f# c' Y5 V9 J
     以上都是最基本的功能,但拿到庆科的SDK源码后 发现程序封装的层较多  阅读起来还是有些繁琐,但熟悉了后,移植起来会很方便+ l3 q0 `6 v3 G
. t2 x1 o" j4 U& v
     实验步骤:
8 P# `% }; W$ x; s$ v' t         1、下载官方SDK_MiCOKit_V2.2.0.6_Beta   
: D; w7 Q+ D& f9 E/ {1 C) d         2、选择 MiCokit_Enjoy-Micokit-3288 工程
! k& E; c1 g6 B3 ]4 h! r         3、在MicoEntrace.c 增加如下函数
7 f5 x6 m; ^$ j" e5 W  R1 B' f            #ifdef USE_MiCOKit_EXT! r; f/ K9 D1 K# n! u  ~
                     if(MicoShouldEnterTestMode()==true){
9 O8 t) }. G9 Z0 k. z( X5 m                           mico_log( "Enter test mode by user button" );
- k5 |$ e9 E+ A; p                          micokit_ext_mfg_test(context);  // MicoKit-EXT board mfg test2 ~0 C# U( O5 d$ k" y7 T8 H
                     }! k" }5 [4 k% n1 B1 m9 H
                 #endif
7 M9 r- m: a; M4 G/ k                 micokit_ext_mfg_Mytest(context);  //20150819 ++ //新增加的函数; e9 P# a; A4 o

! z; i; G( A- L8 Y; X$ T              4、Micoket_ext_mfg.c函数增加 micokit_ext_mfg_Mytest(context);  实体# a) e5 |8 b+ ^+ N+ s6 l  T& }5 O
7 e, s: A* [2 t! j
void micokit_ext_mfg_Mytest(mico_Context_t *inContext)
1 q9 F( ]& ?5 D; d6 ^{
0 h. A5 ?8 e/ g0 K" D  OSStatus err = kUnknownErr;
7 v, l$ s; I6 W# U- e  char str[64] = {'\0'};: G0 t8 m9 K# @9 W
! o8 c5 @0 ]9 D% B. q1 E; L3 Y
  int rgb_led_hue = 0;- D. R, K% s2 @7 t4 _1 D
, ~6 \& G0 E) _( L. h0 E
  int light_ret = 0;6 s4 t: L" t. g0 U
  uint16_t light_sensor_data = 0;& o7 o4 M+ j% h' I+ O% b( R: D
/ C! D# R  _1 g/ H' p( L7 h0 o8 c
  UNUSED_PARAMETER(inContext);0 N5 R, e$ ]3 D3 O2 ?" n

* ]2 ?. K  p4 a1 [- V  mico_rtos_init_semaphore(&mfg_test_state_change_sem, 1);
% ]  J1 O& X0 z9 `5 n  err = MICOAddNotification( mico_notify_WIFI_SCAN_COMPLETED, (void *)mico_notify_WifiScanCompleteHandler );3 o% |- Q/ E# I! `8 B. z
  require_noerr( err, exit );6 y* c( z. B* F
8 o/ P1 p- R' F- l& B; ]
  //获取当前light sensor value( u% F! T; \8 m4 Y
  //根据 LightValue 值改变 RGB灯亮度
: r9 e: x- u8 J2 x  //按key1、key2键 分别切换 RGB灯的颜色2 H8 N2 M9 V' T; P2 e# O+ z3 u6 u
  user_key1_init();9 e3 f7 d0 J+ B5 {4 T
  user_key2_init();
7 ?3 |1 ^7 |7 B) R* b& U1 m( i4 ]5 U
9 d" u2 ?$ W2 h$ J: z' u$ N( m  while(1); Y0 H" G) S4 L* G. T8 v
  {
  E0 C. G7 t0 F8 a        //while(kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, 0))* B: ~6 U, @/ i' f% N
        {+ K; @! n6 R% {
          light_ret = light_sensor_read(&light_sensor_data);  6 q) n4 o& F) n
        }
1 z1 h0 V' E, ], ?4 y( G
* b- C+ ?# y' X& E2 W        //若key2按下 则将颜色 rgb_led_hue+10+ V8 W) n5 d# k6 {/ J/ ?( G
        if( MicoGpioInputGet((mico_gpio_t)USER_KEY2)==false)
8 {. @- n  Y' T/ @; j: U        {   rgb_led_hue+=10;  }3 a: C5 C2 c5 X7 g
        if(rgb_led_hue >360)
4 `" _# D2 X  Z6 _' B        {  rgb_led_hue=0; }" Z$ R& Q& @/ l

" e9 o3 L6 p4 [' P        //若key1按下 则将颜色 rgb_led_hue-109 r0 b, y  k) \. \+ q8 M" R9 s$ J
        if( MicoGpioInputGet((mico_gpio_t)USER_KEY1)==false)3 }* t8 x" l, ?
        { 5 G$ L4 B, }+ H- S: m5 t) k
          if(rgb_led_hue>10)
5 q. R% Z6 ]- z6 K/ I5 @          {  rgb_led_hue-=10; }
# u2 j( u, u. M4 ~# I" E9 z          else6 }) C. K; I1 E) {$ M4 {, s/ v
          {  rgb_led_hue =360; }" P# v2 R+ l/ Y- U
        }+ k+ f) ~9 B( U( s  X8 U
5 M3 G) X. @; I7 U/ |  f

- E, i: l" C7 n# S( r        if(light_ret==0) //光线传感器数据 读取成功  $ p- c1 C! A& \1 L% `  f9 \
        {   0 @3 r( w# f' ?" ]" T) v9 p
           light_ret =(light_sensor_data-1300)/5;; Z7 L7 {8 h) L2 A- O3 T0 f+ X* H" S
           hsb2rgb_led_open(rgb_led_hue, 80, light_ret);   
$ F0 U1 l! \& P4 C$ ]' n0 D6 G        }0 L$ B2 F  W# S3 q1 m- r
        memset(str, '\0', sizeof(str));5 }# \! ~$ ^& x- z: x
        sprintf(str,"My_test: #43"); 7 u: k4 D3 e: d' C  F( Y+ [
        OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_1, (uint8_t*)str);! J5 e$ ]$ F9 M. _. r( ^

1 q! Q$ U6 F1 i) _1 `  ^( G% N- Q        memset(str, 0x00, sizeof(str));
$ q! Q1 C; [/ L% @, x        sprintf(str,"Light: %d",light_sensor_data);
9 Y& v2 C) J) t1 d        OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_2, (uint8_t*)str);* B1 A; i$ A8 }9 a: p0 U' X

9 i' L% S9 M: d: P8 ]        memset(str, 0x00, sizeof(str));; g8 [4 ?. z! P9 t
        sprintf(str,"Bright: %d   ",light_ret); 4 K2 {. D9 m3 Z7 P- ?
        OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_3, (uint8_t*)str);
  n  C6 `+ I8 @- k3 Q* z7 ?, M# I, C# {& _! w& k+ @$ |- M
        memset(str, 0x00, sizeof(str));, l) J# f/ y/ c( }8 q: X) c
        sprintf(str,"RgbHue: %d   ",rgb_led_hue); 8 |. K, s% ]* T; }) w5 D: A: \
        OLED_ShowString(OLED_DISPLAY_COLUMN_START, OLED_DISPLAY_ROW_4, (uint8_t*)str);
4 V- R: T  r* u: I7 p, _0 @( N$ t3 B! ^4 m$ v
        mico_thread_msleep(50);
4 z" B+ |' c% W/ X  }# s# @/ v) k) Y) l9 E; F4 q# [0 Q

/ J3 z1 Q1 l+ a% e5 b" Jexit:; h# A% m2 @4 @' l9 p
  mico_thread_sleep(MICO_NEVER_TIMEOUT);
6 I3 z  F* H" `! R}  7 ~8 a/ h& \* X6 T
     编译下载后 就能实现上述预期功能 & x6 V/ v6 q" }. W

( A) w! U0 w; E/ C2 `# x视频链接:; b* r/ R% U3 N( O
https://v.youku.com/v_show/id_XMTMxMzc0MzY5Mg==.html8 |/ c1 \/ ^" s$ V

1 N2 m. B7 s2 R0 `. W' H
" ?% G" m& o: L1 y原作者:3466756555
  e0 j" {, h" J2 ]& J感谢!
2 V! k' W' O6 ^, s) i; o/ _
  f6 I/ s3 t9 s' b, N
赞 收藏 评论1 发布时间:2015-8-24 09:38

举报

1个回答
shaoziyang 回答时间:2015-8-25 09:26:09
不错。        
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版