Browse Source

1. 记录esp32的测试代码

kindring 2 years ago
parent
commit
9f25709953
1 changed files with 122 additions and 0 deletions
  1. 122 0
      C与C++/Esp32待测试代码.c

+ 122 - 0
C与C++/Esp32待测试代码.c

@@ -0,0 +1,122 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "driver/gpio.h"
+#include "driver/ledc.h"
+
+#define BUTTON_A_PIN 5
+#define BUTTON_B_PIN 6
+#define BUTTON_C_PIN 7
+#define LED_PIN 16
+#define LEDC_TIMER LEDC_TIMER_0
+#define LEDC_MODE LEDC_HIGH_SPEED_MODE
+#define LEDC_CHANNEL LEDC_CHANNEL_0
+#define LEDC_RESOLUTION LEDC_TIMER_13_BIT
+#define LEDC_FREQ_HZ 5000
+
+int led_brightness = 0;
+
+void button_a_handler(void* arg)
+{
+    int button_a_state = gpio_get_level(BUTTON_A_PIN);
+    if (button_a_state == 0) {
+        led_brightness += 1;
+        if (led_brightness > 100) {
+            led_brightness = 100;
+        }
+        ledc_set_duty(LEDC_MODE, LEDC_CHANNEL, ledc_percent_to_duty(LEDC_RESOLUTION, led_brightness));
+        ledc_update_duty(LEDC_MODE, LEDC_CHANNEL);
+    } else {
+        int button_a_count = 0;
+        while (gpio_get_level(BUTTON_A_PIN) == 1) {
+            vTaskDelay(pdMS_TO_TICKS(500));
+            button_a_count += 1;
+            if (button_a_count >= 5) {
+                led_brightness -= 1;
+                if (led_brightness < 0) {
+                    led_brightness = 0;
+                }
+                ledc_set_duty(LEDC_MODE, LEDC_CHANNEL, ledc_percent_to_duty(LEDC_RESOLUTION, led_brightness));
+                ledc_update_duty(LEDC_MODE, LEDC_CHANNEL);
+                button_a_count = 0;
+            }
+        }
+    }
+}
+
+void button_b_handler(void* arg)
+{
+    int button_b_state = gpio_get_level(BUTTON_B_PIN);
+    if (button_b_state == 0) {
+        led_brightness -= 1;
+        if (led_brightness < 0) {
+            led_brightness = 0;
+        }
+        ledc_set_duty(LEDC_MODE, LEDC_CHANNEL, ledc_percent_to_duty(LEDC_RESOLUTION, led_brightness));
+        ledc_update_duty(LEDC_MODE, LEDC_CHANNEL);
+    } else {
+        int button_b_count = 0;
+        while (gpio_get_level(BUTTON_B_PIN) == 1) {
+            vTaskDelay(pdMS_TO_TICKS(500));
+            button_b_count += 1;
+            if (button_b_count >= 5) {
+                led_brightness += 1;
+                if (led_brightness > 100) {
+                    led_brightness = 100;
+                }
+                ledc_set_duty(LEDC_MODE, LEDC_CHANNEL, ledc_percent_to_duty(LEDC_RESOLUTION, led_brightness));
+                ledc_update_duty(LEDC_MODE, LEDC_CHANNEL);
+                button_b_count = 0;
+            }
+        }
+    }
+}
+
+void button_c_handler(void* arg)
+{
+    int button_c_state = gpio_get_level(BUTTON_C_PIN);
+    if (button_c_state == 0) {
+        int led_state = gpio_get_level(LED_PIN);
+        gpio_set_level(LED_PIN, !led_state);
+    }
+}
+
+void app_main()
+{
+    gpio_set_direction(BUTTON_A_PIN, GPIO_MODE_INPUT);
+    gpio_set_pull_mode(BUTTON_A_PIN, GPIO_PULLUP_ONLY);
+    gpio_set_direction(BUTTON_B_PIN, GPIO_MODE_INPUT);
+    gpio_set_pull_mode(BUTTON_B_PIN, GPIO_PULLUP_ONLY);
+    gpio_set_direction(BUTTON_C_PIN, GPIO_MODE_INPUT);
+    gpio_set_pull_mode(BUTTON_C_PIN, GPIO_PULLUP_ONLY);
+    gpio_set_direction(LED_PIN, GPIO_MODE_OUTPUT);
+
+    ledc_timer_config_t ledc_timer = {
+        .duty_resolution = LEDC_RESOLUTION,
+        .freq_hz = LEDC_FREQ_HZ,
+        .speed_mode = LEDC_MODE,
+        .timer_num = LEDC_TIMER
+    };
+    ledc_timer_config(&ledc_timer);
+
+    ledc_channel_config_t ledc_channel = {
+        .channel = LEDC_CHANNEL,
+        .duty = 0,
+        .gpio_num = LED_PIN,
+        .speed_mode = LEDC_MODE,
+        .timer_sel = LEDC_TIMER,
+        .hpoint = 0,
+        .intr_type = LEDC_INTR_DISABLE
+    };
+    ledc_channel_config(&ledc_channel);
+
+    gpio_install_isr_service(0);
+    gpio_isr_handler_add(BUTTON_A_PIN, button_a_handler, NULL);
+    gpio_isr_handler_add(BUTTON_B_PIN, button_b_handler, NULL);
+    gpio_isr_handler_add(BUTTON_C_PIN, button_c_handler, NULL);
+
+    while (1) {
+        vTaskDelay(pdMS_TO_TICKS(100));
+    }
+}