このライブラリは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

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?

UserRevisionLine numberNew 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 }