lab2 vu meter and 7 segment
Dependencies: mbed
Revision 0:8a1a4eabe49e, committed 2017-10-30
- Comitter:
- Supermil
- Date:
- Mon Oct 30 06:54:23 2017 +0000
- Commit message:
- lab2
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Oct 30 06:54:23 2017 +0000 @@ -0,0 +1,169 @@ +#include "mbed.h" + +AnalogIn analog_value(A2); +DigitalIn button(USER_BUTTON); + +DigitalOut d1(D11); +DigitalOut c1(D10); +DigitalOut b1(D9); +DigitalOut a1(D8); +DigitalOut d2(D5); +DigitalOut c2(D4); +DigitalOut b2(D3); +DigitalOut a2(D2); + +BusOut myled(PA_11,PB_12,PB_2,PB_1,PB_15,PB_14,PB_13,PC_4); + +float meas_r; +int meas_mv; +int meas_v; +int meas_vf; +int state; +int preState; +int buttonState; +int vuStatus,segmentStatus; + + +void Segment(){ + int i,j; + int bin1[4]= {0}; + int bin2[4]= {0}; + i = 0, j = 0; + do { + bin1[i++] = meas_v % 2; + meas_v = meas_v / 2; + }while(meas_v > 0); + do { + bin2[j++] = meas_vf % 2; + meas_vf = meas_vf / 2; + }while(meas_vf > 0); +// printf("SSSS = %d = %d = %d = %d \n", second[0],second[1],second[2],second[3]); + d1 = bin1[3]; + c1 = bin1[2]; + b1 = bin1[1]; + a1 = bin1[0]; + d2 = bin2[3]; + c2 = bin2[2]; + b2 = bin2[1]; + a2 = bin2[0]; +} + +void checkState(){ + preState = state; + while (1){ + if (meas_mv < 412.5){ + state = 1; + break; + } + if (meas_mv >= 412.5 && meas_mv < 825 ){ + state = 2; + break; + } + if (meas_mv >= 825 && meas_mv < 1237.5 ){ + state = 3; + break; + } + if (meas_mv >= 1237.5 && meas_mv < 1650 ){ + state = 4; + break; + } + if (meas_mv >= 1650 && meas_mv < 2062.5 ){ + state = 5; + break; + } + if (meas_mv >= 2062.5 && meas_mv < 2475 ){ + state = 6; + break; + } + if (meas_mv >= 2475 && meas_mv < 2887.5 ){ + state = 7; + break; + } + if (meas_mv >= 2887.5){ + state = 8; + break; + } + } +} + +void segmentSeto(){ + d1 = 0,c1 = 0,b1 = 0,a1 = 0,d2 = 0,c2 = 0,b2 = 0,a2 = 0; +} + +void vuSet0(){ + int m; + for ( m = 0;m <8 ;m++){ + myled[m] = 0; + } +} + +void vuMeter(){ + int k; + k = 0; + if(preState > state){ + vuSet0(); + } + while(vuStatus){ + checkState(); + do{ + myled[k++] = 1; + }while(k < state); + break; + } +} + +void checkButton(){ + int preB; + //buttonState = 0; + preB = buttonState; + if(button == 0){ + if (preB == 0){ + buttonState = 1; + } + if (preB == 1){ + buttonState = 0; + } + wait(0.5); + + } + printf("preButton = %d",preB); + printf("buttonState = %d",buttonState); + + +} + +int main() +{ state = 0; + + while(1) { + + meas_r = analog_value.read(); // Read the analog input value (value from 0.0 to 1.0 = full ADC conversion range) + meas_mv = meas_r * 3300; // Converts value in the 0V-3.3V range + meas_v = meas_mv / 1000; + meas_vf = (meas_mv % 1000)/100; + + // Display values +// printf("measure = %f = %d mV = %d V = %d Vf\n", meas_r, meas_mv, meas_v, meas_vf); +// Segment(); +// vuMeter(); +// printf("State = %d \n",state); +// printf("Prestate = %d \n",preState); + checkButton(); + if (buttonState == 0){ + segmentSeto(); + vuMeter(); + vuStatus = 1; + segmentStatus = 0; + } + else if (buttonState == 1){ + vuSet0(); + Segment(); + vuStatus = 0; + segmentStatus = 1; + + } + printf("vu = %d = seg = %d \n",vuStatus,segmentStatus); + + + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Mon Oct 30 06:54:23 2017 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/mbed_official/code/mbed/builds/b484a57bc302 \ No newline at end of file