このライブラリはSW認識を行います。 SWは1個から20個まで認識できます。 SWの認識周期は10msです。 SWはmbedの端子とGNDの間に接続します。 This library does the recognition SW. SW, one can recognize up to 20. Recognition of the SW period is 10ms. SW is connected to GND terminal of mbed. ON the SW, OFF (level) data output. Output data from OFF to ON edge of the SW. Output data from ON to OFF edge of the SW. SWのON,OFF(レベル)データを出力します。 SWのOFFからONのエッジデータを出力します。 SWのONからOFFのエッジデータを出力します。
Dependents: kitchenTimer_Clock SwDigitalLibraryExampleProgram
Libraryの使い方については次のHPを参照してください。 http://mbed.org/users/suupen/code/SwDigitalLibraryExampleProgram/wiki/Homepage
SwDigital.cpp@2:af5fbc75b7bf, 2011-12-11 (annotated)
- Committer:
- suupen
- Date:
- Sun Dec 11 01:01:56 2011 +0000
- Revision:
- 2:af5fbc75b7bf
- Parent:
- 0:4787131a6a18
V1.01 2011/12/11 example program bug fix
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
suupen | 0:4787131a6a18 | 1 | //====================================================================== |
suupen | 0:4787131a6a18 | 2 | // SwDigital.cpp |
suupen | 0:4787131a6a18 | 3 | // |
suupen | 0:4787131a6a18 | 4 | // pwmOutput - digtalOutput de sound syuturyoku suru library |
suupen | 0:4787131a6a18 | 5 | //====================================================================== |
suupen | 0:4787131a6a18 | 6 | #define _SWDIGITAL_C |
suupen | 0:4787131a6a18 | 7 | |
suupen | 0:4787131a6a18 | 8 | #include "mbed.h" |
suupen | 0:4787131a6a18 | 9 | #include "SwDigital.h" |
suupen | 0:4787131a6a18 | 10 | |
suupen | 0:4787131a6a18 | 11 | //====================================================================== |
suupen | 0:4787131a6a18 | 12 | // syokika |
suupen | 0:4787131a6a18 | 13 | //====================================================================== |
suupen | 0:4787131a6a18 | 14 | |
suupen | 0:4787131a6a18 | 15 | SwDigital::SwDigital(PinName sw0, PinName sw1, PinName sw2, PinName sw3, PinName sw4, |
suupen | 0:4787131a6a18 | 16 | PinName sw5, PinName sw6, PinName sw7, PinName sw8, PinName sw9, |
suupen | 0:4787131a6a18 | 17 | PinName sw10, PinName sw11, PinName sw12, PinName sw13, PinName sw14, |
suupen | 0:4787131a6a18 | 18 | PinName sw15, PinName sw16, PinName sw17, PinName sw18, PinName sw19 |
suupen | 0:4787131a6a18 | 19 | ): |
suupen | 0:4787131a6a18 | 20 | _sw0(sw0), _sw1(sw1), _sw2(sw2), _sw3(sw3), _sw4(sw4), |
suupen | 0:4787131a6a18 | 21 | _sw5(sw5), _sw6(sw6), _sw7(sw7), _sw8(sw8), _sw9(sw9), |
suupen | 0:4787131a6a18 | 22 | _sw10(sw10), _sw11(sw11), _sw12(sw12), _sw13(sw13), _sw14(sw14), |
suupen | 0:4787131a6a18 | 23 | _sw15(sw15), _sw16(sw16), _sw17(sw17), _sw18(sw18), _sw19(sw19) |
suupen | 0:4787131a6a18 | 24 | { |
suupen | 0:4787131a6a18 | 25 | |
suupen | 0:4787131a6a18 | 26 | //--------------------------------- |
suupen | 0:4787131a6a18 | 27 | // touroku sareta Sw Suu wo kakunin |
suupen | 0:4787131a6a18 | 28 | //--------------------------------- |
suupen | 0:4787131a6a18 | 29 | if(sw0 != NC){D_swSuu = 1; _sw0.mode(PullUp);} |
suupen | 0:4787131a6a18 | 30 | if(sw1 != NC){D_swSuu = 2; _sw1.mode(PullUp);} |
suupen | 0:4787131a6a18 | 31 | if(sw2 != NC){D_swSuu = 3; _sw2.mode(PullUp);} |
suupen | 0:4787131a6a18 | 32 | if(sw3 != NC){D_swSuu = 4; _sw3.mode(PullUp);} |
suupen | 0:4787131a6a18 | 33 | if(sw4 != NC){D_swSuu = 5; _sw4.mode(PullUp);} |
suupen | 0:4787131a6a18 | 34 | |
suupen | 0:4787131a6a18 | 35 | if(sw5 != NC){D_swSuu = 6; _sw5.mode(PullUp);} |
suupen | 0:4787131a6a18 | 36 | if(sw6 != NC){D_swSuu = 7; _sw6.mode(PullUp);} |
suupen | 0:4787131a6a18 | 37 | if(sw7 != NC){D_swSuu = 8; _sw7.mode(PullUp);} |
suupen | 0:4787131a6a18 | 38 | if(sw8 != NC){D_swSuu = 9; _sw8.mode(PullUp);} |
suupen | 0:4787131a6a18 | 39 | if(sw9 != NC){D_swSuu = 10; _sw9.mode(PullUp);} |
suupen | 0:4787131a6a18 | 40 | |
suupen | 0:4787131a6a18 | 41 | if(sw10 != NC){D_swSuu = 11; _sw10.mode(PullUp);} |
suupen | 0:4787131a6a18 | 42 | if(sw11 != NC){D_swSuu = 12; _sw11.mode(PullUp);} |
suupen | 0:4787131a6a18 | 43 | if(sw12 != NC){D_swSuu = 13; _sw12.mode(PullUp);} |
suupen | 0:4787131a6a18 | 44 | if(sw13 != NC){D_swSuu = 14; _sw13.mode(PullUp);} |
suupen | 0:4787131a6a18 | 45 | if(sw14 != NC){D_swSuu = 15; _sw14.mode(PullUp);} |
suupen | 0:4787131a6a18 | 46 | |
suupen | 0:4787131a6a18 | 47 | if(sw15 != NC){D_swSuu = 16; _sw15.mode(PullUp);} |
suupen | 0:4787131a6a18 | 48 | if(sw16 != NC){D_swSuu = 17; _sw16.mode(PullUp);} |
suupen | 0:4787131a6a18 | 49 | if(sw17 != NC){D_swSuu = 18; _sw17.mode(PullUp);} |
suupen | 0:4787131a6a18 | 50 | if(sw18 != NC){D_swSuu = 19; _sw18.mode(PullUp);} |
suupen | 0:4787131a6a18 | 51 | if(sw19 != NC){D_swSuu = 20; _sw19.mode(PullUp);} |
suupen | 0:4787131a6a18 | 52 | |
suupen | 0:4787131a6a18 | 53 | // sw ninsiki syuki 10[ms] |
suupen | 0:4787131a6a18 | 54 | swCheckTimer.attach_us(this, &SwDigital::input, Z_matchcycle); |
suupen | 0:4787131a6a18 | 55 | |
suupen | 0:4787131a6a18 | 56 | } |
suupen | 0:4787131a6a18 | 57 | |
suupen | 0:4787131a6a18 | 58 | void SwDigital::input(void){ |
suupen | 0:4787131a6a18 | 59 | // genzai level input |
suupen | 0:4787131a6a18 | 60 | switch(D_swSuu){ |
suupen | 0:4787131a6a18 | 61 | case 20: |
suupen | 0:4787131a6a18 | 62 | B_kariLevel[19] = ((B_kariLevel[19] << 1) | (((uint8_t)~_sw19) & 0x01)); |
suupen | 0:4787131a6a18 | 63 | //break; |
suupen | 0:4787131a6a18 | 64 | case 19: |
suupen | 0:4787131a6a18 | 65 | B_kariLevel[18] = ((B_kariLevel[18] << 1) | (((uint8_t)~_sw18) & 0x01)); |
suupen | 0:4787131a6a18 | 66 | //break; |
suupen | 0:4787131a6a18 | 67 | case 18: |
suupen | 0:4787131a6a18 | 68 | B_kariLevel[17] = ((B_kariLevel[17] << 1) | (((uint8_t)~_sw17) & 0x01)); |
suupen | 0:4787131a6a18 | 69 | //break; |
suupen | 0:4787131a6a18 | 70 | case 17: |
suupen | 0:4787131a6a18 | 71 | B_kariLevel[16] = ((B_kariLevel[16] << 1) | (((uint8_t)~_sw16) & 0x01)); |
suupen | 0:4787131a6a18 | 72 | //break; |
suupen | 0:4787131a6a18 | 73 | case 16: |
suupen | 0:4787131a6a18 | 74 | B_kariLevel[15] = ((B_kariLevel[15] << 1) | (((uint8_t)~_sw15) & 0x01)); |
suupen | 0:4787131a6a18 | 75 | //break; |
suupen | 0:4787131a6a18 | 76 | case 15: |
suupen | 0:4787131a6a18 | 77 | B_kariLevel[14] = ((B_kariLevel[14] << 1) | (((uint8_t)~_sw14) & 0x01)); |
suupen | 0:4787131a6a18 | 78 | //break; |
suupen | 0:4787131a6a18 | 79 | case 14: |
suupen | 0:4787131a6a18 | 80 | B_kariLevel[13] = ((B_kariLevel[13] << 1) | (((uint8_t)~_sw13) & 0x01)); |
suupen | 0:4787131a6a18 | 81 | //break; |
suupen | 0:4787131a6a18 | 82 | case 13: |
suupen | 0:4787131a6a18 | 83 | B_kariLevel[12] = ((B_kariLevel[12] << 1) | (((uint8_t)~_sw12) & 0x01)); |
suupen | 0:4787131a6a18 | 84 | //break; |
suupen | 0:4787131a6a18 | 85 | case 12: |
suupen | 0:4787131a6a18 | 86 | B_kariLevel[11] = ((B_kariLevel[11] << 1) | (((uint8_t)~_sw11) & 0x01)); |
suupen | 0:4787131a6a18 | 87 | //break; |
suupen | 0:4787131a6a18 | 88 | case 11: |
suupen | 0:4787131a6a18 | 89 | B_kariLevel[10] = ((B_kariLevel[10] << 1) | (((uint8_t)~_sw10) & 0x01)); |
suupen | 0:4787131a6a18 | 90 | //break; |
suupen | 0:4787131a6a18 | 91 | |
suupen | 0:4787131a6a18 | 92 | case 10: |
suupen | 0:4787131a6a18 | 93 | B_kariLevel[9] = ((B_kariLevel[9] << 1) | (((uint8_t)~_sw9) & 0x01)); |
suupen | 0:4787131a6a18 | 94 | //break; |
suupen | 0:4787131a6a18 | 95 | case 9: |
suupen | 0:4787131a6a18 | 96 | B_kariLevel[8] = ((B_kariLevel[8] << 1) | (((uint8_t)~_sw8) & 0x01)); |
suupen | 0:4787131a6a18 | 97 | //break; |
suupen | 0:4787131a6a18 | 98 | case 8: |
suupen | 0:4787131a6a18 | 99 | B_kariLevel[7] = ((B_kariLevel[7] << 1) | (((uint8_t)~_sw7) & 0x01)); |
suupen | 0:4787131a6a18 | 100 | //break; |
suupen | 0:4787131a6a18 | 101 | case 7: |
suupen | 0:4787131a6a18 | 102 | B_kariLevel[6] = ((B_kariLevel[6] << 1) | (((uint8_t)~_sw6) & 0x01)); |
suupen | 0:4787131a6a18 | 103 | //break; |
suupen | 0:4787131a6a18 | 104 | case 6: |
suupen | 0:4787131a6a18 | 105 | B_kariLevel[5] = ((B_kariLevel[5] << 1) | (((uint8_t)~_sw5) & 0x01)); |
suupen | 0:4787131a6a18 | 106 | //break; |
suupen | 0:4787131a6a18 | 107 | case 5: |
suupen | 0:4787131a6a18 | 108 | B_kariLevel[4] = ((B_kariLevel[4] << 1) | (((uint8_t)~_sw4) & 0x01)); |
suupen | 0:4787131a6a18 | 109 | //break; |
suupen | 0:4787131a6a18 | 110 | case 4: |
suupen | 0:4787131a6a18 | 111 | B_kariLevel[3] = ((B_kariLevel[3] << 1) | (((uint8_t)~_sw3) & 0x01)); |
suupen | 0:4787131a6a18 | 112 | //break; |
suupen | 0:4787131a6a18 | 113 | case 3: |
suupen | 0:4787131a6a18 | 114 | B_kariLevel[2] = ((B_kariLevel[2] << 1) | (((uint8_t)~_sw2) & 0x01)); |
suupen | 0:4787131a6a18 | 115 | //break; |
suupen | 0:4787131a6a18 | 116 | case 2: |
suupen | 0:4787131a6a18 | 117 | B_kariLevel[1] = ((B_kariLevel[1] << 1) | (((uint8_t)~_sw1) & 0x01)); |
suupen | 0:4787131a6a18 | 118 | //break; |
suupen | 0:4787131a6a18 | 119 | case 1: |
suupen | 0:4787131a6a18 | 120 | B_kariLevel[0] = ((B_kariLevel[0] << 1) | (((uint8_t)~_sw0) & 0x01)); |
suupen | 0:4787131a6a18 | 121 | //break; |
suupen | 0:4787131a6a18 | 122 | default: |
suupen | 0:4787131a6a18 | 123 | // nothing |
suupen | 0:4787131a6a18 | 124 | break; |
suupen | 0:4787131a6a18 | 125 | } |
suupen | 0:4787131a6a18 | 126 | |
suupen | 0:4787131a6a18 | 127 | // kakutei Level kosin |
suupen | 0:4787131a6a18 | 128 | uint8_t kakutei = 0; |
suupen | 0:4787131a6a18 | 129 | for(uint8_t i = 0; i < D_swSuu; i++){ |
suupen | 0:4787131a6a18 | 130 | uint8_t work = B_kariLevel[i] & Z_itchiPattern; |
suupen | 0:4787131a6a18 | 131 | if(work == 0x00){ |
suupen | 0:4787131a6a18 | 132 | // off kakutei |
suupen | 0:4787131a6a18 | 133 | D_oldLevel[i] = D_nowLevel[i]; |
suupen | 0:4787131a6a18 | 134 | D_nowLevel[i] = Z_levelOff; |
suupen | 0:4787131a6a18 | 135 | kakutei = 1; |
suupen | 0:4787131a6a18 | 136 | } |
suupen | 0:4787131a6a18 | 137 | else if(work == Z_itchiPattern){ |
suupen | 0:4787131a6a18 | 138 | // on kakutei |
suupen | 0:4787131a6a18 | 139 | D_oldLevel[i] = D_nowLevel[i]; |
suupen | 0:4787131a6a18 | 140 | D_nowLevel[i] = Z_levelOn; |
suupen | 0:4787131a6a18 | 141 | kakutei = 1; |
suupen | 0:4787131a6a18 | 142 | } |
suupen | 0:4787131a6a18 | 143 | else{ |
suupen | 0:4787131a6a18 | 144 | // nothing |
suupen | 0:4787131a6a18 | 145 | } |
suupen | 0:4787131a6a18 | 146 | |
suupen | 0:4787131a6a18 | 147 | if(kakutei == 1){ |
suupen | 0:4787131a6a18 | 148 | // edge kosin |
suupen | 0:4787131a6a18 | 149 | if((D_oldLevel[i] == Z_levelOff) && (D_nowLevel[i] == Z_levelOn)){ |
suupen | 0:4787131a6a18 | 150 | B_edgeOn[i] = Z_edgeAri; |
suupen | 0:4787131a6a18 | 151 | } |
suupen | 0:4787131a6a18 | 152 | if((D_oldLevel[i] == Z_levelOn) && (D_nowLevel[i] == Z_levelOff)){ |
suupen | 0:4787131a6a18 | 153 | B_edgeOff[i] = Z_edgeAri; |
suupen | 0:4787131a6a18 | 154 | } |
suupen | 0:4787131a6a18 | 155 | } |
suupen | 0:4787131a6a18 | 156 | |
suupen | 0:4787131a6a18 | 157 | } |
suupen | 0:4787131a6a18 | 158 | } |
suupen | 0:4787131a6a18 | 159 | |
suupen | 0:4787131a6a18 | 160 | void SwDigital::refreshEdgeData(void){ |
suupen | 0:4787131a6a18 | 161 | for(uint8_t i = 0; i < D_swSuu; i++){ |
suupen | 0:4787131a6a18 | 162 | __disable_irq(); // Disable Interrupts |
suupen | 0:4787131a6a18 | 163 | D_edgeOn[i] = B_edgeOn[i]; |
suupen | 0:4787131a6a18 | 164 | D_edgeOff[i] = B_edgeOff[i]; |
suupen | 0:4787131a6a18 | 165 | |
suupen | 0:4787131a6a18 | 166 | B_edgeOn[i] = Z_edgeNasi; |
suupen | 0:4787131a6a18 | 167 | B_edgeOff[i] = Z_edgeNasi; |
suupen | 0:4787131a6a18 | 168 | __enable_irq(); // Enable Interrupts |
suupen | 0:4787131a6a18 | 169 | } |
suupen | 0:4787131a6a18 | 170 | } |
suupen | 0:4787131a6a18 | 171 | |
suupen | 0:4787131a6a18 | 172 | uint8_t SwDigital::checkEdgeOn(uint8_t swNo){ |
suupen | 0:4787131a6a18 | 173 | uint8_t ans = 0; |
suupen | 0:4787131a6a18 | 174 | |
suupen | 0:4787131a6a18 | 175 | if(D_edgeOn[swNo] == Z_edgeAri){ |
suupen | 0:4787131a6a18 | 176 | ans = 1; |
suupen | 0:4787131a6a18 | 177 | } |
suupen | 0:4787131a6a18 | 178 | |
suupen | 0:4787131a6a18 | 179 | return (ans); |
suupen | 0:4787131a6a18 | 180 | } |
suupen | 0:4787131a6a18 | 181 | |
suupen | 0:4787131a6a18 | 182 | uint8_t SwDigital::checkEdgeOff(uint8_t swNo){ |
suupen | 0:4787131a6a18 | 183 | uint8_t ans = 0; |
suupen | 0:4787131a6a18 | 184 | |
suupen | 0:4787131a6a18 | 185 | if(D_edgeOff[swNo] == Z_edgeAri){ |
suupen | 0:4787131a6a18 | 186 | ans = 1; |
suupen | 0:4787131a6a18 | 187 | } |
suupen | 0:4787131a6a18 | 188 | |
suupen | 0:4787131a6a18 | 189 | return (ans); |
suupen | 0:4787131a6a18 | 190 | } |
suupen | 0:4787131a6a18 | 191 | |
suupen | 0:4787131a6a18 | 192 | uint8_t SwDigital::checkLevel(uint8_t swNo){ |
suupen | 0:4787131a6a18 | 193 | uint8_t ans = 0; |
suupen | 0:4787131a6a18 | 194 | |
suupen | 0:4787131a6a18 | 195 | if(D_nowLevel[swNo] == Z_levelOn){ |
suupen | 0:4787131a6a18 | 196 | ans = 1; |
suupen | 0:4787131a6a18 | 197 | } |
suupen | 0:4787131a6a18 | 198 | |
suupen | 0:4787131a6a18 | 199 | return (ans); |
suupen | 0:4787131a6a18 | 200 | } |