lab2 vu meter and 7 segment

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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 }