主程序

#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使用有源蜂鸣器演奏《反方向的钟》相关推荐

  1. 详解树莓派Model B+控制蜂鸣器演奏乐曲

    步进电机以及无源蜂鸣器这些都需要脉冲信号才能够驱动,这里将用GPIO的PWM接口驱动无源蜂鸣器弹奏乐曲,本文基于树莓派Mode B+,其他版本树莓派实现时需参照相关资料进行修改! 1 预备知识 1.1 ...

  2. arduino蜂鸣器音乐代码_STM32驱动蜂鸣器演奏音乐“你笑起来真好看”

    有源蜂鸣器与无源蜂鸣器的区别 这里的"源"不是指电源,而是指震荡源. 内部自带震荡源的为有源蜂鸣器,给电就能响,但是响的频率是固定的,即响的声音是固定的. 内部没有震荡源的为无源蜂 ...

  3. 【硬件基础】有源蜂鸣器与无源蜂鸣器

    辨别方法 外观: 无源蜂鸣器: 有源蜂鸣器: 注:可以看到底部有绿色电路板的是无源蜂鸣器,底部是黑胶的为有源蜂鸣器 万用表电阻档检测 无源蜂鸣器:发出咔.咔声的且电阻只有8Ω(或16Ω). 有源蜂鸣器 ...

  4. MSP430学习笔记5-利用蜂鸣器演奏音乐

    这个小程序仍然是定时器的运用,比较简单,具体的地方都在注释中注明了,参考注释. /********************************************* 程序功能:MCU控制蜂鸣器 ...

  5. 有源蜂鸣器和无源蜂鸣器的区别_电磁式蜂鸣器和压电式蜂鸣器的区别以及驱动方法...

    蜂鸣器是设计电子产品时比较常用的发声元器件,根据工作原理的不同,可以分为电磁式蜂鸣器和压电式蜂鸣器.在开发板.实验板上常用的蜂鸣器为电磁式蜂鸣器.这两者最大的区别在于工作原理.下面详细介绍其工作原理. ...

  6. Arduino笔记-有源蜂鸣器结合开关(多瑞咪发声)

    目录 基本概念 演示及代码 基本概念 本次采用这款蜂鸣器,蜂鸣器有有源蜂鸣器,和无源蜂鸣器. Arduino中有一个tone的函数,第一个参数是那个输入口,第二个参数传要发的音频! 哆(2093)瑞( ...

  7. 有源蜂鸣器的驱动设计

    核心知识 以下电路可以有效的实现蜂鸣器的关断 消除蜂鸣器EMI辐射 R2的作用 第一个作用:R2 相当于基极的下拉电阻 第二个作用:R2可提升高电平的门槛电压 假定β =120为晶体管参数的最小值,蜂 ...

  8. 【龙芯1B】:有源蜂鸣器例程

    前言 大家对龙芯1B200有任何问题都可以私信我,大家的关注才是我不断更新的动力. 可能私信不能很及时的回,大家稍微谅解一下,看到立马就回. 一.蜂鸣器介绍 这里简单的介绍一下大家众所周知的蜂鸣器,蜂 ...

  9. Arduino实验十四 无源蜂鸣器与有源蜂鸣器

    学习任务: 利用无源蜂鸣器发声 利用有源蜂鸣器发声 组件: Arduion主板 无源蜂鸣器 有源蜂鸣器 面包板 杜邦线 USB数据线 下图是无源蜂鸣器 下图是有源蜂鸣器 实验步骤: 1.建立电路 Ar ...

最新文章

  1. Java项目:平行志愿管理系统(java+Springboot+Maven+mybatis+Vue+Mysql)
  2. 浅析Java内存模型--ClassLoader
  3. 在el-table中使用el-popover,没法点击确定或取消来关闭
  4. 工作问题之:redis 保存快照问题
  5. FIR滤波器FPGA实现
  6. BZOJ2042 : [2009国家集训队]Will的烦恼
  7. java 编程思想 阅读笔记(1)
  8. 教你pe系统bootice修复系统引导教程
  9. java 下划线 变量_Java数值类型变量带下划线
  10. DIY NAS服务器之OMV 5.6入坑指南(一)-openmediavalut 5.6安装
  11. 【无标题】win排查可以外联进程
  12. 择时 配置 选股0909
  13. 纸壳CMS可视化建站系统搭建多语言网站
  14. jspm彩虹滑板专卖网店系统毕业设计(附源码、运行环境)
  15. MyTinySTL的rb_tree源码分析
  16. 数据恢复如何看异或问题
  17. 新浪微博定位页面代码解析
  18. sct文件编写与使用
  19. 自制Arduino Leonardo笔记
  20. 对日软件外包开发浅谈

热门文章

  1. 蓝牙及其安全技术概述
  2. 灰度共生矩阵(GLCM)
  3. 强烈推荐阅读:分享Supergiant美术师的3D游戏模型的创作流程,非常详细!
  4. Java--创建窗口和程序片
  5. 进程和进程调度器的关系
  6. java swing action_Swing ActionListener接口
  7. 果壳中的宇宙 1:把时空掰弯的男人
  8. 基于微信小程序的旅游社微信小程序
  9. IDEA添加快捷键(快捷放大、缩小字体)
  10. 轻量级秀恩爱网站源码 – 我们的小窝(星益云)