剛出來工作兩個月,學到不多不少,剛開始是在alios things上對wifi做二次開發,用慶科的3080弄了一個pwm冷暖色調的智能燈,成果出來後發現3080模塊塊頭實在是太大,只好轉戰mico,在mico上又做了四路入牆開關和智能插座。項目終於結束,現在終於有時間整理一下收穫了,我們今天先從按鍵長短按開題
static void linkkit_reset(void)//清除熱點信息
{
mkv_item_delete("ssid");
mkv_item_delete("passwd");
mkv_item_delete("bssid");
awss_report_reset();
}
void switch1_on(void)
{
allreport = 1;
MicoGpioOutputHigh(LED1_USR);
switch1_state = 1; //開關燈標誌
switch1_report_flag = 0; //上報屬性標誌
}
void switch1_off(void)
{
allreport = 1;
MicoGpioOutputLow(LED1_USR);
switch1_state = 0;
switch1_report_flag = 1;
}
static void on_awss_key1_short_clicked(void)//短按
{
if(switch1_state == 0)
{
switch1_on();
}
else{
switch1_off();
}
}
static void on_awss_key1_long_clicked(void) //長按清除熱點信息並配網
{
linkkit_reset();
mico_system_power_perform(NULL, eState_Software_Reset);
mico_rtos_send_asynchronous_event(MICO_NETWORKING_WORKER_THREAD, awss_config_press, NULL);
}
static void user_key1_handler( void* arg )//按鍵中斷,開啓定時器
{
int level = MicoGpioInputGet(KEY1_USR_BUTTON);
if(level == 0)
{
mico_start_timer(&_user_key1_timer);
}
}
static void _user_key1_timeout_handler( void* arg )
{
if(MicoGpioInputGet(KEY1_USR_BUTTON) == 0) //按鍵按下
{
key1_count++; //計算按下按下的時間值
}
else
{
mico_stop_timer(&_user_key1_timer);
if(key1_count > KEY1_PRESS_LONG_TIME) //按鍵長按
{
on_awss_key1_long_clicked();
}
else if(key1_count != 0 && key1_count > 50 && key1_count < KEY1_PRESS_LONG_TIME) //按鍵短按
{
on_awss_key1_short_clicked();
}
key1_count = 0; //按鍵計數值清零
}
}
void button1_gpio_init(void)
{
MicoGpioInitialize(KEY1_USR_BUTTON,INPUT_PULL_UP);
MicoGpioInitialize(LED1_USR,OUTPUT_PUSH_PULL);
MicoGpioEnableIRQ(KEY1_USR_BUTTON, IRQ_TRIGGER_FALLING_EDGE ,user_key1_handler,NULL);
mico_init_timer(&_user_key1_timer, 1, _user_key1_timeout_handler, NULL);//1ms定時
}