예제 #1
0
int application_start( void )
{
  
  MicoInit( );
  
  MICOAddNotification( mico_notify_WIFI_SCAN_COMPLETED, (void *)micoNotify_ApListCallback );
  
  wifi_sacn_log("start scan mode, please wait...");
  micoWlanStartScan( );
  
  return kNoErr; 
}
예제 #2
0
void micokit_ext_mfg_test(mico_Context_t *inContext)
{
  OSStatus err = kUnknownErr;
  char str[64] = {'\0'};
  char mac[6];
  
  int rgb_led_hue = 0;
  
  uint8_t dht11_ret = 0;
  uint8_t dht11_temp_data = 0;
  uint8_t dht11_hum_data = 0;
  
  int light_ret = 0;
  uint16_t light_sensor_data = 0;
  
  int infrared_ret = 0;
  uint16_t infrared_reflective_data = 0;
  
  int32_t bme280_temp = 0;
  uint32_t bme280_hum = 0;
  uint32_t bme280_press = 0;
  
  UNUSED_PARAMETER(inContext);
  
  mico_rtos_init_semaphore(&mfg_test_state_change_sem, 1); 
  err = MICOAddNotification( mico_notify_WIFI_SCAN_COMPLETED, (void *)mico_notify_WifiScanCompleteHandler );
  require_noerr( err, exit );
  
  while(1){
    switch(mfg_test_module_number){
    case 0:  // mfg mode start
      {
        sprintf(str, "%s\r\nStart:\r\n%s\r\n%s", "TEST MODE", "  next: Key2", "  prev: Key1");
        mf_printf(str);
        while(kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, MICO_WAIT_FOREVER));
        break;
      }
    case 1:  // OLED
      {
        while(kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, 0))
        {
          sprintf(str, "%s OLED\r\n", OLED_MFG_TEST_PREFIX);
          mf_printf(str);
          mico_thread_msleep(300);
          
          mf_printf(mfg_test_oled_test_string);
          mico_thread_msleep(300);
        }
        OLED_Clear();
        break;
      }
    case 2:  // RGB_LED
      {
        sprintf(str, "%s RGB LED\r\nBlink: \r\n      R=>G=>B", OLED_MFG_TEST_PREFIX);
        mf_printf(str);
        
        while(kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, 0))
        {
          hsb2rgb_led_open(rgb_led_hue, 100, 50);
          rgb_led_hue += 120;
          if(rgb_led_hue >= 360){
            rgb_led_hue = 0;
          }
          mico_thread_msleep(300);
        }
        hsb2rgb_led_open(0, 0, 0);
        break;
      }
    case 3: // infrared sensor
      {
        while(kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, 0))
        {
          infrared_ret = infrared_reflective_read(&infrared_reflective_data);
          if(0 == infrared_ret){ 
            sprintf(str, "%s Infrared\r\nInfrared: %d", OLED_MFG_TEST_PREFIX,
                    infrared_reflective_data);
            mf_printf(str);
          }
          mico_thread_msleep(300);
        }
        break;
      }
    case 4: // DC Motor
      {
        sprintf(str, "%s DC Motor\r\nRun:\r\n     on : 500ms\r\n     off: 500ms", OLED_MFG_TEST_PREFIX);
        mf_printf(str);
        
        while(kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, 0))
        {
          dc_motor_set(1);
          mico_thread_msleep(500);
          dc_motor_set(0);
          mico_thread_msleep(500);
        }
        dc_motor_set(0);
        break;
      }
    case 5: // BME280
      {
        while(kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, 0))
        {
          err = bme280_sensor_init();
          if(kNoErr != err){
            sprintf(str, "%s BME280\r\nMoule not found!", OLED_MFG_TEST_PREFIX);
            mf_printf(str);
            // goto next mdoule
            mico_thread_msleep(500);
            mfg_test_module_number = (mfg_test_module_number+1)%(MFG_TEST_MAX_MODULE_NUM+1);
            break;
          }
          else{
            err = bme280_data_readout(&bme280_temp, &bme280_press, &bme280_hum);
            if(kNoErr == err){
              sprintf(str, "%s BME280\r\nT: %3.1fC\r\nH: %3.1f%%\r\nP: %5.2fkPa", OLED_MFG_TEST_PREFIX,
                      (float)bme280_temp/100, (float)bme280_hum/1024, (float)bme280_press/1000);
              mf_printf(str);
            }
            else{
              sprintf(str, "%s BME280\r\nRead error!", OLED_MFG_TEST_PREFIX);
              mf_printf(str);
            }
          }
          mico_thread_msleep(500);
        }
        break;
      }
    case 6: // DHT11
      {
        while(kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, 0))
        {
          dht11_ret = DHT11_Read_Data(&dht11_temp_data, &dht11_hum_data);
          if(0 == dht11_ret){
            sprintf(str, "%s DHT11\r\nT: %3.1fC\r\nH: %3.1f%%", OLED_MFG_TEST_PREFIX,
                    (float)dht11_temp_data, (float)dht11_hum_data);
            mf_printf(str);
          }
          mico_thread_sleep(1);   // DHT11 must >= 1s
        }
        break;
      }
    case 7:   // Light sensor
      {
        while(kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, 0))
        {
          light_ret = light_sensor_read(&light_sensor_data);
          if(0 == light_ret){
            sprintf(str, "%s Light\r\nLight: %d", OLED_MFG_TEST_PREFIX,
                    light_sensor_data);
            mf_printf(str);
          }
          mico_thread_msleep(300);
        }
        break;
      }
    case 8: // wifi
      {
        wlan_get_mac_address(mac);
        sprintf(str, "%s Wi-Fi\r\nMAC:\r\n    %02X%02X%02X%02X%02X%02X", OLED_MFG_TEST_PREFIX,
                mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
        mf_printf(str);
        //mico_thread_msleep(500);
        
        scanap_done = false;
        micoWlanStartScan();
        while((!scanap_done) || (kNoErr != mico_rtos_get_semaphore(&mfg_test_state_change_sem, MICO_WAIT_FOREVER)));
        break;
      }
    default:
      goto exit;  // error
      break;
    }
  }
  
