当前位置: 首页 > article >正文

用micropython 操作stm32f4单片机的定时器实现蜂鸣器驱动

import pyb
import time

# 初始化引脚和定时器通道作为PWM输出
# 注意:这里我们假设您使用的是支持PWM的引脚和定时器
# 在不同的MicroPython板上,支持的引脚和定时器可能不同
# 请查阅您的板的文档以确认正确的引脚和定时器
buzzer_pin = pyb.Pin('PD15', pyb.Pin.OUT)  # 假设PD15引脚支持PWM
tim = pyb.Timer(4, freq=2000)  # 设置定时器4的频率为2000Hz
ch = tim.channel(4, pyb.Timer.PWM, pin=buzzer_pin)  # 创建PWM通道

# 控制蜂鸣器发声的函数
def beep(duty_percent, on_time_ms, off_time_ms, repeat):
    # duty_percent 是占空比的百分比,范围从0到100
    for _ in range(repeat):
        # 开启蜂鸣器
        # 注意:pyb.Timer.channel的pulse_width_percent()接受0到100的百分比值
        ch.pulse_width_percent(duty_percent)
        time.sleep_ms(on_time_ms)
        
        # 关闭蜂鸣器(通过设置占空比为0)
        ch.pulse_width_percent(0)
        time.sleep_ms(off_time_ms)

# 示例调用:蜂鸣器以50%占空比,100ms开启,100ms关闭的模式重复发声3次
beep(50, 100, 100, 20) 

下面对其封装

# buzzer.py -- put your Buzzer class code here!
import pyb
import time

class Buzzer:
    def __init__(self, pin_name, timer_num, channel_num, freq=2000):
        # 初始化引脚和定时器通道作为PWM输出
        self.pin = pyb.Pin(pin_name, pyb.Pin.OUT)
        self.timer = pyb.Timer(timer_num, freq=freq)
        self.pwm_channel = self.timer.channel(channel_num, pyb.Timer.PWM, pin=self.pin)

    def beep(self, duty_percent, on_time_ms, off_time_ms, repeat):
        # 控制蜂鸣器发声的函数
        # duty_percent 是占空比的百分比,范围从0到100
        for _ in range(repeat):
            # 开启蜂鸣器
            self.pwm_channel.pulse_width_percent(duty_percent)
            time.sleep_ms(on_time_ms)
            
            # 关闭蜂鸣器(通过设置占空比为0)
            self.pwm_channel.pulse_width_percent(0)
            time.sleep_ms(off_time_ms) 

 主函数:

from buzzer import Buzzer

if __name__ == "__main__":
    # 初始化Buzzer对象
    buzzer = Buzzer('PE11', 1, 2)  # 假设PE11引脚支持PWM,使用定时器1和通道2
#     while True:
    # 示例调用:蜂鸣器以60%占空比,100ms开启,100ms关闭的模式重复发声20次
    buzzer.beep(60, 100, 100, 3)  # 注意这里添加了闭合的括号)


http://www.kler.cn/a/421924.html

相关文章:

  • 如何加强游戏安全,防止定制外挂影响游戏公平性
  • 知乎大数据开发面试题及参考答案
  • Linux CentOS
  • AIGC 时代的文学:变革与坚守
  • Vue框架开发一个简单的购物车(Vue.js)
  • leetcode--螺旋矩阵
  • 【数据结构】队列的概念、结构和实现详解
  • 【layui】 自己编写的可输入下拉框
  • HCIA笔记6--路由基础与静态路由:浮动路由、缺省路由、迭代查找
  • Ubuntu WiFi检测
  • CLIP-MMA: Multi-Modal Adapter for Vision-Language Models
  • Go-知识依赖管理2
  • 力扣【算法学习day.50】
  • go语言的成神之路-筑基篇-并发
  • 亚马逊云(AWS)使用root用户登录
  • MySQL算法篇(一)
  • html button 按钮单选且 高亮
  • web安全之信息收集
  • jupyter+云服务器+内网穿透=无痛远程jupyter服务
  • C++ 分治
  • 基于Matlab高速动车组转臂定位橡胶节点刚度对车辆动力学影响仿真研究
  • 限定符使用
  • 使用 GORM 与 MySQL 数据库进行交互来实现增删改查(CRUD)操作
  • PHP语法学习(第三天)
  • Kali Linux使用Netdiscover工具的详细教程
  • cdn服务