M tamaki
/
mbedSwTone
piesonic speaker . 2015 10 31 written
main.cpp@0:9c24ad364892, 2015-11-05 (annotated)
- 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?
User | Revision | Line number | New 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 | } |