easytronic
/
Nucleo_read_analog_value
Read an analog value using ADC.
main.cpp@4:cad5a10b7007, 2016-03-07 (annotated)
- 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?
User | Revision | Line number | New 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 | } |