Esp32待测试代码.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "freertos/FreeRTOS.h"
  4. #include "freertos/task.h"
  5. #include "driver/gpio.h"
  6. #include "driver/ledc.h"
  7. #define BUTTON_A_PIN 5
  8. #define BUTTON_B_PIN 6
  9. #define BUTTON_C_PIN 7
  10. #define LED_PIN 16
  11. #define LEDC_TIMER LEDC_TIMER_0
  12. #define LEDC_MODE LEDC_HIGH_SPEED_MODE
  13. #define LEDC_CHANNEL LEDC_CHANNEL_0
  14. #define LEDC_RESOLUTION LEDC_TIMER_13_BIT
  15. #define LEDC_FREQ_HZ 5000
  16. int led_brightness = 0;
  17. void button_a_handler(void* arg)
  18. {
  19. int button_a_state = gpio_get_level(BUTTON_A_PIN);
  20. if (button_a_state == 0) {
  21. led_brightness += 1;
  22. if (led_brightness > 100) {
  23. led_brightness = 100;
  24. }
  25. ledc_set_duty(LEDC_MODE, LEDC_CHANNEL, ledc_percent_to_duty(LEDC_RESOLUTION, led_brightness));
  26. ledc_update_duty(LEDC_MODE, LEDC_CHANNEL);
  27. } else {
  28. int button_a_count = 0;
  29. while (gpio_get_level(BUTTON_A_PIN) == 1) {
  30. vTaskDelay(pdMS_TO_TICKS(500));
  31. button_a_count += 1;
  32. if (button_a_count >= 5) {
  33. led_brightness -= 1;
  34. if (led_brightness < 0) {
  35. led_brightness = 0;
  36. }
  37. ledc_set_duty(LEDC_MODE, LEDC_CHANNEL, ledc_percent_to_duty(LEDC_RESOLUTION, led_brightness));
  38. ledc_update_duty(LEDC_MODE, LEDC_CHANNEL);
  39. button_a_count = 0;
  40. }
  41. }
  42. }
  43. }
  44. void button_b_handler(void* arg)
  45. {
  46. int button_b_state = gpio_get_level(BUTTON_B_PIN);
  47. if (button_b_state == 0) {
  48. led_brightness -= 1;
  49. if (led_brightness < 0) {
  50. led_brightness = 0;
  51. }
  52. ledc_set_duty(LEDC_MODE, LEDC_CHANNEL, ledc_percent_to_duty(LEDC_RESOLUTION, led_brightness));
  53. ledc_update_duty(LEDC_MODE, LEDC_CHANNEL);
  54. } else {
  55. int button_b_count = 0;
  56. while (gpio_get_level(BUTTON_B_PIN) == 1) {
  57. vTaskDelay(pdMS_TO_TICKS(500));
  58. button_b_count += 1;
  59. if (button_b_count >= 5) {
  60. led_brightness += 1;
  61. if (led_brightness > 100) {
  62. led_brightness = 100;
  63. }
  64. ledc_set_duty(LEDC_MODE, LEDC_CHANNEL, ledc_percent_to_duty(LEDC_RESOLUTION, led_brightness));
  65. ledc_update_duty(LEDC_MODE, LEDC_CHANNEL);
  66. button_b_count = 0;
  67. }
  68. }
  69. }
  70. }
  71. void button_c_handler(void* arg)
  72. {
  73. int button_c_state = gpio_get_level(BUTTON_C_PIN);
  74. if (button_c_state == 0) {
  75. int led_state = gpio_get_level(LED_PIN);
  76. gpio_set_level(LED_PIN, !led_state);
  77. }
  78. }
  79. void app_main()
  80. {
  81. gpio_set_direction(BUTTON_A_PIN, GPIO_MODE_INPUT);
  82. gpio_set_pull_mode(BUTTON_A_PIN, GPIO_PULLUP_ONLY);
  83. gpio_set_direction(BUTTON_B_PIN, GPIO_MODE_INPUT);
  84. gpio_set_pull_mode(BUTTON_B_PIN, GPIO_PULLUP_ONLY);
  85. gpio_set_direction(BUTTON_C_PIN, GPIO_MODE_INPUT);
  86. gpio_set_pull_mode(BUTTON_C_PIN, GPIO_PULLUP_ONLY);
  87. gpio_set_direction(LED_PIN, GPIO_MODE_OUTPUT);
  88. ledc_timer_config_t ledc_timer = {
  89. .duty_resolution = LEDC_RESOLUTION,
  90. .freq_hz = LEDC_FREQ_HZ,
  91. .speed_mode = LEDC_MODE,
  92. .timer_num = LEDC_TIMER
  93. };
  94. ledc_timer_config(&ledc_timer);
  95. ledc_channel_config_t ledc_channel = {
  96. .channel = LEDC_CHANNEL,
  97. .duty = 0,
  98. .gpio_num = LED_PIN,
  99. .speed_mode = LEDC_MODE,
  100. .timer_sel = LEDC_TIMER,
  101. .hpoint = 0,
  102. .intr_type = LEDC_INTR_DISABLE
  103. };
  104. ledc_channel_config(&ledc_channel);
  105. gpio_install_isr_service(0);
  106. gpio_isr_handler_add(BUTTON_A_PIN, button_a_handler, NULL);
  107. gpio_isr_handler_add(BUTTON_B_PIN, button_b_handler, NULL);
  108. gpio_isr_handler_add(BUTTON_C_PIN, button_c_handler, NULL);
  109. while (1) {
  110. vTaskDelay(pdMS_TO_TICKS(100));
  111. }
  112. }