piesonic speaker . 2015 10 31 written

Dependencies:   mbed

Committer:
tamaki
Date:
Thu Nov 05 01:37:13 2015 +0000
Revision:
0:9c24ad364892
Use Tact switch electricpieso speaker tone program

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tamaki 0:9c24ad364892 1 //mbedSwTone
tamaki 0:9c24ad364892 2 // tact Swtitch is pushed then output Beep tone from Piezoelectric speaker
tamaki 0:9c24ad364892 3 //
tamaki 0:9c24ad364892 4 //
tamaki 0:9c24ad364892 5 //
tamaki 0:9c24ad364892 6 #include "mbed.h"
tamaki 0:9c24ad364892 7
tamaki 0:9c24ad364892 8 //define sw ports
tamaki 0:9c24ad364892 9 DigitalIn k1(p13);
tamaki 0:9c24ad364892 10 DigitalIn k2(p15);
tamaki 0:9c24ad364892 11 DigitalIn k3(p14);
tamaki 0:9c24ad364892 12 DigitalIn k4(p17);
tamaki 0:9c24ad364892 13 DigitalIn k5(p18);
tamaki 0:9c24ad364892 14 DigitalIn k6(p19);
tamaki 0:9c24ad364892 15 DigitalIn k7(p10);
tamaki 0:9c24ad364892 16 DigitalIn k8(p20);
tamaki 0:9c24ad364892 17 DigitalIn k9(p9);
tamaki 0:9c24ad364892 18 DigitalIn k10(p7);
tamaki 0:9c24ad364892 19 DigitalIn k11(p8);
tamaki 0:9c24ad364892 20 DigitalIn k12(p6);
tamaki 0:9c24ad364892 21 DigitalIn k13(p5);
tamaki 0:9c24ad364892 22 DigitalIn k14(p22);
tamaki 0:9c24ad364892 23 DigitalIn k15(p21);
tamaki 0:9c24ad364892 24 DigitalIn k16(p23);
tamaki 0:9c24ad364892 25 DigitalIn k17(p24);
tamaki 0:9c24ad364892 26 DigitalIn k18(p25);
tamaki 0:9c24ad364892 27 DigitalIn k19(p29);
tamaki 0:9c24ad364892 28 DigitalIn k20(p27);
tamaki 0:9c24ad364892 29 DigitalIn k21(p30);
tamaki 0:9c24ad364892 30 DigitalIn k22(p28);
tamaki 0:9c24ad364892 31
tamaki 0:9c24ad364892 32 #define SW_N 22//number of key switches
tamaki 0:9c24ad364892 33 PwmOut speaker(p26);
tamaki 0:9c24ad364892 34
tamaki 0:9c24ad364892 35 DigitalOut led(p11);
tamaki 0:9c24ad364892 36
tamaki 0:9c24ad364892 37 //switch status 0:off, 1:posEdge, 2:on, 3:negEdge
tamaki 0:9c24ad364892 38 int sw_st[SW_N];
tamaki 0:9c24ad364892 39
tamaki 0:9c24ad364892 40 //period array
tamaki 0:9c24ad364892 41 int p[SW_N]={
tamaki 0:9c24ad364892 42 1912,
tamaki 0:9c24ad364892 43 1805,
tamaki 0:9c24ad364892 44 1703,
tamaki 0:9c24ad364892 45 1608,
tamaki 0:9c24ad364892 46 1518,
tamaki 0:9c24ad364892 47 1432,
tamaki 0:9c24ad364892 48 1352,
tamaki 0:9c24ad364892 49 1276,
tamaki 0:9c24ad364892 50 1205,
tamaki 0:9c24ad364892 51 1137,
tamaki 0:9c24ad364892 52 1073,
tamaki 0:9c24ad364892 53 1013,
tamaki 0:9c24ad364892 54 956,
tamaki 0:9c24ad364892 55 902,
tamaki 0:9c24ad364892 56 852,
tamaki 0:9c24ad364892 57 804,
tamaki 0:9c24ad364892 58 759,
tamaki 0:9c24ad364892 59 716,
tamaki 0:9c24ad364892 60 676,
tamaki 0:9c24ad364892 61 638,
tamaki 0:9c24ad364892 62 602,
tamaki 0:9c24ad364892 63 568
tamaki 0:9c24ad364892 64 };
tamaki 0:9c24ad364892 65
tamaki 0:9c24ad364892 66 void chksw(void)
tamaki 0:9c24ad364892 67 {
tamaki 0:9c24ad364892 68 static int ssw[SW_N], psw[SW_N], cnt[SW_N], tcnt[SW_N];
tamaki 0:9c24ad364892 69 int i;
tamaki 0:9c24ad364892 70
tamaki 0:9c24ad364892 71 psw[0] = k1;
tamaki 0:9c24ad364892 72 psw[1] = k2;
tamaki 0:9c24ad364892 73 psw[2] = k3;
tamaki 0:9c24ad364892 74 psw[3] = k4;
tamaki 0:9c24ad364892 75 psw[4] = k5;
tamaki 0:9c24ad364892 76 psw[5] = k6;
tamaki 0:9c24ad364892 77 psw[6] = k7;
tamaki 0:9c24ad364892 78 psw[7] = k8;
tamaki 0:9c24ad364892 79 psw[8] = k9;
tamaki 0:9c24ad364892 80 psw[9] = k10;
tamaki 0:9c24ad364892 81 psw[10] = k11;
tamaki 0:9c24ad364892 82 psw[11] = k12;
tamaki 0:9c24ad364892 83 psw[12] = k13;
tamaki 0:9c24ad364892 84 psw[13] = k14;
tamaki 0:9c24ad364892 85 psw[14] = k15;
tamaki 0:9c24ad364892 86 psw[15] = k16;
tamaki 0:9c24ad364892 87 psw[16] = k17;
tamaki 0:9c24ad364892 88 psw[17] = k18;
tamaki 0:9c24ad364892 89 psw[18] = k19;
tamaki 0:9c24ad364892 90 psw[19] = k20;
tamaki 0:9c24ad364892 91 psw[20] = k21;
tamaki 0:9c24ad364892 92 psw[21] = k22;
tamaki 0:9c24ad364892 93
tamaki 0:9c24ad364892 94 //switch status 0:off, 1:posEdge, 2:on, 3:negEdge
tamaki 0:9c24ad364892 95 for(i = 0; i < SW_N; i++){
tamaki 0:9c24ad364892 96 if((ssw[i] == 0)&&(psw[i] == 0)){
tamaki 0:9c24ad364892 97 sw_st[i] = 2;//on
tamaki 0:9c24ad364892 98 tcnt[i] ++;
tamaki 0:9c24ad364892 99 }
tamaki 0:9c24ad364892 100 if((ssw[i] == 0)&&(psw[i] == 1)){
tamaki 0:9c24ad364892 101 sw_st[i] = 3;//negEdge
tamaki 0:9c24ad364892 102 cnt[i] = tcnt[i];
tamaki 0:9c24ad364892 103 }
tamaki 0:9c24ad364892 104 if((ssw[i] == 1)&&(psw[i] == 1)){
tamaki 0:9c24ad364892 105 sw_st[i] = 0;//off
tamaki 0:9c24ad364892 106 tcnt[i] ++;
tamaki 0:9c24ad364892 107 }
tamaki 0:9c24ad364892 108 if((ssw[i] == 1)&&(psw[i] == 0)){
tamaki 0:9c24ad364892 109 sw_st[i] = 1;//posEdge
tamaki 0:9c24ad364892 110 cnt[i] = tcnt[i];
tamaki 0:9c24ad364892 111 }
tamaki 0:9c24ad364892 112 ssw[i] = psw[i];
tamaki 0:9c24ad364892 113 }
tamaki 0:9c24ad364892 114 }
tamaki 0:9c24ad364892 115
tamaki 0:9c24ad364892 116 void beepon(int i)
tamaki 0:9c24ad364892 117 {
tamaki 0:9c24ad364892 118 speaker.period_us(p[i]);//change period
tamaki 0:9c24ad364892 119 speaker.write(0.5);//duty = 50% -> on
tamaki 0:9c24ad364892 120 }
tamaki 0:9c24ad364892 121
tamaki 0:9c24ad364892 122 void beepoff(int i)
tamaki 0:9c24ad364892 123 {
tamaki 0:9c24ad364892 124 speaker.write(0);//duty = 0% -> off
tamaki 0:9c24ad364892 125 }
tamaki 0:9c24ad364892 126
tamaki 0:9c24ad364892 127 void beep(void)
tamaki 0:9c24ad364892 128 {
tamaki 0:9c24ad364892 129 int i;
tamaki 0:9c24ad364892 130 for(i = 0; i < SW_N; i++){
tamaki 0:9c24ad364892 131 if(sw_st[i] == 1){//Positive edge
tamaki 0:9c24ad364892 132 beepon(i);
tamaki 0:9c24ad364892 133 led = 1;
tamaki 0:9c24ad364892 134 }
tamaki 0:9c24ad364892 135 if(sw_st[i] == 3){//Negative edge
tamaki 0:9c24ad364892 136 beepoff(i);
tamaki 0:9c24ad364892 137 led = 0;
tamaki 0:9c24ad364892 138 }
tamaki 0:9c24ad364892 139 }
tamaki 0:9c24ad364892 140 }
tamaki 0:9c24ad364892 141
tamaki 0:9c24ad364892 142 int main() {
tamaki 0:9c24ad364892 143 // speaker.pulsewidth(0.5);
tamaki 0:9c24ad364892 144 k1.mode(PullUp);
tamaki 0:9c24ad364892 145 k2.mode(PullUp);
tamaki 0:9c24ad364892 146 k3.mode(PullUp);
tamaki 0:9c24ad364892 147 k4.mode(PullUp);
tamaki 0:9c24ad364892 148 k5.mode(PullUp);
tamaki 0:9c24ad364892 149 k6.mode(PullUp);
tamaki 0:9c24ad364892 150 k7.mode(PullUp);
tamaki 0:9c24ad364892 151 k8.mode(PullUp);
tamaki 0:9c24ad364892 152 k9.mode(PullUp);
tamaki 0:9c24ad364892 153 k10.mode(PullUp);
tamaki 0:9c24ad364892 154 k11.mode(PullUp);
tamaki 0:9c24ad364892 155 k12.mode(PullUp);
tamaki 0:9c24ad364892 156 k13.mode(PullUp);
tamaki 0:9c24ad364892 157 k14.mode(PullUp);
tamaki 0:9c24ad364892 158 k15.mode(PullUp);
tamaki 0:9c24ad364892 159 k16.mode(PullUp);
tamaki 0:9c24ad364892 160 k17.mode(PullUp);
tamaki 0:9c24ad364892 161 k18.mode(PullUp);
tamaki 0:9c24ad364892 162 k19.mode(PullUp);
tamaki 0:9c24ad364892 163 k20.mode(PullUp);
tamaki 0:9c24ad364892 164 k21.mode(PullUp);
tamaki 0:9c24ad364892 165 k22.mode(PullUp);
tamaki 0:9c24ad364892 166 while(1) {
tamaki 0:9c24ad364892 167 chksw();
tamaki 0:9c24ad364892 168 beep();
tamaki 0:9c24ad364892 169 }
tamaki 0:9c24ad364892 170 }