
不太完善的电子琴程序,既然答应了羞弟,就先贴出来吧
#include <Wire.h> #include <SPI.h> int keymap[70] = {100*20}; int tone_table[14] = { 175,196,221,248, 262,294,330,350,393,441,495, 525,589,661 }; void setup() { Wire.begin(8); Wire.onReceive(receiveEvent); pinMode (8, OUTPUT); pinMode (9, OUTPUT); pinMode (10, OUTPUT); digitalWrite(8, HIGH); SPI.begin(); digitalWrite(10, LOW); SPI.transfer(0x00); SPI.transfer(0xff); SPI.transfer(0xff); digitalWrite(10, HIGH); digitalWrite(9, LOW); delay(100); } byte p1=0x00; void loop() { int i,j,k; int l=0; p1+=16; for(i=1;i<32;i*=2) { k=0xff-((keymap[l++]>0)<<0)-((keymap[l++]>0)<<1)-((keymap[l++]>0)<<2)-((keymap[l++]>0)<<3)-((keymap[l++]>0)<<4)-((keymap[l++]>0)<<5)-((keymap[l++]>0)<<6); j=0xff-((keymap[l++]>0)<<0)-((keymap[l++]>0)<<1)-((keymap[l++]>0)<<2)-((keymap[l++]>0)<<3)-((keymap[l++]>0)<<4)-((keymap[l++]>0)<<5)-((keymap[l++]>0)<<6); if(p1<16) { k=0; j=0; } digitalWrite(10, LOW); SPI.transfer(i); SPI.transfer(j); SPI.transfer(k); digitalWrite(10, HIGH); delayMicroseconds(200); } for(i=0;i<70;i++) keymap[i]-=(keymap[i]>0); } void receiveEvent(int howMany) { int p=0; int l=0; int k=0; while (1 < Wire.available()) { byte c = Wire.read(); p++; if(p==4) l=c*14; if(p==5) k=c; if(p==6) k=(k<<8)+c; } byte x = Wire.read(); if (k>0) for(p=1;p<16384;p*=2) { if((k&p)>0) { keymap[l]=100*20; tone(6,tone_table[l%14],200); } l++; } }
回复
打赏帖 | |
---|---|
汽车电子中巡航控制系统的使用被打赏10分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 | |
分享电子控制安全气囊计算机知识点被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【OZONE】使用方法总结被打赏20分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K314】芯片启动流程分析被打赏40分 | |
【分享开发笔记,赚取电动螺丝刀】【S32K146】S32DS RTD 驱动环境搭建被打赏12分 | |
【分享开发笔记,赚取电动螺丝刀】【IAR】libc标注库time相关库函数使用被打赏23分 | |
LP‑MSPM0L1306开发版试用结果被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【LP-MSPM0L1306】适配 RT-Thread Nano被打赏23分 |