刚出来工作两个月,学到不多不少,刚开始是在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定时
}