exit:
  mico_thread_sleep(MICO_NEVER_TIMEOUT);
}
예제 #3
0
파일: kv.c 프로젝트: qianxufeng/color_led
/*&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
					按键检测
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&*/
void	key_check(mico_i2c_device_t *slave_device)
{
    //SlaveMessge slave_messge;
    KvKeyMessge key_messge;

	Set_REST;//开启按键检测
	
  KvVarProtect(TRUE);
  
	if(!state_key_keep)
	{         
//大风键处理
          if(!Get_KEY_HIG)
          {
			KEY.KEY_HIG++;
			if(KEY.KEY_HIG == 300)
            {
				   mico_log("in high wind key\r\n");
				   state_key_keep=1;
 ///////////////////////////////////////////////////////////////////////
                   micoWlanStartScan();
                   wifi_display=1;
 
///////////////////////////////////////////////////////////////////////			
			}	  
          }
          else
          	{
 ///////////////////////////////////////////////////////////////////////
 //短按键程序
				if(KEY.KEY_HIG>15&&KEY.KEY_HIG<100)
                  {
                    state_key_keep=1;
                   /********上报按键键值**********************************/
				    seng_key_messge(kv_key_hig,KEY_SHORT);
				  /**************---------------------------******************/
			/*****************************************************以下内容可以注释**********************************/
                    if(kv_sys_sate.STATE_SYS ==1)
                        {
								STATE_BUZ=buzz_one_sing;
                                if(kv_sys_sate.STATE_WIND == 6||kv_sys_sate.STATE_WIND == 3)//爆抄
                                        kv_sys_sate.STATE_WIND = 0;
                                else
                                        kv_sys_sate.STATE_WIND = 6;		
                        }
                        else if(kv_sys_sate.STATE_SYS ==2)//延时关机退出延时
                        {
                               
                                STATE_BUZ=buzz_one_sing;
                                kv_sys_sate.STATE_SYS = 1;
                        }
		  /**************----------------------------------------------------------------------------------------------------------------******************/
                  }
///////////////////////////////////////////////////////////////////////			
            	KEY.KEY_HIG=0;//
          }
			
 //小风键处理                       
           if(!Get_KEY_LOW)
          {
                  KEY.KEY_LOW++;
                  if(KEY.KEY_LOW == 15)
                  {
                     KEY.KEY_LOW= 0;
                     state_key_keep=1;
                    /********上报按键键值**********************************/
				    seng_key_messge(kv_key_low,KEY_SHORT);
					/**************---------------------------******************/
			/*****************************************************以下内容可以注释**********************************/
          #if 0
                    if(kv_sys_sate.STATE_SYS == 1)
                    {
                            
							STATE_BUZ=buzz_one_sing;
                            if(kv_sys_sate.STATE_WIND ==1)
                                    kv_sys_sate.STATE_WIND = 0;
							else if(kv_sys_sate.STATE_WIND == 2)
								   kv_sys_sate.STATE_WIND = 1;
							else if(kv_sys_sate.STATE_WIND == 3)
								   kv_sys_sate.STATE_WIND = 2;
                           	else 
                                   kv_sys_sate.STATE_WIND = 3;
            
                    }
          #else
                if(kv_sys_sate.STATE_SYS == 1)
                {
                        
                        STATE_BUZ=buzz_one_sing;
                        if(kv_sys_sate.STATE_WIND ==2 || kv_sys_sate.STATE_WIND ==1)
                                kv_sys_sate.STATE_WIND = 0;
                        else 
                               kv_sys_sate.STATE_WIND = 2;
          
                }          
          #endif
                    else if(kv_sys_sate.STATE_SYS == 2)//延时关机退出延时
                    {
                         
                           STATE_BUZ=buzz_one_sing;
                            kv_sys_sate.STATE_SYS = 1;	
                    }
		/**************----------------------------------------------------------------------------------------------------------------******************/
                  }
          }
          else
            KEY.KEY_LOW=0;
//照明键处理
          if(!Get_KEY_LIGHT)
          {
				  KEY.KEY_LIGHT++;
                  if(KEY.KEY_LIGHT == 15)
                  {
                    KEY.KEY_LIGHT= 0;
                    state_key_keep=1;
				    /********上报按键键值**********************************/
				    seng_key_messge(kv_key_light,KEY_SHORT);
					/**************---------------------------******************/
		       /*****************************************************以下内容可以注释**********************************/
                   // BUZZ.STATE_BUZ = 1;
                   STATE_BUZ=buzz_one_sing;
                    if(kv_sys_sate.STATE_LIGHT)
                            kv_sys_sate.STATE_LIGHT=0;
                    else
                            kv_sys_sate.STATE_LIGHT=1; 
	/**************----------------------------------------------------------------------------------------------------------------******************/
                  }
          }
          else
            KEY.KEY_LIGHT=0;  
//网络按键处理
          if(!Get_KEY_NET)/////////////////////////////////////////////////////////网络按键处理
          {
                  KEY.KEY_NET++;
                  if(KEY.KEY_NET==300)
                  {
                    state_key_keep=1;
				    /********上报按键键值**********************************/
				    seng_key_messge(kv_key_net,KEY_LONG);
					/**************---------------------------******************/
					/*****************************************************此处联网按键长按处理**********************************/
				    STATE_BUZ=buzz_one_sing;
                   // kv_sys_sate.STATE_NET=0x02;
                    /**************----------------------------------------------------------------------------------------------------------------******************/
                  }
          }
          else
          {
            if((KEY.KEY_NET>15)&&(KEY.KEY_NET<100))
            {
               state_key_keep=1;
			   /********上报按键键值**********************************/
			   seng_key_messge(kv_key_net,KEY_SHORT);
			  /****************---------------------------******************/
			  
			  /*****************************************************此处联网按键短按处理**********************************/
			  STATE_BUZ=buzz_one_sing;
			  /**************----------------------------------------------------------------------------------------------------------------******************/
            //  kv_sys_sate.STATE_NET=0x01;    
           
			   
            }
            KEY.KEY_NET=0;             
           }
 //开关键处理
          if(!Get_KEY_POWER)
          {
                  KEY.KEY_POWER++;
                  if(KEY.KEY_POWER == 15)
                  {
                   // mico_log("come here the power key buuton");
                    /********上报按键键值**********************************/
				    seng_key_messge(kv_key_power,KEY_SHORT);
					/**************---------------------------******************/
					KEY.KEY_POWER= 0;
                    state_key_keep=1;
	   /*****************************************************以下内容可以注释**********************************/
                    if(kv_sys_sate.STATE_SYS == 1)
                    {
                            if(kv_sys_sate.STATE_WIND == 0)
                            {
                                   // BUZZ.STATE_BUZ = 3;
                                    STATE_BUZ=buzz_system_off;
                                   /* slave_messge.id=ID_BUZZ
									slave_messge.value=buzz_system_off;
									if(FALSE==Set_Slave_Vaule(slave_device,&slave_messge))
									{
										mico_log("set the buzze vaue failed");
									}*/
                                    kv_sys_sate.STATE_SYS = 0;
                                    kv_sys_sate.STATE_LIGHT = 0;			
                            }
                            else
                            {
                                    //BUZZ.STATE_BUZ = 1;
									STATE_BUZ=buzz_one_sing;
                                   /* slave_messge.id=ID_BUZZ
									slave_messge.value=buzz_one_sing;
									if(FALSE==Set_Slave_Vaule(slave_device,&slave_messge))
									{
										mico_log("set the buzze vaue failed");
									}*/
                                    kv_sys_sate.STATE_SYS = 2;	
                            }
                    }
                    else if(kv_sys_sate.STATE_SYS == 2)
                    {
                            //BUZZ.STATE_BUZ = 3;
                            STATE_BUZ=buzz_system_off;
                           /* slave_messge.id=ID_BUZZ
							slave_messge.value=buzz_system_off;
							if(FALSE==Set_Slave_Vaule(slave_device,&slave_messge))
							{
								mico_log("set the buzze vaue failed");
							}*/
                            kv_sys_sate.STATE_SYS = 0;
                            kv_sys_sate.STATE_LIGHT = 0;						
                    }
                    else
                    {
                            //BUZZ.STATE_BUZ = 2;	
                            STATE_BUZ=buzz_system_on;
                           /* slave_messge.id=ID_BUZZ
							slave_messge.value=buzz_system_on;
							if(FALSE==Set_Slave_Vaule(slave_device,&slave_messge))
							{
								mico_log("set the buzze vaue failed");
							}   */         
                            kv_sys_sate.STATE_SYS = 1;					
                    }	
	/**************----------------------------------------------------------------------------------------------------------------******************/
                  }
          }
          else
            KEY.KEY_POWER=0; 

	}	

  KvVarProtect(FALSE);
  
    if(Get_KEY_HIG&&Get_KEY_LOW&&Get_KEY_LIGHT&&Get_KEY_NET&&Get_KEY_POWER)  
    {
      	 //KEY.KEY_KEEP++; 
      	 state_key_keep=0;
       	KEY.KEY_KEEP=0;
    }
    else
    {
    	KEY.KEY_KEEP++; 
      	//state_key_keep=0;
       //	KEY.KEY_KEEP=0;
    }
	/*if((KEY.KEY_LOW||KEY.KEY_HIG||KEY.KEY_LIGHT||KEY.KEY_NET||KEY.KEY_POWER)==0)  
    {
    	state_key_keep=0;
     	KEY.KEY_KEEP=0; 
     	//KEY.KEY_KEEP++;
    }
    else
    {
    	KEY.KEY_KEEP++;
    	//state_key_keep=0;
     	//KEY.KEY_KEEP=0;
    }*/
    if(KEY.KEY_KEEP>500)//复位按键
      Clr_REST;     
}