easytronic
/
Nucleo_read_analog_value
Read an analog value using ADC.
main.cpp
- Committer:
- syafiq8530
- Date:
- 2016-03-07
- Revision:
- 4:cad5a10b7007
- Parent:
- 3:999285691154
File content as of revision 4:cad5a10b7007:
#define NSAMPLES 2500 #define NSAMPLING 50 #define V_max 3.3 #include "mbed.h" #include "TextLCD.h" TextLCD lcd(I2C_SDA,I2C_SCL); //Serial pc ( USBTX , USBRX ) ; //DigitalOut led(LED1); DigitalIn sw_start(D10,PullUp); DigitalIn sw_stop(D11,PullUp); DigitalOut motor(D9); DigitalOut solenoid(D7); DigitalIn lim_1(D2,PullUp); DigitalIn lim_2(D3,PullUp); DigitalIn lim_3(D4,PullUp); AnalogIn ain_1(A0); double vref_1 = 0.0; //double v_read=0; double v_max; int readc=100; char sequence=0; void motorcon(); void press_separuh(); void press_penuh(); void current_disp(); int main() { solenoid=1; //acquiring v_ref for (int i=0; i<NSAMPLES; i++) { vref_1 += ain_1; } vref_1 /= NSAMPLES; lcd.printf("Vref 1: %.4f\n", vref_1); //lcd.printf("AnalogIn example"); // lcd.locate(0,1); // lcd.printf("TIN CRUSHER"); wait(3); while(1) { //meas = analog_value; // Converts and read the analog input value (value from 0.0 to 1.0) // value = analog_value* 3300; // Change the value to be in the 0 to 3300 range // printf("measure = %.3f V\n", meas); // lcd.locate(0,0); // lcd.printf("measure = %d mV \n", value); // lcd.printf("diff = %d mV \n", value-start_value); // if((value >0 && value>oldvalue )|| (value<0 && value<oldvalue )) // lcd.printf("peak = %d mV ",value-start_value); // oldvalue=value; // lcd.locate(0,2); // motorcon(); // lcd.printf("value %d",value); current_disp(); v_max=0; //clear v_max motorcon(); /// wait(0.5); // 200 ms } } void motorcon() { char i=0; if(sw_start==0) { while(sw_start==0) { wait(0.1); i++; ///tekan kurang dari satu sec gerak separuh } if(i>5) press_penuh(); else press_separuh(); //while(sw_start==0); /// selagi tekan duk sini } else if(sw_stop==1) { motor=0; while(sw_stop==1); /// selagi tekan duk sini } } void press_separuh() { while(1) { motor=1; lcd.cls(); lcd.printf("press separuh\n"); lcd.printf("init pos\n"); while(lim_1==1) { current_disp(); if(sw_stop==1) break; } solenoid=0; lcd.printf("press down\n"); while(lim_2==1) { current_disp(); if(sw_stop==1) break; } solenoid=1; lcd.printf("up position\n"); while(lim_1==1) { current_disp(); if(sw_stop==1) break; } lcd.cls(); motor=0; break; } } void press_penuh() { while(1) { motor=1; lcd.cls(); lcd.printf("press penuh\n"); lcd.printf("init pos\n"); while(lim_1==1) { current_disp(); if(sw_stop==1) break; } solenoid=0; lcd.printf("press down\n"); while(lim_3==1) { current_disp(); if(sw_stop==1) break; } solenoid=1; lcd.printf("up position\n"); while(lim_1==1) { current_disp(); if(sw_stop==1) break; } lcd.cls(); motor=0; break; } } void current_disp() { // for (int i=0; i<NSAMPLING; i++) { //acquisition double sum_1 = 0.0; //long v_max; for (int samples = 0; samples<NSAMPLES; samples++) { sum_1 += ain_1; } sum_1 /= NSAMPLES; sum_1 = (sum_1-vref_1)*V_max/0.185; if(sum_1>0 && sum_1>v_max ) v_max=sum_1; //vread lcd.locate(1,2); lcd.printf("c.max"); lcd.locate(8,2); lcd.printf("%.4f A ", v_max);//max lcd.locate(1,3); lcd.printf("cbace"); lcd.locate(8,3); lcd.printf("%.4f A ", sum_1);//current reading // } }