lab2 vu meter and 7 segment
Dependencies: mbed
main.cpp
00001 #include "mbed.h" 00002 00003 AnalogIn analog_value(A2); 00004 DigitalIn button(USER_BUTTON); 00005 00006 DigitalOut d1(D11); 00007 DigitalOut c1(D10); 00008 DigitalOut b1(D9); 00009 DigitalOut a1(D8); 00010 DigitalOut d2(D5); 00011 DigitalOut c2(D4); 00012 DigitalOut b2(D3); 00013 DigitalOut a2(D2); 00014 00015 BusOut myled(PA_11,PB_12,PB_2,PB_1,PB_15,PB_14,PB_13,PC_4); 00016 00017 float meas_r; 00018 int meas_mv; 00019 int meas_v; 00020 int meas_vf; 00021 int state; 00022 int preState; 00023 int buttonState; 00024 int vuStatus,segmentStatus; 00025 00026 00027 void Segment(){ 00028 int i,j; 00029 int bin1[4]= {0}; 00030 int bin2[4]= {0}; 00031 i = 0, j = 0; 00032 do { 00033 bin1[i++] = meas_v % 2; 00034 meas_v = meas_v / 2; 00035 }while(meas_v > 0); 00036 do { 00037 bin2[j++] = meas_vf % 2; 00038 meas_vf = meas_vf / 2; 00039 }while(meas_vf > 0); 00040 // printf("SSSS = %d = %d = %d = %d \n", second[0],second[1],second[2],second[3]); 00041 d1 = bin1[3]; 00042 c1 = bin1[2]; 00043 b1 = bin1[1]; 00044 a1 = bin1[0]; 00045 d2 = bin2[3]; 00046 c2 = bin2[2]; 00047 b2 = bin2[1]; 00048 a2 = bin2[0]; 00049 } 00050 00051 void checkState(){ 00052 preState = state; 00053 while (1){ 00054 if (meas_mv < 412.5){ 00055 state = 1; 00056 break; 00057 } 00058 if (meas_mv >= 412.5 && meas_mv < 825 ){ 00059 state = 2; 00060 break; 00061 } 00062 if (meas_mv >= 825 && meas_mv < 1237.5 ){ 00063 state = 3; 00064 break; 00065 } 00066 if (meas_mv >= 1237.5 && meas_mv < 1650 ){ 00067 state = 4; 00068 break; 00069 } 00070 if (meas_mv >= 1650 && meas_mv < 2062.5 ){ 00071 state = 5; 00072 break; 00073 } 00074 if (meas_mv >= 2062.5 && meas_mv < 2475 ){ 00075 state = 6; 00076 break; 00077 } 00078 if (meas_mv >= 2475 && meas_mv < 2887.5 ){ 00079 state = 7; 00080 break; 00081 } 00082 if (meas_mv >= 2887.5){ 00083 state = 8; 00084 break; 00085 } 00086 } 00087 } 00088 00089 void segmentSeto(){ 00090 d1 = 0,c1 = 0,b1 = 0,a1 = 0,d2 = 0,c2 = 0,b2 = 0,a2 = 0; 00091 } 00092 00093 void vuSet0(){ 00094 int m; 00095 for ( m = 0;m <8 ;m++){ 00096 myled[m] = 0; 00097 } 00098 } 00099 00100 void vuMeter(){ 00101 int k; 00102 k = 0; 00103 if(preState > state){ 00104 vuSet0(); 00105 } 00106 while(vuStatus){ 00107 checkState(); 00108 do{ 00109 myled[k++] = 1; 00110 }while(k < state); 00111 break; 00112 } 00113 } 00114 00115 void checkButton(){ 00116 int preB; 00117 //buttonState = 0; 00118 preB = buttonState; 00119 if(button == 0){ 00120 if (preB == 0){ 00121 buttonState = 1; 00122 } 00123 if (preB == 1){ 00124 buttonState = 0; 00125 } 00126 wait(0.5); 00127 00128 } 00129 printf("preButton = %d",preB); 00130 printf("buttonState = %d",buttonState); 00131 00132 00133 } 00134 00135 int main() 00136 { state = 0; 00137 00138 while(1) { 00139 00140 meas_r = analog_value.read(); // Read the analog input value (value from 0.0 to 1.0 = full ADC conversion range) 00141 meas_mv = meas_r * 3300; // Converts value in the 0V-3.3V range 00142 meas_v = meas_mv / 1000; 00143 meas_vf = (meas_mv % 1000)/100; 00144 00145 // Display values 00146 // printf("measure = %f = %d mV = %d V = %d Vf\n", meas_r, meas_mv, meas_v, meas_vf); 00147 // Segment(); 00148 // vuMeter(); 00149 // printf("State = %d \n",state); 00150 // printf("Prestate = %d \n",preState); 00151 checkButton(); 00152 if (buttonState == 0){ 00153 segmentSeto(); 00154 vuMeter(); 00155 vuStatus = 1; 00156 segmentStatus = 0; 00157 } 00158 else if (buttonState == 1){ 00159 vuSet0(); 00160 Segment(); 00161 vuStatus = 0; 00162 segmentStatus = 1; 00163 00164 } 00165 printf("vu = %d = seg = %d \n",vuStatus,segmentStatus); 00166 00167 00168 } 00169 }
Generated on Sat Jul 16 2022 21:35:11 by
1.7.2