arduino制作电子琴遇到的问题

在使用arduino制作电子琴过程中遇 蜂鸣器发声函数tone()与红外遥控模块函数IRemote冲突问题。本文提供参考两种解决方法的实践过程,思路分别来自以下博客。
arduino 定时器、定时中断与PWM使用以及注意事项
arduino使用tone函数播放音乐,调用两个定时器实现双音轨播放
主要思想:修改系统tone()函数库中定时器,使两个函数分别使用不同定时器,从而化解冲突。
tone() 和 IRremote 冲突的解决办法
主要思想: 避免使用系统定义tone()函数,自定义新函数,绕开定时器。
实践1. 修改定时器
在arduino 安装目录下(我的是D:\arduino\hardware\arduino\avr\cores\arduino)中找到Tone.cpp
在大概第100行左右,看代码,修改定时器。代码注释不是很明显,灰色的地方注意一下啊,下面代码中已经修改。
//由于我使用的是MEGA2560的板子,所以在这个地方修改
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)

#define AVAILABLE_TONE_PINS 1
//mega1280 mega2560这里修改!!!为TIMER1
#define USE_TIMER1
//这里 修改为1
const uint8_t PROGMEM tone_pin_to_timer_PGM[] = { 1 /*, 3, 4, 5, 1, 0 */ };
static uint8_t tone_pins[AVAILABLE_TONE_PINS] = { 255 /*, 255, 255, 255, 255, 255 */ };

#elif defined(__AVR_ATmega8__)

#define AVAILABLE_TONE_PINS 1
#define USE_TIMER2

const uint8_t PROGMEM tone_pin_to_timer_PGM[] = { 2 /*, 1 */ };
static uint8_t tone_pins[AVAILABLE_TONE_PINS] = { 255 /*, 255 */ };

#elif defined(__AVR_ATmega32U4__)

#define AVAILABLE_TONE_PINS 1
#define USE_TIMER3

const uint8_t PROGMEM tone_pin_to_timer_PGM[] = { 3 /*, 1 */ };
static uint8_t tone_pins[AVAILABLE_TONE_PINS] = { 255 /*, 255 */ };

#else

#define AVAILABLE_TONE_PINS 1
//之前一直在这里改,然后编译不报错,但是不能发出声音,因为执行的是上边mega2560的代码
#define USE_TIMER1

// Leave timer 0 to last.
//const uint8_t PROGMEM tone_pin_to_timer_PGM[] = { 2 /*, 1, 0 */ };
const uint8_t PROGMEM tone_pin_to_timer_PGM[] = { 1 };
static uint8_t tone_pins[AVAILABLE_TONE_PINS] = { 255 /*, 255, 255 */ };

#endif
登录后复制

正常使用tone函数即可。
实践2. 使用自定义函数
直接复制代码,在ino文件中新建这个函数,调用即可。
缺点:效果没有库函数 tone()好,也正是因此我才去改的定时器,使用原生函数

  • arduino鍒朵綔鐢靛瓙鐞撮亣鍒扮殑闂
    绛旓細瀹炶返1. 淇敼瀹氭椂鍣 鍦arduino 瀹夎鐩綍涓嬶紙鎴戠殑鏄疍:\arduino\hardware\arduino\avr\cores\arduino锛変腑鎵惧埌Tone.cpp 鍦ㄥぇ姒傜100琛屽乏鍙筹紝鐪嬩唬鐮侊紝淇敼瀹氭椂鍣ㄣ備唬鐮佹敞閲婁笉鏄緢鏄庢樉锛岀伆鑹茬殑鍦版柟娉ㄦ剰涓涓嬪晩锛屼笅闈唬鐮佷腑宸茬粡淇敼銆//鐢变簬鎴戜娇鐢ㄧ殑鏄疢EGA2560鐨勬澘瀛愶紝鎵浠ュ湪杩欎釜鍦版柟淇敼 if defined(__AVR_ATme...
  • arduino鐢靛瓙鐞鎸夐敭鍐茬獊
    绛旓細璁剧疆闂銆傚湪姝e父璁剧疆涓嬶紝arduino鐢靛瓙鐞存寜閿槸涓嶄細鍐茬獊鐨勶紝鎸夐敭鍐茬獊鏄敱浜庤缃棶棰樺鑷寸殑銆傜數瀛愮惔鏄竴绉嶇數瀛愰敭鐩樹箰鍣紝灞炰簬鐢靛瓙闊充箰鍚堟垚鍣ㄣ
  • arduino 74hc165澶氫釜鎸夐敭
    绛旓細涓句釜渚嬪瓙锛屽亣璁炬垜浠鍒朵綔涓涓8閿殑鐢靛瓙鐞锛屾瘡涓寜閿搴斾竴涓煶绗︺傛垜浠彲浠ュ皢8涓寜閿垎鍒繛鎺ュ埌74HC165鐨8涓緭鍏ュ紩鑴氫笂锛岀劧鍚庡湪Arduino绋嬪簭涓缃竴涓惊鐜紝涓嶆柇璇诲彇74HC165鐨勮緭鍑烘暟鎹紝骞跺垽鏂摢涓寜閿鎸変笅銆傛牴鎹寜閿殑涓嶅悓锛孉rduino鍙互鍙戝嚭涓嶅悓鐨勯煶绗﹀0闊炽傝繖鏍凤紝鎴戜滑灏卞埄鐢74HC165瀹炵幇浜嗗涓寜閿殑璇诲彇...
  • 鍗曠墖鏈(arduino)椹卞姩鐨勮繖涓數纾佺嚎鍦堢殑缁撴瀯鏄粈涔
    绛旓細閲岄潰鏀句簡涓枃鍙傘備笉淇′綘鎵句釜鍠囧彮锛岄┍鍔ㄤ笅锛屽湪涓婇潰鏀句笂璞嗗瓙浠涔堢殑涔熷彲浠ュ姩銆備粬鍞竴灏辨槸涓嶅悓鍠囧彮鍙戠殑棰戠巼涓嶅悓銆傘傛墍浠ヨ繖涓槸鍜氬挌锛岄偅涓挃鍜旂殑銆傘傜被浼鐢靛瓙鐞鎿嶄綔銆傘傝屼笖涓嶆槸鍗曠函涓涓緭鍑洪煶棰戣屾槸澶氫釜杈撳嚭涓嶅悓棰戠巼鐨勫枃鍙屽凡銆
  • arduino鍙互鍋氫粈涔
    绛旓細鍙互蹇熶娇鐢Arduino涓嶢dobe Flash, Processing, Max/MSP, PureData, SuperCollider绛夎蒋浠剁粨鍚堬紝浣滃嚭浜掑姩浣滃搧銆 Arduino鍙互浣跨敤鐜版湁鐨鐢靛瓙鍏冧欢渚嬪寮鍏虫垨鑰呬紶鎰熷櫒鎴栬呭叾浠栨帶鍒跺櫒浠躲丩ED銆佹杩涢┈杈炬垨鍏朵粬杈撳嚭瑁呯疆銆 Arduino涔熷彲浠ョ嫭绔嬭繍琛岋紝骞朵笌杞欢杩涜浜や簰锛屼緥濡傦細Adobe Flash, Processing, Max/MSP, Pure Data,...
  • 扩展阅读:arduino制作七键电子琴 ... 电子琴主板 ... 电子琴安装视频全过程 ... 用arduino制作小风扇 ... arduino设计简单报警器 ... arduino制作智能手表 ... arduino灭火风扇报告 ... arduino入门小制作 ... arduino蜂鸣器简易电子琴 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网