当前位置:   article > 正文

鸿蒙开发板Hi3861_通过GPIO2中断控制LED D10——基于code-2.0-CANARY_iotgpiosetoutputval

iotgpiosetoutputval

鸿蒙开发板Hi3861_通过GPIO2中断控制LED D10——基于code-2.0-CANARY

//通过GPIO2中断控制LED D10, D10 接一个LED的长脚,LEd的短脚接GND
//D2接一个常开开关的一端,开关的另外一端接到板子的GND,by txwtech

  1. //通过GPIO2中断控制LED D10, D10 接一个LED的长脚,LEd的短脚接GND
  2. //D2接一个常开开关的一端,开关的另外一端接到板子的GND,by txwtech
  3. #include <stdio.h>
  4. #include "ohos_init.h"
  5. #include "cmsis_os2.h"
  6. #include "iot_gpio.h"
  7. #include "hi_io.h"
  8. static volatile IotGpioValue g_ledPinValue=IOT_GPIO_VALUE0;
  9. IotGpioValue temp_value=IOT_GPIO_VALUE0;
  10. static void onButtonPressed(char *arg)
  11. {
  12. (void) arg;
  13. g_ledPinValue = !g_ledPinValue;
  14. printf("button is pressed.\n");
  15. }
  16. static void GpioTask(void *arg)
  17. {
  18. (void) arg;
  19. IoTGpioInit(HI_IO_NAME_GPIO_9);
  20. IoTGpioInit(HI_IO_NAME_GPIO_5);
  21. IoTGpioInit(HI_IO_NAME_GPIO_2);
  22. IoTGpioSetDir(HI_IO_NAME_GPIO_9,IOT_GPIO_DIR_OUT);
  23. IoTGpioSetDir(HI_IO_NAME_GPIO_10,IOT_GPIO_DIR_OUT);
  24. IoTGpioSetDir(HI_IO_NAME_GPIO_2,IOT_GPIO_DIR_IN); //D2上拉电阻
  25. hi_io_set_pull(HI_IO_NAME_GPIO_2,HI_IO_PULL_UP);
  26. // while (1)
  27. {
  28. /* code */
  29. IotGpioValue value=IOT_GPIO_VALUE1;
  30. IoTGpioGetInputVal(HI_IO_NAME_GPIO_2,&value);
  31. printf("exec gpio2 value ...%d\n",value);
  32. // osDelay(200);
  33. // IoTGpioSetOutputVal(9,1);
  34. IoTGpioSetOutputVal(HI_IO_NAME_GPIO_9,IOT_GPIO_VALUE1);
  35. // IoTGpioSetOutputVal(HI_IO_NAME_GPIO_10,IOT_GPIO_VALUE1);
  36. IoTGpioGetInputVal(HI_IO_NAME_GPIO_10,&value);
  37. printf("exec gpio10 value ...%d\n",value);
  38. printf("exec ON ...\n");
  39. // osDelay(200);
  40. IoTGpioSetOutputVal(HI_IO_NAME_GPIO_9,IOT_GPIO_VALUE0);
  41. printf("exec OFF\n");
  42. // osDelay(200);
  43. // IoTGpioSetOutputVal(HI_IO_NAME_GPIO_10,IOT_GPIO_VALUE0);
  44. IoTGpioGetInputVal(HI_IO_NAME_GPIO_10,&value);
  45. printf("exec gpio10 value ...%d\n",value);
  46. // osDelay(200);
  47. IoTGpioRegisterIsrFunc(HI_IO_NAME_GPIO_2,IOT_INT_TYPE_EDGE,
  48. IOT_GPIO_EDGE_FALL_LEVEL_LOW,onButtonPressed,NULL);//通过GPIO2中断控制LED D10,by txwtech
  49. }
  50. while (1)
  51. {
  52. /* code */
  53. if(temp_value!=g_ledPinValue)
  54. {
  55. IoTGpioSetOutputVal(HI_IO_NAME_GPIO_10,g_ledPinValue);
  56. }
  57. temp_value=g_ledPinValue;
  58. // IoTGpioGetInputVal(HI_IO_NAME_GPIO_10,&value);
  59. printf("exec gpio10 value ...%d\n",g_ledPinValue);
  60. osDelay(50);
  61. }
  62. }
  63. static void GpioEntry(void)
  64. {
  65. osThreadAttr_t attr={0};
  66. attr.name="GpioTask";
  67. attr.stack_size=4096;
  68. attr.priority=osPriorityNormal;
  69. if(osThreadNew(GpioTask,NULL,&attr)==NULL)
  70. {
  71. printf("[GpioEntry] create GpioTask failed!\n");
  72. }
  73. }
  74. SYS_RUN(GpioTask);
  75. //SYS_RUN(GpioEntry);

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/223440
推荐阅读
相关标签
  

闽ICP备14008679号