Read an analog value using ADC.

Dependencies:   testmotor mbed

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
              


       // }
    
}