This library has been tested with LPC1768. I can use the analog port of six of p20 from p15 of the LPC1768.
Dependents: SwAnalogInputLibraryExampleProgram
Fork of SwAnalog by
SwAnalog.cpp
00001 //====================================================================== 00002 // SwAnalog.cpp 00003 // 00004 // 00005 //====================================================================== 00006 #define _SWANALOG_C 00007 00008 #include "mbed.h" 00009 #include "SwAnalog.h" 00010 00011 //====================================================================== 00012 // syokika 00013 //====================================================================== 00014 00015 SwAnalog::SwAnalog(PinName adinput0, PinName adinput1, PinName adinput2, PinName adinput3, PinName adinput4, 00016 PinName adinput5 00017 ): 00018 _adinput0(adinput0), _adinput1(adinput1), _adinput2(adinput2), _adinput3(adinput3), _adinput4(adinput4), 00019 _adinput5(adinput5) 00020 { 00021 00022 //--------------------------------- 00023 // touroku sareta Sw Suu wo kakunin 00024 //--------------------------------- 00025 if(adinput0 != NC){D_swPinSuu = 1;} 00026 if(adinput1 != NC){D_swPinSuu = 2;} 00027 if(adinput2 != NC){D_swPinSuu = 3;} 00028 if(adinput3 != NC){D_swPinSuu = 4;} 00029 if(adinput4 != NC){D_swPinSuu = 5;} 00030 00031 if(adinput5 != NC){D_swPinSuu = 6;} 00032 00033 00034 // sw ninsiki syuki 10[ms] 00035 swCheckTimer.attach_us(this, &SwAnalog::input, Z_matchcycle); 00036 00037 } 00038 00039 //================================================= 00040 // analog input data wo sw data ni henkan 00041 //================================================= 00042 void SwAnalog::adInput(float ad, uint8_t swPinSuu){ 00043 uint8_t ans = 0; // SW ninsikichi 2bit = sw2, 1bit = sw1, 0bit = sw0 0:OFF 1:ON 00044 00045 00046 // ad ninsikich kara sw jotai wo kakutei 00047 00048 if (ad <= Z_threshold0_1){ans = 0;} 00049 else if(ad <= Z_threshold1_2){ans = 1;} 00050 else if(ad <= Z_threshold2_3){ans = 2;} 00051 else if(ad <= Z_threshold3_4){ans = 3;} 00052 else if(ad <= Z_threshold4_5){ans = 4;} 00053 else if(ad <= Z_threshold5_6){ans = 5;} 00054 else if(ad <= Z_threshold6_7){ans = 6;} 00055 else {ans = 7;} 00056 00057 00058 B_kariLevel[(swPinSuu * Z_swInNoMax) + 0] = ((B_kariLevel[(swPinSuu * Z_swInNoMax) + 0] << 1) | (ans & 0x01) ); 00059 B_kariLevel[(swPinSuu * Z_swInNoMax) + 1] = ((B_kariLevel[(swPinSuu * Z_swInNoMax) + 1] << 1) | ((ans & 0x02) >> 1)); 00060 B_kariLevel[(swPinSuu * Z_swInNoMax) + 2] = ((B_kariLevel[(swPinSuu * Z_swInNoMax) + 2] << 1) | ((ans & 0x04) >> 2)); 00061 } 00062 00063 //========================================== 00064 // subeteno analog input port no sw ninsiki 00065 //========================================== 00066 void SwAnalog::input(void){ 00067 // genzai level input 00068 switch(D_swPinSuu){ 00069 00070 case 6: 00071 adInput(_adinput5, 5); 00072 //break; 00073 case 5: 00074 adInput(_adinput4, 4); 00075 //break; 00076 case 4: 00077 adInput(_adinput3, 3); 00078 //break; 00079 case 3: 00080 adInput(_adinput2, 2); 00081 //break; 00082 case 2: 00083 adInput(_adinput1, 1); 00084 //break; 00085 case 1: 00086 adInput(_adinput0, 0); 00087 //break; 00088 default: 00089 // nothing 00090 break; 00091 } 00092 00093 // kakutei Level kosin 00094 uint8_t kakutei = 0; 00095 for(uint8_t swPinSuu = 0; swPinSuu < D_swPinSuu; swPinSuu++){ 00096 for(uint8_t swInNo = 0; swInNo < Z_swInNoMax; swInNo++){ 00097 uint8_t work = B_kariLevel[(swPinSuu * Z_swInNoMax) + swInNo] & Z_itchiPattern; 00098 if(work == 0x00){ 00099 // off kakutei 00100 D_oldLevel[(swPinSuu * Z_swInNoMax) + swInNo] = D_nowLevel[(swPinSuu * Z_swInNoMax) + swInNo]; 00101 D_nowLevel[(swPinSuu * Z_swInNoMax) + swInNo] = Z_levelOff; 00102 kakutei = 1; 00103 } 00104 else if(work == Z_itchiPattern){ 00105 // on kakutei 00106 D_oldLevel[(swPinSuu * Z_swInNoMax) + swInNo] = D_nowLevel[(swPinSuu * Z_swInNoMax) + swInNo]; 00107 D_nowLevel[(swPinSuu * Z_swInNoMax) + swInNo] = Z_levelOn; 00108 kakutei = 1; 00109 } 00110 else{ 00111 // nothing 00112 } 00113 00114 if(kakutei == 1){ 00115 // edge kosin 00116 if((D_oldLevel[(swPinSuu * Z_swInNoMax) + swInNo] == Z_levelOff) && (D_nowLevel[(swPinSuu * Z_swInNoMax) + swInNo] == Z_levelOn)){ 00117 B_edgeOn[(swPinSuu * Z_swInNoMax) + swInNo] = Z_edgeAri; 00118 } 00119 if((D_oldLevel[(swPinSuu * Z_swInNoMax) + swInNo] == Z_levelOn) && (D_nowLevel[(swPinSuu * Z_swInNoMax) + swInNo] == Z_levelOff)){ 00120 B_edgeOff[(swPinSuu * Z_swInNoMax) + swInNo] = Z_edgeAri; 00121 } 00122 } 00123 } 00124 } 00125 } 00126 00127 //======================================== 00128 // sw no ninsiki level ,edge data no kosin 00129 //======================================== 00130 void SwAnalog::refreshEdgeData(void){ 00131 for(uint8_t swPinSuu = 0; swPinSuu < D_swPinSuu; swPinSuu++){ 00132 for(uint8_t swInNo = 0; swInNo < Z_swInNoMax; swInNo++){ 00133 __disable_irq(); // Disable Interrupts 00134 D_edgeOn [(swPinSuu * Z_swInNoMax) + swInNo] = B_edgeOn [(swPinSuu * Z_swInNoMax) + swInNo]; 00135 D_edgeOff[(swPinSuu * Z_swInNoMax) + swInNo] = B_edgeOff[(swPinSuu * Z_swInNoMax) + swInNo]; 00136 00137 B_edgeOn [(swPinSuu * Z_swInNoMax) + swInNo] = Z_edgeNasi; 00138 B_edgeOff[(swPinSuu * Z_swInNoMax) + swInNo] = Z_edgeNasi; 00139 __enable_irq(); // Enable Interrupts 00140 } 00141 } 00142 } 00143 00144 //=============================== 00145 // sw no Off to On edge hantei 00146 //=============================== 00147 uint8_t SwAnalog::checkEdgeOn(uint8_t swNo){ 00148 uint8_t ans = 0; 00149 00150 if(D_edgeOn[swNo] == Z_edgeAri){ 00151 ans = 1; 00152 } 00153 00154 return (ans); 00155 } 00156 00157 //=============================== 00158 // sw no On to Off edge hantei 00159 //=============================== 00160 uint8_t SwAnalog::checkEdgeOff(uint8_t swNo){ 00161 uint8_t ans = 0; 00162 00163 if(D_edgeOff[swNo] == Z_edgeAri){ 00164 ans = 1; 00165 } 00166 00167 return (ans); 00168 } 00169 00170 //============================== 00171 // sw no ninsiki level hantei 00172 //============================== 00173 uint8_t SwAnalog::checkLevel(uint8_t swNo){ 00174 uint8_t ans = 0; 00175 00176 if(D_nowLevel[swNo] == Z_levelOn){ 00177 ans = 1; 00178 } 00179 00180 return (ans); 00181 }
Generated on Sat Jul 23 2022 14:58:25 by 1.7.2