アナログポート から スイッチを3つ認識するライブラリです。 6つのアナログポートを同時に認識して、18個のSWまで認識できます。

Dependents:   kitchenTimer LPC1114FN28_kitchenTimer_Clock

Committer:
suupen
Date:
Mon Nov 25 05:50:21 2013 +0000
Revision:
1:ebaa87e67cef
Parent:
0:ba027616fdf1
The Library was modified for use in the LPC1114FN28.
;
;
;
;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
suupen 0:ba027616fdf1 1 //======================================================================
suupen 0:ba027616fdf1 2 // SwAnalog.cpp
suupen 0:ba027616fdf1 3 //
suupen 0:ba027616fdf1 4 //
suupen 0:ba027616fdf1 5 //======================================================================
suupen 0:ba027616fdf1 6 #define _SWANALOG_C
suupen 0:ba027616fdf1 7
suupen 0:ba027616fdf1 8 #include "mbed.h"
suupen 0:ba027616fdf1 9 #include "SwAnalog.h"
suupen 0:ba027616fdf1 10
suupen 0:ba027616fdf1 11 //======================================================================
suupen 0:ba027616fdf1 12 // syokika
suupen 0:ba027616fdf1 13 //======================================================================
suupen 0:ba027616fdf1 14
suupen 1:ebaa87e67cef 15 #ifdef LPC1768
suupen 0:ba027616fdf1 16 SwAnalog::SwAnalog(PinName adinput0, PinName adinput1, PinName adinput2, PinName adinput3, PinName adinput4,
suupen 0:ba027616fdf1 17 PinName adinput5
suupen 0:ba027616fdf1 18 ):
suupen 0:ba027616fdf1 19 _adinput0(adinput0), _adinput1(adinput1), _adinput2(adinput2), _adinput3(adinput3), _adinput4(adinput4),
suupen 0:ba027616fdf1 20 _adinput5(adinput5)
suupen 0:ba027616fdf1 21 {
suupen 0:ba027616fdf1 22
suupen 0:ba027616fdf1 23 //---------------------------------
suupen 0:ba027616fdf1 24 // touroku sareta Sw Suu wo kakunin
suupen 0:ba027616fdf1 25 //---------------------------------
suupen 0:ba027616fdf1 26 if(adinput0 != NC){D_swPinSuu = 1;}
suupen 0:ba027616fdf1 27 if(adinput1 != NC){D_swPinSuu = 2;}
suupen 0:ba027616fdf1 28 if(adinput2 != NC){D_swPinSuu = 3;}
suupen 0:ba027616fdf1 29 if(adinput3 != NC){D_swPinSuu = 4;}
suupen 0:ba027616fdf1 30 if(adinput4 != NC){D_swPinSuu = 5;}
suupen 0:ba027616fdf1 31
suupen 0:ba027616fdf1 32 if(adinput5 != NC){D_swPinSuu = 6;}
suupen 0:ba027616fdf1 33
suupen 0:ba027616fdf1 34
suupen 0:ba027616fdf1 35 // sw ninsiki syuki 10[ms]
suupen 1:ebaa87e67cef 36 // swCheckTimer.attach_us(this, &SwAnalog::input, Z_matchcycle);
suupen 0:ba027616fdf1 37
suupen 0:ba027616fdf1 38 }
suupen 1:ebaa87e67cef 39 #else // ~LPC1768
suupen 1:ebaa87e67cef 40 SwAnalog::SwAnalog(PinName adinput0, PinName adinput1
suupen 1:ebaa87e67cef 41 ):
suupen 1:ebaa87e67cef 42 _adinput0(adinput0), _adinput1(adinput1)
suupen 1:ebaa87e67cef 43 {
suupen 1:ebaa87e67cef 44
suupen 1:ebaa87e67cef 45 //---------------------------------
suupen 1:ebaa87e67cef 46 // touroku sareta Sw Suu wo kakunin
suupen 1:ebaa87e67cef 47 //---------------------------------
suupen 1:ebaa87e67cef 48 if(adinput0 != NC){D_swPinSuu = 1;}
suupen 1:ebaa87e67cef 49 if(adinput1 != NC){D_swPinSuu = 2;}
suupen 1:ebaa87e67cef 50
suupen 1:ebaa87e67cef 51
suupen 1:ebaa87e67cef 52 // sw ninsiki syuki 10[ms]
suupen 1:ebaa87e67cef 53 swCheckTimer.attach_us(this, &SwAnalog::input, Z_matchcycle);
suupen 1:ebaa87e67cef 54
suupen 1:ebaa87e67cef 55 }
suupen 1:ebaa87e67cef 56 #endif // LPC1768
suupen 0:ba027616fdf1 57
suupen 0:ba027616fdf1 58 //=================================================
suupen 0:ba027616fdf1 59 // analog input data wo sw data ni henkan
suupen 0:ba027616fdf1 60 //=================================================
suupen 0:ba027616fdf1 61 void SwAnalog::adInput(float ad, uint8_t swPinSuu){
suupen 0:ba027616fdf1 62 uint8_t ans = 0; // SW ninsikichi 2bit = sw2, 1bit = sw1, 0bit = sw0 0:OFF 1:ON
suupen 0:ba027616fdf1 63
suupen 0:ba027616fdf1 64
suupen 0:ba027616fdf1 65 // ad ninsikich kara sw jotai wo kakutei
suupen 0:ba027616fdf1 66
suupen 0:ba027616fdf1 67 if (ad <= Z_threshold0_1){ans = 0;}
suupen 0:ba027616fdf1 68 else if(ad <= Z_threshold1_2){ans = 1;}
suupen 0:ba027616fdf1 69 else if(ad <= Z_threshold2_3){ans = 2;}
suupen 0:ba027616fdf1 70 else if(ad <= Z_threshold3_4){ans = 3;}
suupen 0:ba027616fdf1 71 else if(ad <= Z_threshold4_5){ans = 4;}
suupen 0:ba027616fdf1 72 else if(ad <= Z_threshold5_6){ans = 5;}
suupen 0:ba027616fdf1 73 else if(ad <= Z_threshold6_7){ans = 6;}
suupen 0:ba027616fdf1 74 else {ans = 7;}
suupen 0:ba027616fdf1 75
suupen 0:ba027616fdf1 76
suupen 0:ba027616fdf1 77 B_kariLevel[(swPinSuu * Z_swInNoMax) + 0] = ((B_kariLevel[(swPinSuu * Z_swInNoMax) + 0] << 1) | (ans & 0x01) );
suupen 0:ba027616fdf1 78 B_kariLevel[(swPinSuu * Z_swInNoMax) + 1] = ((B_kariLevel[(swPinSuu * Z_swInNoMax) + 1] << 1) | ((ans & 0x02) >> 1));
suupen 0:ba027616fdf1 79 B_kariLevel[(swPinSuu * Z_swInNoMax) + 2] = ((B_kariLevel[(swPinSuu * Z_swInNoMax) + 2] << 1) | ((ans & 0x04) >> 2));
suupen 0:ba027616fdf1 80 }
suupen 0:ba027616fdf1 81
suupen 0:ba027616fdf1 82 //==========================================
suupen 0:ba027616fdf1 83 // subeteno analog input port no sw ninsiki
suupen 0:ba027616fdf1 84 //==========================================
suupen 0:ba027616fdf1 85 void SwAnalog::input(void){
suupen 0:ba027616fdf1 86 // genzai level input
suupen 0:ba027616fdf1 87 switch(D_swPinSuu){
suupen 1:ebaa87e67cef 88 #ifdef LPC1768
suupen 0:ba027616fdf1 89 case 6:
suupen 0:ba027616fdf1 90 adInput(_adinput5, 5);
suupen 0:ba027616fdf1 91 //break;
suupen 0:ba027616fdf1 92 case 5:
suupen 0:ba027616fdf1 93 adInput(_adinput4, 4);
suupen 0:ba027616fdf1 94 //break;
suupen 0:ba027616fdf1 95 case 4:
suupen 0:ba027616fdf1 96 adInput(_adinput3, 3);
suupen 0:ba027616fdf1 97 //break;
suupen 0:ba027616fdf1 98 case 3:
suupen 0:ba027616fdf1 99 adInput(_adinput2, 2);
suupen 0:ba027616fdf1 100 //break;
suupen 1:ebaa87e67cef 101 #endif // LPC1768
suupen 0:ba027616fdf1 102 case 2:
suupen 0:ba027616fdf1 103 adInput(_adinput1, 1);
suupen 0:ba027616fdf1 104 //break;
suupen 0:ba027616fdf1 105 case 1:
suupen 0:ba027616fdf1 106 adInput(_adinput0, 0);
suupen 0:ba027616fdf1 107 //break;
suupen 0:ba027616fdf1 108 default:
suupen 0:ba027616fdf1 109 // nothing
suupen 0:ba027616fdf1 110 break;
suupen 0:ba027616fdf1 111 }
suupen 0:ba027616fdf1 112
suupen 0:ba027616fdf1 113 // kakutei Level kosin
suupen 0:ba027616fdf1 114 uint8_t kakutei = 0;
suupen 0:ba027616fdf1 115 for(uint8_t swPinSuu = 0; swPinSuu < D_swPinSuu; swPinSuu++){
suupen 0:ba027616fdf1 116 for(uint8_t swInNo = 0; swInNo < Z_swInNoMax; swInNo++){
suupen 0:ba027616fdf1 117 uint8_t work = B_kariLevel[(swPinSuu * Z_swInNoMax) + swInNo] & Z_itchiPattern;
suupen 0:ba027616fdf1 118 if(work == 0x00){
suupen 0:ba027616fdf1 119 // off kakutei
suupen 0:ba027616fdf1 120 D_oldLevel[(swPinSuu * Z_swInNoMax) + swInNo] = D_nowLevel[(swPinSuu * Z_swInNoMax) + swInNo];
suupen 0:ba027616fdf1 121 D_nowLevel[(swPinSuu * Z_swInNoMax) + swInNo] = Z_levelOff;
suupen 0:ba027616fdf1 122 kakutei = 1;
suupen 0:ba027616fdf1 123 }
suupen 0:ba027616fdf1 124 else if(work == Z_itchiPattern){
suupen 0:ba027616fdf1 125 // on kakutei
suupen 0:ba027616fdf1 126 D_oldLevel[(swPinSuu * Z_swInNoMax) + swInNo] = D_nowLevel[(swPinSuu * Z_swInNoMax) + swInNo];
suupen 0:ba027616fdf1 127 D_nowLevel[(swPinSuu * Z_swInNoMax) + swInNo] = Z_levelOn;
suupen 0:ba027616fdf1 128 kakutei = 1;
suupen 0:ba027616fdf1 129 }
suupen 0:ba027616fdf1 130 else{
suupen 0:ba027616fdf1 131 // nothing
suupen 0:ba027616fdf1 132 }
suupen 0:ba027616fdf1 133
suupen 0:ba027616fdf1 134 if(kakutei == 1){
suupen 0:ba027616fdf1 135 // edge kosin
suupen 0:ba027616fdf1 136 if((D_oldLevel[(swPinSuu * Z_swInNoMax) + swInNo] == Z_levelOff) && (D_nowLevel[(swPinSuu * Z_swInNoMax) + swInNo] == Z_levelOn)){
suupen 0:ba027616fdf1 137 B_edgeOn[(swPinSuu * Z_swInNoMax) + swInNo] = Z_edgeAri;
suupen 0:ba027616fdf1 138 }
suupen 0:ba027616fdf1 139 if((D_oldLevel[(swPinSuu * Z_swInNoMax) + swInNo] == Z_levelOn) && (D_nowLevel[(swPinSuu * Z_swInNoMax) + swInNo] == Z_levelOff)){
suupen 0:ba027616fdf1 140 B_edgeOff[(swPinSuu * Z_swInNoMax) + swInNo] = Z_edgeAri;
suupen 0:ba027616fdf1 141 }
suupen 0:ba027616fdf1 142 }
suupen 0:ba027616fdf1 143 }
suupen 0:ba027616fdf1 144 }
suupen 0:ba027616fdf1 145 }
suupen 0:ba027616fdf1 146
suupen 0:ba027616fdf1 147 //========================================
suupen 0:ba027616fdf1 148 // sw no ninsiki level ,edge data no kosin
suupen 0:ba027616fdf1 149 //========================================
suupen 0:ba027616fdf1 150 void SwAnalog::refreshEdgeData(void){
suupen 0:ba027616fdf1 151 for(uint8_t swPinSuu = 0; swPinSuu < D_swPinSuu; swPinSuu++){
suupen 0:ba027616fdf1 152 for(uint8_t swInNo = 0; swInNo < Z_swInNoMax; swInNo++){
suupen 0:ba027616fdf1 153 __disable_irq(); // Disable Interrupts
suupen 0:ba027616fdf1 154 D_edgeOn [(swPinSuu * Z_swInNoMax) + swInNo] = B_edgeOn [(swPinSuu * Z_swInNoMax) + swInNo];
suupen 0:ba027616fdf1 155 D_edgeOff[(swPinSuu * Z_swInNoMax) + swInNo] = B_edgeOff[(swPinSuu * Z_swInNoMax) + swInNo];
suupen 0:ba027616fdf1 156
suupen 0:ba027616fdf1 157 B_edgeOn [(swPinSuu * Z_swInNoMax) + swInNo] = Z_edgeNasi;
suupen 0:ba027616fdf1 158 B_edgeOff[(swPinSuu * Z_swInNoMax) + swInNo] = Z_edgeNasi;
suupen 0:ba027616fdf1 159 __enable_irq(); // Enable Interrupts
suupen 0:ba027616fdf1 160 }
suupen 0:ba027616fdf1 161 }
suupen 0:ba027616fdf1 162 }
suupen 0:ba027616fdf1 163
suupen 0:ba027616fdf1 164 //===============================
suupen 0:ba027616fdf1 165 // sw no Off to On edge hantei
suupen 0:ba027616fdf1 166 //===============================
suupen 0:ba027616fdf1 167 uint8_t SwAnalog::checkEdgeOn(uint8_t swNo){
suupen 0:ba027616fdf1 168 uint8_t ans = 0;
suupen 0:ba027616fdf1 169
suupen 0:ba027616fdf1 170 if(D_edgeOn[swNo] == Z_edgeAri){
suupen 0:ba027616fdf1 171 ans = 1;
suupen 0:ba027616fdf1 172 }
suupen 0:ba027616fdf1 173
suupen 0:ba027616fdf1 174 return (ans);
suupen 0:ba027616fdf1 175 }
suupen 0:ba027616fdf1 176
suupen 0:ba027616fdf1 177 //===============================
suupen 0:ba027616fdf1 178 // sw no On to Off edge hantei
suupen 0:ba027616fdf1 179 //===============================
suupen 0:ba027616fdf1 180 uint8_t SwAnalog::checkEdgeOff(uint8_t swNo){
suupen 0:ba027616fdf1 181 uint8_t ans = 0;
suupen 0:ba027616fdf1 182
suupen 0:ba027616fdf1 183 if(D_edgeOff[swNo] == Z_edgeAri){
suupen 0:ba027616fdf1 184 ans = 1;
suupen 0:ba027616fdf1 185 }
suupen 0:ba027616fdf1 186
suupen 0:ba027616fdf1 187 return (ans);
suupen 0:ba027616fdf1 188 }
suupen 0:ba027616fdf1 189
suupen 0:ba027616fdf1 190 //==============================
suupen 0:ba027616fdf1 191 // sw no ninsiki level hantei
suupen 0:ba027616fdf1 192 //==============================
suupen 0:ba027616fdf1 193 uint8_t SwAnalog::checkLevel(uint8_t swNo){
suupen 0:ba027616fdf1 194 uint8_t ans = 0;
suupen 0:ba027616fdf1 195
suupen 0:ba027616fdf1 196 if(D_nowLevel[swNo] == Z_levelOn){
suupen 0:ba027616fdf1 197 ans = 1;
suupen 0:ba027616fdf1 198 }
suupen 0:ba027616fdf1 199
suupen 0:ba027616fdf1 200 return (ans);
suupen 0:ba027616fdf1 201 }
suupen 1:ebaa87e67cef 202