esp8266 呼吸灯
时间: 2024-01-03 16:21:48 浏览: 80
以下是使用ESP8266的PWM功能编写的一个简单的呼吸灯程序:
```c
#include "ets_sys.h"
#include "osapi.h"
#include "gpio.h"
#include "os_type.h"
#define PWM_DEPTH 255
void breath_led(void *arg)
{
uint32_t pwm_duty = 0;
uint32_t pwm_phase = 0;
uint32_t io_info[][3] = {{PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12, 12}, // 设置GPIO12为PWM输出
{PERIPHS_IO_MUX_MTCK_U, FUNC_GPIO13, 13}, // 设置GPIO13为PWM输出
{PERIPHS_IO_MUX_MTMS_U, FUNC_GPIO14, 14}}; // 设置GPIO14为PWM输出
uint8_t io_num = sizeof(io_info) / sizeof(io_info[0]);
// 初始化GPIO
gpio_init();
// 设置GPIO为输出模式
uint8_t i;
for (i = 0; i < io_num; i++)
{
PIN_FUNC_SELECT(io_info[i][0], io_info[i][1]);
gpio_output_set(0, 1 << io_info[i][2], 1 << io_info[i][2], 0);
}
// 呼吸灯效果
while (true)
{
pwm_phase += 16;
pwm_duty = (uint32_t)(sin(pwm_phase / 1024.0 * 2 * M_PI) * PWM_DEPTH / 2 + PWM_DEPTH / 2);
for (i = 0; i < io_num; i++)
{
pwm_set_duty(pwm_duty, io_info[i][2]);
pwm_start();
}
os_delay_us(5000);
}
}
void user_init(void)
{
system_os_task(breath_led, USER_TASK_PRIO_0, user_procTaskQueue, 1);
}
```
阅读全文