STM32F030F4P6 音频频谱和灯光控制程序

本程序使用 STM32F030F4P6 微控制器,结合 MSGEQ7 音频均衡器和 WS2812B 可寻址 LED,实现音频频谱显示和灯光控制功能,并使用轻触开关切换功能模式。

连接说明

  • STM32F030F4P6 芯片的 7 脚连接 MSGEQ7 芯片的 4 脚 (DATA)
  • STM32F030F4P6 芯片的 9 脚连接 MSGEQ7 芯片的 7 脚 (STROBE)
  • STM32F030F4P6 芯片的 8 脚连接 MSGEQ7 芯片的 3 脚 (RESET)
  • STM32F030F4P6 芯片的 11 脚连接升压电路的基准电压 (2.5V)
  • STM32F030F4P6 芯片的 10 脚用于 PWM 输出 (5V)
  • STM32F030F4P6 芯片的 14 脚检测升压电路的输出电压 (0.1V)
  • STM32F030F4P6 芯片的 6 脚连接轻触开关
  • STM32F030F4P6 芯片的 17 脚输出用于控制 WS2812B 灯光效果的 PWM

程序代码

#include <Arduino.h>

// 定义引脚连接
#define MSGEQ7_DATA_PIN       PA7
#define MSGEQ7_STROBE_PIN     PA4
#define MSGEQ7_RESET_PIN      PA3
#define BOOST_VOLTAGE_PIN     PA11
#define PWM_OUTPUT_PIN        PA10
#define VOLTAGE_DETECT_PIN    PA14
#define SWITCH_PIN            PA6
#define WS2812B_PWM_PIN       PA17

// 全局变量
volatile uint16_t adc_value[7];  // 存储音频数据
volatile uint16_t boost_voltage;  // 存储升压电路的基准电压

int main(void) {
    pinMode(PWM_OUTPUT_PIN, OUTPUT);
    pinMode(WS2812B_PWM_PIN, OUTPUT);

    pinMode(VOLTAGE_DETECT_PIN, INPUT);
    pinMode(SWITCH_PIN, INPUT);

    uint8_t switch_state = 0;
    uint8_t press_count = 0;

    while (1) {
        // 读取音频数据
        // TODO: 读取 MSGEQ7 芯片的音频数据
        for (int i = 0; i < 7; i++) {
            adc_value[i] = analogRead(i);
        }

        // 读取升压电路基准电压
        boost_voltage = analogRead(BOOST_VOLTAGE_PIN) * 3.3 / 4095.0;

        // 检测电压
        if (digitalRead(VOLTAGE_DETECT_PIN) == LOW) {
            // 没有检测到电压,开启 PWM 输出
            digitalWrite(PWM_OUTPUT_PIN, HIGH);
        } else {
            // 检测到电压,停止 PWM 输出
            digitalWrite(PWM_OUTPUT_PIN, LOW);
        }

        // 检测轻触开关
        if (digitalRead(SWITCH_PIN) == HIGH) {
            if (switch_state == 0) {
                switch_state = 1;
                press_count++;
            }
        } else {
            switch_state = 0;
        }

        if (press_count == 1) {
            // 第一次按下,控制 WS2812B 灯光效果的 PWM
            digitalWrite(WS2812B_PWM_PIN, HIGH);
        } else if (press_count == 2) {
            // 第二次按下,开启音乐频谱功能
            // TODO: 实现音乐频谱功能的代码
        } else if (press_count == 3) {
            // 第三次按下,关闭 WS2812B 灯光效果的 PWM
            digitalWrite(WS2812B_PWM_PIN, LOW);
            press_count = 0;
        }

        delay(100);
    }
}

代码说明

  1. 定义引脚连接: 使用 #define 指令定义各芯片引脚的对应关系。
  2. 全局变量: 定义两个全局变量 adc_valueboost_voltage 用于存储音频数据和升压电路基准电压。
  3. 初始化: 设置 PWM 输出引脚、WS2812B PWM 输出引脚、电压检测引脚和轻触开关引脚的模式。
  4. 主循环: 程序的主循环,包括以下部分:
    • 读取音频数据 (需要根据具体硬件电路实现)
    • 读取升压电路基准电压
    • 检测电压,控制 PWM 输出
    • 检测轻触开关,根据按下次数切换功能模式

注意事项

  • 上述代码中的音频数据的读取和音乐频谱功能的实现需要根据您的具体硬件电路和需求进行进一步的开发。
  • 确保您的开发板支持使用对应的引脚作为 PWM 输出和 ADC 输入。

扩展功能

您可以根据需要添加以下功能:

  • 添加音频频谱显示功能,根据音频数据控制 LED 的亮度或颜色,呈现频谱效果。
  • 添加其他灯光效果,例如流水灯、彩虹等。
  • 添加音乐播放功能,使用音频数据播放音乐。
  • 添加其他功能,例如音量调节、灯光效果切换等。
STM32F030F4P6 结合 MSGEQ7 和 WS2812B 实现音频频谱和灯光控制

原文地址: https://www.cveoy.top/t/topic/7Q5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录