Read an analog value using ADC.

Dependencies:   testmotor mbed

Committer:
syafiq8530
Date:
Mon Mar 07 05:28:28 2016 +0000
Revision:
4:cad5a10b7007
Parent:
3:999285691154
update test motor

Who changed what in which revision?

UserRevisionLine numberNew contents of line
syafiq8530 4:cad5a10b7007 1 #define NSAMPLES 2500
syafiq8530 4:cad5a10b7007 2 #define NSAMPLING 50
syafiq8530 4:cad5a10b7007 3 #define V_max 3.3
syafiq8530 4:cad5a10b7007 4
bcostm 0:c2d1ad5059da 5 #include "mbed.h"
mijimy 3:999285691154 6 #include "TextLCD.h"
mijimy 3:999285691154 7
syafiq8530 4:cad5a10b7007 8
syafiq8530 4:cad5a10b7007 9 TextLCD lcd(I2C_SDA,I2C_SCL);
syafiq8530 4:cad5a10b7007 10 //Serial pc ( USBTX , USBRX ) ;
syafiq8530 4:cad5a10b7007 11 //DigitalOut led(LED1);
syafiq8530 4:cad5a10b7007 12
syafiq8530 4:cad5a10b7007 13 DigitalIn sw_start(D10,PullUp);
syafiq8530 4:cad5a10b7007 14 DigitalIn sw_stop(D11,PullUp);
syafiq8530 4:cad5a10b7007 15 DigitalOut motor(D9);
syafiq8530 4:cad5a10b7007 16 DigitalOut solenoid(D7);
syafiq8530 4:cad5a10b7007 17 DigitalIn lim_1(D2,PullUp);
syafiq8530 4:cad5a10b7007 18 DigitalIn lim_2(D3,PullUp);
syafiq8530 4:cad5a10b7007 19 DigitalIn lim_3(D4,PullUp);
syafiq8530 4:cad5a10b7007 20 AnalogIn ain_1(A0);
syafiq8530 4:cad5a10b7007 21
syafiq8530 4:cad5a10b7007 22
syafiq8530 4:cad5a10b7007 23 double vref_1 = 0.0;
syafiq8530 4:cad5a10b7007 24 //double v_read=0;
syafiq8530 4:cad5a10b7007 25 double v_max;
syafiq8530 4:cad5a10b7007 26
syafiq8530 4:cad5a10b7007 27 int readc=100;
syafiq8530 4:cad5a10b7007 28 char sequence=0;
syafiq8530 4:cad5a10b7007 29
syafiq8530 4:cad5a10b7007 30 void motorcon();
syafiq8530 4:cad5a10b7007 31 void press_separuh();
syafiq8530 4:cad5a10b7007 32 void press_penuh();
syafiq8530 4:cad5a10b7007 33 void current_disp();
syafiq8530 4:cad5a10b7007 34
bcostm 1:0490a15c76e4 35
bcostm 0:c2d1ad5059da 36 int main() {
syafiq8530 4:cad5a10b7007 37
syafiq8530 4:cad5a10b7007 38 solenoid=1;
syafiq8530 4:cad5a10b7007 39 //acquiring v_ref
syafiq8530 4:cad5a10b7007 40 for (int i=0; i<NSAMPLES; i++) {
syafiq8530 4:cad5a10b7007 41 vref_1 += ain_1;
syafiq8530 4:cad5a10b7007 42 }
syafiq8530 4:cad5a10b7007 43 vref_1 /= NSAMPLES;
syafiq8530 4:cad5a10b7007 44 lcd.printf("Vref 1: %.4f\n", vref_1);
syafiq8530 4:cad5a10b7007 45 //lcd.printf("AnalogIn example");
syafiq8530 4:cad5a10b7007 46 // lcd.locate(0,1);
syafiq8530 4:cad5a10b7007 47 // lcd.printf("TIN CRUSHER");
syafiq8530 4:cad5a10b7007 48 wait(3);
bcostm 1:0490a15c76e4 49
bcostm 1:0490a15c76e4 50 while(1) {
syafiq8530 4:cad5a10b7007 51 //meas = analog_value; // Converts and read the analog input value (value from 0.0 to 1.0)
syafiq8530 4:cad5a10b7007 52 // value = analog_value* 3300; // Change the value to be in the 0 to 3300 range
syafiq8530 4:cad5a10b7007 53 // printf("measure = %.3f V\n", meas);
syafiq8530 4:cad5a10b7007 54 // lcd.locate(0,0);
syafiq8530 4:cad5a10b7007 55 // lcd.printf("measure = %d mV \n", value);
syafiq8530 4:cad5a10b7007 56 // lcd.printf("diff = %d mV \n", value-start_value);
syafiq8530 4:cad5a10b7007 57 // if((value >0 && value>oldvalue )|| (value<0 && value<oldvalue ))
syafiq8530 4:cad5a10b7007 58 // lcd.printf("peak = %d mV ",value-start_value);
syafiq8530 4:cad5a10b7007 59 // oldvalue=value;
syafiq8530 4:cad5a10b7007 60 // lcd.locate(0,2);
syafiq8530 4:cad5a10b7007 61 // motorcon();
syafiq8530 4:cad5a10b7007 62 // lcd.printf("value %d",value);
syafiq8530 4:cad5a10b7007 63 current_disp();
syafiq8530 4:cad5a10b7007 64 v_max=0; //clear v_max
syafiq8530 4:cad5a10b7007 65 motorcon();
syafiq8530 4:cad5a10b7007 66 /// wait(0.5); // 200 ms
syafiq8530 4:cad5a10b7007 67
syafiq8530 4:cad5a10b7007 68 }
syafiq8530 4:cad5a10b7007 69 }
syafiq8530 4:cad5a10b7007 70
syafiq8530 4:cad5a10b7007 71 void motorcon()
syafiq8530 4:cad5a10b7007 72 { char i=0;
syafiq8530 4:cad5a10b7007 73 if(sw_start==0)
syafiq8530 4:cad5a10b7007 74 { while(sw_start==0)
syafiq8530 4:cad5a10b7007 75 { wait(0.1);
syafiq8530 4:cad5a10b7007 76 i++; ///tekan kurang dari satu sec gerak separuh
syafiq8530 4:cad5a10b7007 77 }
syafiq8530 4:cad5a10b7007 78 if(i>5)
syafiq8530 4:cad5a10b7007 79 press_penuh();
syafiq8530 4:cad5a10b7007 80 else
syafiq8530 4:cad5a10b7007 81 press_separuh();
syafiq8530 4:cad5a10b7007 82
syafiq8530 4:cad5a10b7007 83 //while(sw_start==0); /// selagi tekan duk sini
syafiq8530 4:cad5a10b7007 84 }
syafiq8530 4:cad5a10b7007 85 else if(sw_stop==1)
syafiq8530 4:cad5a10b7007 86 { motor=0;
syafiq8530 4:cad5a10b7007 87 while(sw_stop==1); /// selagi tekan duk sini
syafiq8530 4:cad5a10b7007 88
bcostm 0:c2d1ad5059da 89 }
bcostm 0:c2d1ad5059da 90 }
syafiq8530 4:cad5a10b7007 91
syafiq8530 4:cad5a10b7007 92
syafiq8530 4:cad5a10b7007 93 void press_separuh()
syafiq8530 4:cad5a10b7007 94 { while(1)
syafiq8530 4:cad5a10b7007 95 { motor=1;
syafiq8530 4:cad5a10b7007 96 lcd.cls();
syafiq8530 4:cad5a10b7007 97 lcd.printf("press separuh\n");
syafiq8530 4:cad5a10b7007 98 lcd.printf("init pos\n");
syafiq8530 4:cad5a10b7007 99
syafiq8530 4:cad5a10b7007 100 while(lim_1==1)
syafiq8530 4:cad5a10b7007 101 { current_disp();
syafiq8530 4:cad5a10b7007 102 if(sw_stop==1)
syafiq8530 4:cad5a10b7007 103 break;
syafiq8530 4:cad5a10b7007 104 }
syafiq8530 4:cad5a10b7007 105
syafiq8530 4:cad5a10b7007 106 solenoid=0;
syafiq8530 4:cad5a10b7007 107 lcd.printf("press down\n");
syafiq8530 4:cad5a10b7007 108 while(lim_2==1)
syafiq8530 4:cad5a10b7007 109 { current_disp();
syafiq8530 4:cad5a10b7007 110 if(sw_stop==1)
syafiq8530 4:cad5a10b7007 111 break;
syafiq8530 4:cad5a10b7007 112 }
syafiq8530 4:cad5a10b7007 113
syafiq8530 4:cad5a10b7007 114 solenoid=1;
syafiq8530 4:cad5a10b7007 115 lcd.printf("up position\n");
syafiq8530 4:cad5a10b7007 116 while(lim_1==1)
syafiq8530 4:cad5a10b7007 117 { current_disp();
syafiq8530 4:cad5a10b7007 118 if(sw_stop==1)
syafiq8530 4:cad5a10b7007 119 break;
syafiq8530 4:cad5a10b7007 120 }
syafiq8530 4:cad5a10b7007 121
syafiq8530 4:cad5a10b7007 122 lcd.cls();
syafiq8530 4:cad5a10b7007 123 motor=0;
syafiq8530 4:cad5a10b7007 124 break;
syafiq8530 4:cad5a10b7007 125 }
syafiq8530 4:cad5a10b7007 126 }
syafiq8530 4:cad5a10b7007 127
syafiq8530 4:cad5a10b7007 128
syafiq8530 4:cad5a10b7007 129
syafiq8530 4:cad5a10b7007 130
syafiq8530 4:cad5a10b7007 131 void press_penuh()
syafiq8530 4:cad5a10b7007 132 { while(1)
syafiq8530 4:cad5a10b7007 133 { motor=1;
syafiq8530 4:cad5a10b7007 134 lcd.cls();
syafiq8530 4:cad5a10b7007 135 lcd.printf("press penuh\n");
syafiq8530 4:cad5a10b7007 136 lcd.printf("init pos\n");
syafiq8530 4:cad5a10b7007 137
syafiq8530 4:cad5a10b7007 138 while(lim_1==1)
syafiq8530 4:cad5a10b7007 139 { current_disp();
syafiq8530 4:cad5a10b7007 140 if(sw_stop==1)
syafiq8530 4:cad5a10b7007 141 break;
syafiq8530 4:cad5a10b7007 142 }
syafiq8530 4:cad5a10b7007 143
syafiq8530 4:cad5a10b7007 144 solenoid=0;
syafiq8530 4:cad5a10b7007 145 lcd.printf("press down\n");
syafiq8530 4:cad5a10b7007 146 while(lim_3==1)
syafiq8530 4:cad5a10b7007 147 { current_disp();
syafiq8530 4:cad5a10b7007 148 if(sw_stop==1)
syafiq8530 4:cad5a10b7007 149 break;
syafiq8530 4:cad5a10b7007 150 }
syafiq8530 4:cad5a10b7007 151
syafiq8530 4:cad5a10b7007 152 solenoid=1;
syafiq8530 4:cad5a10b7007 153 lcd.printf("up position\n");
syafiq8530 4:cad5a10b7007 154 while(lim_1==1)
syafiq8530 4:cad5a10b7007 155 { current_disp();
syafiq8530 4:cad5a10b7007 156 if(sw_stop==1)
syafiq8530 4:cad5a10b7007 157 break;
syafiq8530 4:cad5a10b7007 158 }
syafiq8530 4:cad5a10b7007 159
syafiq8530 4:cad5a10b7007 160 lcd.cls();
syafiq8530 4:cad5a10b7007 161 motor=0;
syafiq8530 4:cad5a10b7007 162 break;
syafiq8530 4:cad5a10b7007 163 }
syafiq8530 4:cad5a10b7007 164 }
syafiq8530 4:cad5a10b7007 165
syafiq8530 4:cad5a10b7007 166 void current_disp()
syafiq8530 4:cad5a10b7007 167 { // for (int i=0; i<NSAMPLING; i++) {
syafiq8530 4:cad5a10b7007 168 //acquisition
syafiq8530 4:cad5a10b7007 169 double sum_1 = 0.0;
syafiq8530 4:cad5a10b7007 170 //long v_max;
syafiq8530 4:cad5a10b7007 171
syafiq8530 4:cad5a10b7007 172 for (int samples = 0; samples<NSAMPLES; samples++) {
syafiq8530 4:cad5a10b7007 173 sum_1 += ain_1;
syafiq8530 4:cad5a10b7007 174 }
syafiq8530 4:cad5a10b7007 175 sum_1 /= NSAMPLES;
syafiq8530 4:cad5a10b7007 176 sum_1 = (sum_1-vref_1)*V_max/0.185;
syafiq8530 4:cad5a10b7007 177 if(sum_1>0 && sum_1>v_max )
syafiq8530 4:cad5a10b7007 178 v_max=sum_1;
syafiq8530 4:cad5a10b7007 179 //vread
syafiq8530 4:cad5a10b7007 180 lcd.locate(1,2);
syafiq8530 4:cad5a10b7007 181 lcd.printf("c.max");
syafiq8530 4:cad5a10b7007 182 lcd.locate(8,2);
syafiq8530 4:cad5a10b7007 183 lcd.printf("%.4f A ", v_max);//max
syafiq8530 4:cad5a10b7007 184 lcd.locate(1,3);
syafiq8530 4:cad5a10b7007 185 lcd.printf("cbace");
syafiq8530 4:cad5a10b7007 186 lcd.locate(8,3);
syafiq8530 4:cad5a10b7007 187 lcd.printf("%.4f A ", sum_1);//current reading
syafiq8530 4:cad5a10b7007 188
syafiq8530 4:cad5a10b7007 189
syafiq8530 4:cad5a10b7007 190
syafiq8530 4:cad5a10b7007 191 // }
syafiq8530 4:cad5a10b7007 192
syafiq8530 4:cad5a10b7007 193 }