【LiteOS】13-移植-按鍵

此筆記由個人整理

華爲IOT LiteOS開發實戰營

第七天

一、控制移植

定義變量(在數據上報時使用)

uint8_t Light_state;
uint8_t Motor_state;

按鍵一

  • 代碼
//按鍵1任務
void Key1_task_entry()
{
    if (Light_state == 0)
    {
        //此處燈控制開
        HAL_GPIO_WritePin(IA1_Light_GPIO_Port, IA1_Light_Pin, GPIO_PIN_SET);
        POINT_COLOR = GREEN;
        LCD_ShowString(175, 198, 210, 32, 32, "ON ");
        Light_state = 1;
    }
    else
    {
        //此處燈控制關
        HAL_GPIO_WritePin(IA1_Light_GPIO_Port, IA1_Light_Pin, GPIO_PIN_RESET);
        POINT_COLOR = RED;
        LCD_ShowString(175, 198, 210, 32, 32, "OFF");
        Light_state = 0;
    }
    __HAL_GPIO_EXTI_CLEAR_FLAG(GPIO_PIN_2);
}

按鍵二

  • 代碼
//按鍵2任務:
void Key2_task_entry()
{
    if (Motor_state == 0)
    {
        //此處電機控制開
        HAL_GPIO_WritePin(IA1_Motor_GPIO_Port, IA1_Motor_Pin, GPIO_PIN_SET);
        POINT_COLOR = GREEN;
        LCD_ShowString(83, 198, 210, 32, 32, "ON ");
        Motor_state = 1;
    }
    else
    {
        //此處電機控制關
        HAL_GPIO_WritePin(IA1_Motor_GPIO_Port, IA1_Motor_Pin, GPIO_PIN_RESET);
        POINT_COLOR = RED;
        LCD_ShowString(83, 198, 210, 32, 32, "OFF");
        Motor_state = 0;
    }
    __HAL_GPIO_EXTI_CLEAR_FLAG(GPIO_PIN_3);
}

主函數

  • 創建中斷
osal_int_connect(KEY1_EXTI_IRQn, 2,0,Key1_task_entry,NULL);
osal_int_connect(KEY2_EXTI_IRQn, 3,0,Key2_task_entry,NULL);

二、數據上報

  • 在數據上報結構體中添加之前定義的變量
typedef struct
{
    int8_t messageId;
    int8_t Temperature;
    int8_t Humidity;
    uint16_t Luminance;
    uint8_t Light_state;
    uint8_t Motor_state;
} AG_sensor_report;
  • 數據上報任務中,在死循環中添加新增的結構體變量
static int app_report_task_entry()
{
    int ret = -1;

    oc_config_param_t oc_param;
    AG_sensor_report Agriculture;

    (void)memset(&oc_param, 0, sizeof(oc_param));

    oc_param.app_server.address = cn_app_server;
    oc_param.app_server.port = cn_app_port;
    oc_param.app_server.ep_id = cn_endpoint_id;
    oc_param.boot_mode = en_oc_boot_strap_mode_factory;
    oc_param.rcv_func = app_msg_deal;

    ret = oc_lwm2m_config(&oc_param);
    if (0 != ret)
    {
        return ret;
    }

    //install a dealer for the led message received
    while (1) //--TODO ,you could add your own code here
    {
        Agriculture.messageId = cn_AG_sensorID;
        Agriculture.Temperature = (int8_t)E53_IA1_Data.Temperature;
        Agriculture.Humidity = (int8_t)E53_IA1_Data.Humidity;
        Agriculture.Luminance = htons((uint16_t)E53_IA1_Data.Lux);
        Agriculture.Light_state = (int8_t)Light_state;
        Agriculture.Motor_state = (int8_t)Motor_state;
        oc_lwm2m_report((char *)&Agriculture, sizeof(Agriculture), 1000);
        osal_task_sleep(2 * 1000);
    }
    return ret;
}
  • 在數據解析任務中添加變量
if (Agriculture_Control_Light->Light[0] == 'O' && Agriculture_Control_Light->Light[1] == 'N')
                {
                    HAL_GPIO_WritePin(IA1_Light_GPIO_Port, IA1_Light_Pin, GPIO_PIN_SET);
                    LCD_ShowString(175, 198, 210, 32, 32, "ON ");
                    Light_state=1;//變量置1
                }
                if (Agriculture_Control_Light->Light[0] == 'O' && Agriculture_Control_Light->Light[1] == 'F' && Agriculture_Control_Light->Light[2] == 'F')
                {
                    HAL_GPIO_WritePin(IA1_Light_GPIO_Port, IA1_Light_Pin, GPIO_PIN_RESET);
                    LCD_ShowString(175, 198, 210, 32, 32, "OFF");
                    Light_state=0;//變量置0
                }    
if (Agriculture_Control_Motor->Motor[0] == 'O' && Agriculture_Control_Motor->Motor[1] == 'N')
                {
                    HAL_GPIO_WritePin(IA1_Motor_GPIO_Port, IA1_Motor_Pin, GPIO_PIN_SET);
                    LCD_ShowString(83, 198, 210, 32, 32, "ON ");
                    Motor_state=1;//變量置1
                }
                if (Agriculture_Control_Motor->Motor[0] == 'O' && Agriculture_Control_Motor->Motor[1] == 'F' && Agriculture_Control_Motor->Motor[2] == 'F')
                {
                    HAL_GPIO_WritePin(IA1_Motor_GPIO_Port, IA1_Motor_Pin, GPIO_PIN_RESET);
                    LCD_ShowString(83, 198, 210, 32, 32, "OFF");
                    Motor_state=0;//變量置0
                }
  • 然後在華爲雲平臺中agriculture服務依次添加Light_state,Motor_state(可讀可寫可執行)
  • 在編解碼插件中添加數據,與其相對應
  • 完成數據上報,實現項目的閉環設計
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章