ESP32使用有源蜂鸣器演奏《反方向的钟》
主程序
#include <iostream>
#include <memory>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "beepObject.h"
#include "music.h"
gpio_num_t beep_port;
TaskHandle_t beeptask = NULL;
TaskHandle_t soundtask = NULL;
std::unique_ptr<Beep> beep;
static int musicSelect = 0,peroidSelect = 0;void soundTone(void *param)
{int v = *(int *)(param);std::cout<<"v = "<< v<<std::endl;if(v !=P){while(true){beep->beepRun(); //蜂鸣器响usleep(v);beep->beepStop();usleep(v);}}else{while(true){vTaskDelay(1000/ portTICK_PERIOD_MS);} }
}
void sound(const unsigned int v)
{beep->beepStop();xTaskCreate(soundTone,"soundtask",1024*5,(void *)&v,11,&soundtask);//在该音调的所有节拍之间,要一直演奏这个音调,因此开一个任务,一直演奏此调vTaskDelay(MUSIC_SPEED/4*Music[musicSelect+1]/ portTICK_PERIOD_MS);//等待该音调的所需节拍数vTaskDelete(soundtask);
}
void beepTask(void *param)
{while(true){if(Music[musicSelect]!=0XFF){peroidSelect = Music[musicSelect]; //选择音阶频率sound(HalfPeroidTable[peroidSelect]);musicSelect+=2;vTaskDelay(10/ portTICK_PERIOD_MS);}else{musicSelect = 0;peroidSelect = 0;}}
}
extern "C" void app_main(void)
{beep_port = GPIO_NUM_23; //蜂鸣器端口beep = std::unique_ptr<Beep>(new Beep(beep_port));xTaskCreate(beepTask,"beeptask",1024*5,NULL,10,&beeptask);while (true) {vTaskDelay(2000/ portTICK_PERIOD_MS);}
}
music.h:
#define P 0
#define L1 1
#define L1_ 2
#define L2 3
#define L2_ 4
#define L3 5
#define L4 6
#define L4_ 7
#define L5 8
#define L5_ 9
#define L6 10
#define L6_ 11
#define L7 12
#define M1 13
#define M1_ 14
#define M2 15
#define M2_ 16
#define M3 17
#define M4 18
#define M4_ 19
#define M5 20
#define M5_ 21
#define M6 22
#define M6_ 23
#define M7 24
#define H1 25
#define H1_ 26
#define H2 27
#define H2_ 28
#define H3 29
#define H4 30
#define H4_ 31
#define H5 32
#define H5_ 33
#define H6 34
#define H6_ 35
#define H7 36
#define MUSIC_SPEED 500 //500msconst unsigned int HalfPeroidTable[]={0, 1908,1805,1701,1608,1515,1433,1351,1276,1205,1136,1073,1008,956,903,852,804,759,716,676,638,602,568,536,506,478,451,426,402,379,358,338,319,301,284,268,263,
};
const unsigned char Music[]= //反方向的钟高潮部分
{M6,2,M5,2,M3,2,M2,4+2,M3,2,M1,2+2,M2,4,M3,2+2,M5,4+2,M6,2,M5,2,M3,2,M2,4+2,M3,2,M2,2+4,M1,2,M2,4,M1,2+4,0XFF
};
beepObject.h:
#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include <stdio.h>
class Beep{public:Beep(gpio_num_t beep_port);~Beep();void beepRun();void beepStop();bool isRunning();
private:const gpio_num_t m_port ;
};
beepObject.cpp
#include "beepObject.h"
Beep::Beep(gpio_num_t beep_port):m_port(beep_port)
{printf("beep object creaate\n");gpio_reset_pin(beep_port);gpio_set_direction(beep_port, GPIO_MODE_OUTPUT);
}
Beep::~Beep()
{printf("beep object delete\n");
}
void Beep::beepRun()
{gpio_set_level(this->m_port,1);
}
void Beep::beepStop()
{gpio_set_level(this->m_port,0);
}
ESP32使用有源蜂鸣器演奏《反方向的钟》相关推荐
- 详解树莓派Model B+控制蜂鸣器演奏乐曲
步进电机以及无源蜂鸣器这些都需要脉冲信号才能够驱动,这里将用GPIO的PWM接口驱动无源蜂鸣器弹奏乐曲,本文基于树莓派Mode B+,其他版本树莓派实现时需参照相关资料进行修改! 1 预备知识 1.1 ...
- arduino蜂鸣器音乐代码_STM32驱动蜂鸣器演奏音乐“你笑起来真好看”
有源蜂鸣器与无源蜂鸣器的区别 这里的"源"不是指电源,而是指震荡源. 内部自带震荡源的为有源蜂鸣器,给电就能响,但是响的频率是固定的,即响的声音是固定的. 内部没有震荡源的为无源蜂 ...
- 【硬件基础】有源蜂鸣器与无源蜂鸣器
辨别方法 外观: 无源蜂鸣器: 有源蜂鸣器: 注:可以看到底部有绿色电路板的是无源蜂鸣器,底部是黑胶的为有源蜂鸣器 万用表电阻档检测 无源蜂鸣器:发出咔.咔声的且电阻只有8Ω(或16Ω). 有源蜂鸣器 ...
- MSP430学习笔记5-利用蜂鸣器演奏音乐
这个小程序仍然是定时器的运用,比较简单,具体的地方都在注释中注明了,参考注释. /********************************************* 程序功能:MCU控制蜂鸣器 ...
- 有源蜂鸣器和无源蜂鸣器的区别_电磁式蜂鸣器和压电式蜂鸣器的区别以及驱动方法...
蜂鸣器是设计电子产品时比较常用的发声元器件,根据工作原理的不同,可以分为电磁式蜂鸣器和压电式蜂鸣器.在开发板.实验板上常用的蜂鸣器为电磁式蜂鸣器.这两者最大的区别在于工作原理.下面详细介绍其工作原理. ...
- Arduino笔记-有源蜂鸣器结合开关(多瑞咪发声)
目录 基本概念 演示及代码 基本概念 本次采用这款蜂鸣器,蜂鸣器有有源蜂鸣器,和无源蜂鸣器. Arduino中有一个tone的函数,第一个参数是那个输入口,第二个参数传要发的音频! 哆(2093)瑞( ...
- 有源蜂鸣器的驱动设计
核心知识 以下电路可以有效的实现蜂鸣器的关断 消除蜂鸣器EMI辐射 R2的作用 第一个作用:R2 相当于基极的下拉电阻 第二个作用:R2可提升高电平的门槛电压 假定β =120为晶体管参数的最小值,蜂 ...
- 【龙芯1B】:有源蜂鸣器例程
前言 大家对龙芯1B200有任何问题都可以私信我,大家的关注才是我不断更新的动力. 可能私信不能很及时的回,大家稍微谅解一下,看到立马就回. 一.蜂鸣器介绍 这里简单的介绍一下大家众所周知的蜂鸣器,蜂 ...
- Arduino实验十四 无源蜂鸣器与有源蜂鸣器
学习任务: 利用无源蜂鸣器发声 利用有源蜂鸣器发声 组件: Arduion主板 无源蜂鸣器 有源蜂鸣器 面包板 杜邦线 USB数据线 下图是无源蜂鸣器 下图是有源蜂鸣器 实验步骤: 1.建立电路 Ar ...
最新文章
- Java项目:平行志愿管理系统(java+Springboot+Maven+mybatis+Vue+Mysql)
- 浅析Java内存模型--ClassLoader
- 在el-table中使用el-popover,没法点击确定或取消来关闭
- 工作问题之:redis 保存快照问题
- FIR滤波器FPGA实现
- BZOJ2042 : [2009国家集训队]Will的烦恼
- java 编程思想 阅读笔记(1)
- 教你pe系统bootice修复系统引导教程
- java 下划线 变量_Java数值类型变量带下划线
- DIY NAS服务器之OMV 5.6入坑指南(一)-openmediavalut 5.6安装
- 【无标题】win排查可以外联进程
- 择时 配置 选股0909
- 纸壳CMS可视化建站系统搭建多语言网站
- jspm彩虹滑板专卖网店系统毕业设计(附源码、运行环境)
- MyTinySTL的rb_tree源码分析
- 数据恢复如何看异或问题
- 新浪微博定位页面代码解析
- sct文件编写与使用
- 自制Arduino Leonardo笔记
- 对日软件外包开发浅谈