ingrese los parámetros para el controlador PID, se pueden ingresar del 0 al 9999 pero para el debido funcionamiento del PID ingrese del 0 al 100 cada parametro

Dependencies:   DebounceIn Debounced TextLCD mbed

main.cpp

Committer:
caaruizze
Date:
2013-11-18
Revision:
0:0275ebccd8fe

File content as of revision 0:0275ebccd8fe:

#include "mbed.h"
#include "DebouncedIn.h"
#include "DebounceIn.h"
#include "TextLCD.h"
AnalogIn Vin(PTC2);
AnalogOut Vo(PTE30);
int C1=0x0e;

int i=0;
int k=0,u=0;

int j=0;
int l=0,g=0;

int m=0;
int n=0,q=0;
int o=0; 
int p=0,h=0;

float kp, ki, kd, sp ,err, med, yr, pid, ap, ai, ad, err_v ,Sp;
int x=1;

int main() 
{
TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5) ;// declaración de los puertos del lcd
DebounceIn b1(PTC16); //aumento 
DebounceIn b3(PTC12);// disminuye
DebouncedIn b2(PTC13);// ,cambio de posición
DebounceIn  b4(PTC17);//  Cabio de etiqueta
lcd.printf("TAREA2:Proc"); // IMPRIMIR 
wait(1); // espera 1 segundo
lcd.cls();      // borra lcd
lcd.writeCommand(C1); // escribe el comando C1
        // Localiza y escribe los titulos Sp,Kp,Ki,Kd en la patalla
lcd.locate(0,0);
lcd.printf("Sp:%d",i);
lcd.locate(8,0);
lcd.printf("Kp:%d",j);
lcd.locate(0,1);
lcd.printf("Ki:%d",m);
lcd.locate(8,1);
lcd.printf("Kd:%d",o);
// Ciclo infinito
while (1)
{
if(b2.falling())
{
  x=x+1;
 }
//condicionales para ubicación en pantalla
        if(x==1)
        {//a
lcd.locate(3,0);
lcd.printf("%d",i);
                //Ascenso
        if(b1.read()==1)
        {
        k=0;
        }
            if(b1.read()==0 && k<25)
            {//1.1
                k=k+1;
                i=i+1;
                wait(0.2);
                lcd.locate(3,0);
                lcd.printf("%d",i);
             }//1.1    
                if(b1.read()==0 && k>=25 && k<50)
                {//1.2
                    k=k+1;
                    i=i+5;
                    wait(0.2);
                    lcd.locate(3,0);
                    lcd.printf("%d",i); 
                }//1.2
                
                if(b1.read()==0 && k>=50 && k<75)
                {//1.3
                    k=k+1;
                    i=i+10;
                    wait(0.2);
                    lcd.locate(3,0);
                    lcd.printf("%d",i); 
                }//1.3
                
                if(b1.read()==0 && k>=75 && k<100)
                {//1.4
                    k=k+1;
                    i=i+100;
                    wait(0.2);
                    lcd.locate(3,0);
                    lcd.printf("%d",i); 
                }//1.4           
                if(b1.read()==0 && k>=100 && k<125)
                {//1.5
                    k=k+1;
                    i=i+1000;
                    wait(0.2);
                    lcd.locate(3,0);
                    lcd.printf("%d",i); 
                    if(i>9999)
                    {//1.5.1
                        i=9999;
                        lcd.locate(3,0);
                        lcd.printf("     ");
                        lcd.locate(3,0);
                        lcd.printf("%d",i); 
                    }//1.5.1
                }//1.5  
                //Descenso
        if(b3.read()==1)
        {
        u=0;
        }
                   if(b3.read()==0 && u<25)
                    {//2.1
                        u=u+1;
                        i=i-1;
                        wait(0.2);
                        lcd.locate(3,0); 
                        lcd.printf("     ");
                        lcd.locate(3,0);
                        lcd.printf("%d",i);
                     }//2.1    
                        if(b3.read()==0 && u>=25 && u<50)
                        {//2.2
                            u=u+1;
                            i=i-5;
                            wait(0.2);
                            lcd.locate(3,0);
                            lcd.printf("     ");                                                           
                            lcd.locate(3,0);
                            lcd.printf("%d",i); 
                        }//2.2
                        
                        if(b3.read()==0 && u>=50 && u<75)
                        {//2.3
                            u=u+1;
                            i=i-10;
                            wait(0.2);
                            lcd.locate(3,0);
                            lcd.printf("     ");                                                           
                            lcd.locate(3,0);
                            lcd.printf("%d",i); 
                        }//2.3
                        
                        if(b3.read()==0 && u>=75 && u<100)
                        {//2.4
                            u=u+1;
                            i=i-100;
                            wait(0.2);
                            lcd.locate(3,0); 
                            lcd.printf("     ");                                                        
                            lcd.locate(3,0);
                            lcd.printf("%d",i); 
                        }//2.4           
                        if(b3.read()==0 && u>=100 && u<125)
                        {//2.5
                            u=u-1;
                            i=i-1000;
                            wait(0.2);
                            lcd.locate(3,0);
                            lcd.printf("     ");                                                            
                            lcd.locate(3,0);
                            lcd.printf("%d",i); 
                        }//2.5  
                        if(i<0)
                           {//2.6
                                i=0;
                                lcd.locate(3,0);
                                lcd.printf("     ");
                                lcd.locate(3,0);
                                lcd.printf("%d",i); 
                            }//2.6                            
                     
        }//a
           
    if(x==2)
    {//b
    lcd.locate(11,0);
    lcd.printf("%d",j);
    //Ascenso
            if(b1.read()==1)
        {
        l=0;
        }
            if(b1.read()==0 && l<25)
            {//1.1
                l=l+1;
                j=j+1;
                wait(0.2);
                lcd.locate(11,0);
                lcd.printf("%d",j);
             }//1.1    
                if(b1.read()==0 && l>=25 && l<50)
                {//1.2
                    l=l+1;
                    j=j+5;
                    wait(0.2);
                    lcd.locate(11,0);
                    lcd.printf("%d",j); 
                }//1.2
                
                if(b1.read()==0 && l>=50 && l<75)
                {//1.3
                    l=l+1;
                    j=j+10;
                    wait(0.2);
                    lcd.locate(11,0);
                    lcd.printf("%d",j); 
                }//1.3
                
                if(b1.read()==0 && l>=75 && l<100)
                {//1.4
                    l=l+1;
                    j=j+100;
                    wait(0.2);
                    lcd.locate(11,0);
                    lcd.printf("%d",j); 
                }//1.4           
                if(b1.read()==0 && l>=100 && l<125)
                {//1.5
                    l=l+1;
                    j=j+1000;
                    wait(0.2);
                    lcd.locate(11,0);
                    lcd.printf("%d",j); 
                    if(j>9999)
                    {//1.5.1
                        j=9999;
                        lcd.locate(11,0);
                        lcd.printf("     ");
                        lcd.locate(11,0);
                        lcd.printf("%d",j); 
                    }//1.5.1
                }//1.5  
                //Descenso
        if(b3.read()==1)
        {
        g=0;
        }
                   if(b3.read()==0 && g<25)
                    {//2.1
                        g=g+1;
                        j=j-1;
                        wait(0.2);
                        lcd.locate(11,0); 
                        lcd.printf("     ");
                        lcd.locate(11,0);
                        lcd.printf("%d",j);
                     }//2.1    
                        if(b3.read()==0 && g>=25 && g<50)
                        {//2.2
                            g=g+1;
                            j=j-5;
                            wait(0.2);
                            lcd.locate(11,0);
                            lcd.printf("     ");                                                           
                            lcd.locate(11,0);
                            lcd.printf("%d",j); 
                        }//2.2
                        
                        if(b3.read()==0 && g>=50 && g<75)
                        {//2.3
                            g=g+1;
                            j=j-10;
                            wait(0.2);
                            lcd.locate(11,0);
                            lcd.printf("     ");                                                           
                            lcd.locate(11,0);
                            lcd.printf("%d",j); 
                        }//2.3
                        
                        if(b3.read()==0 && g>=75 && g<100)
                        {//2.4
                            g=g+1;
                            j=j-100;
                            wait(0.2);
                            lcd.locate(11,0); 
                            lcd.printf("     ");                                                        
                            lcd.locate(11,0);
                            lcd.printf("%d",j); 
                        }//2.4           
                        if(b3.read()==0 && g>=100 && g<125)
                        {//2.5
                            g=g-1;
                            j=j-1000;
                            wait(0.2);
                            lcd.locate(11,0);
                            lcd.printf("     ");                                                            
                            lcd.locate(11,0);
                            lcd.printf("%d",j); 
                        }//2.5  
                        if(j<0)
                           {//2.6
                                j=0;
                                lcd.locate(11,0);
                                lcd.printf("     ");
                                lcd.locate(11,0);
                                lcd.printf("%d",j); 
                            }//2.6 
    
     
    }//b
    
    if(x==3)
    {//c
      lcd.locate(3,1);
      lcd.printf("%d",m);
              if(b1.read()==1)
        {
        n=0;
        }
            if(b1.read()==0 && n<25)
            {//1.1
                n=n+1;
                m=m+1;
                wait(0.2);
                lcd.locate(3,1);
                lcd.printf("%d",m);
             }//1.1    
                if(b1.read()==0 && n>=25 && n<50)
                {//1.2
                    n=n+1;
                    m=m+5;
                    wait(0.2);
                    lcd.locate(3,1);
                    lcd.printf("%d",m); 
                }//1.2
                
                if(b1.read()==0 && n>=50 && n<75)
                {//1.3
                    n=n+1;
                    m=m+10;
                    wait(0.2);
                    lcd.locate(3,1);
                    lcd.printf("%d",m); 
                }//1.3
                
                if(b1.read()==0 && n>=75 && n<100)
                {//1.4
                    n=n+1;
                    m=m+100;
                    wait(0.2);
                    lcd.locate(3,1);
                    lcd.printf("%d",m); 
                }//1.4           
                if(b1.read()==0 && n>=100 && n<125)
                {//1.5
                    n=n+1;
                    m=m+1000;
                    wait(0.2);
                    lcd.locate(3,1);
                    lcd.printf("%d",m); 
                    if(m>9999)
                    {//1.5.1
                        m=9999;
                        lcd.locate(3,1);
                        lcd.printf("     ");
                        lcd.locate(3,1);
                        lcd.printf("%d",m); 
                    }//1.5.1
                }//1.5  
                //Descenso
        if(b3.read()==1)
        {
        q=0;
        }
                   if(b3.read()==0 && q<25)
                    {//2.1
                        q=q+1;
                        m=m-1;
                        wait(0.2);
                        lcd.locate(3,1); 
                        lcd.printf("     ");
                        lcd.locate(3,1);
                        lcd.printf("%d",m);
                     }//2.1    
                        if(b3.read()==0 && q>=25 && q<50)
                        {//2.2
                            q=q+1;
                            m=m-5;
                            wait(0.2);
                            lcd.locate(3,1);
                            lcd.printf("     ");                                                           
                            lcd.locate(3,1);
                            lcd.printf("%d",m); 
                        }//2.2
                        
                        if(b3.read()==0 && q>=50 && q<75)
                        {//2.3
                            q=q+1;
                            m=m-10;
                            wait(0.2);
                            lcd.locate(3,1);
                            lcd.printf("     ");                                                           
                            lcd.locate(3,1);
                            lcd.printf("%d",m); 
                        }//2.3
                        
                        if(b3.read()==0 && q>=75 && q<100)
                        {//2.4
                            q=q+1;
                            m=m-100;
                            wait(0.2);
                            lcd.locate(3,1); 
                            lcd.printf("     ");                                                        
                            lcd.locate(3,1);
                            lcd.printf("%d",m); 
                        }//2.4           
                        if(b3.read()==0 && q>=100 && q<125)
                        {//2.5
                            q=q+1;
                            m=m-1000;
                            wait(0.2);
                            lcd.locate(3,1);
                            lcd.printf("     ");                                                            
                            lcd.locate(3,1);
                            lcd.printf("%d",m); 
                        }//2.5  
                        if(m<0)
                           {//2.6
                                m=0;
                                lcd.locate(3,1);
                                lcd.printf("     ");
                                lcd.locate(3,1);
                                lcd.printf("%d",m); 
                            }//2.6                  
      
    }//c
    
    if(x==4)
    {//d
    lcd.locate(11,1);
    lcd.printf("%d",o);
    
              if(b1.read()==1)
        {
        n=0;
        }
            if(b1.read()==0 && p<25)
            {//1.1
                p=p+1;
                o=o+1;
                wait(0.2);
                lcd.locate(11,1);
                lcd.printf("%d",o);
             }//1.1    
                if(b1.read()==0 && p>=25 && p<50)
                {//1.2
                    p=p+1;
                    o=o+5;
                    wait(0.2);
                    lcd.locate(11,1);
                    lcd.printf("%f",o); 
                }//1.2
                
                if(b1.read()==0 && p>=50 && p<75)
                {//1.3
                    p=p+1;
                    o=o+10;
                    wait(0.2);
                    lcd.locate(11,1);
                    lcd.printf("%d",o); 
                }//1.3
                
                if(b1.read()==0 && p>=75 && p<100)
                {//1.4
                    p=p+1;
                    o=o+100;
                    wait(0.2);
                    lcd.locate(11,1);
                    lcd.printf("%d",o); 
                }//1.4           
                if(b1.read()==0 && p>=100 && p<125)
                {//1.5
                    p=p+1;
                    o=o+1000;
                    wait(0.2);
                    lcd.locate(11,1);
                    lcd.printf("%d",o); 
                    if(o>9999)
                    {//1.5.1
                        o=9999;
                        lcd.locate(11,1);
                        lcd.printf("     ");
                        lcd.locate(11,1);
                        lcd.printf("%d",o); 
                    }//1.5.1
                }//1.5  
                //Descenso
        if(b3.read()==1)
        {
        h=0;
        }
                   if(b3.read()==0 && h<25)
                    {//2.1
                        h=h+1;
                        o=o-1;
                        wait(0.2);
                        lcd.locate(11,1); 
                        lcd.printf("     ");
                        lcd.locate(11,1);
                        lcd.printf("%d",o);
                     }//2.1    
                        if(b3.read()==0 && h>=25 && h<50)
                        {//2.2
                            h=h+1;
                            o=o-5;
                            wait(0.2);
                            lcd.locate(11,1);
                            lcd.printf("     ");                                                           
                            lcd.locate(11,1);
                            lcd.printf("%d",o); 
                        }//2.2
                        
                        if(b3.read()==0 && h>=50 && h<75)
                        {//2.3
                            h=h+1;
                            o=o-10;
                            wait(0.2);
                            lcd.locate(11,1);
                            lcd.printf("     ");                                                           
                            lcd.locate(11,1);
                            lcd.printf("%d",o); 
                        }//2.3
                        
                        if(b3.read()==0 && h>=75 && h<100)
                        {//2.4
                            h=h+1;
                            o=o-100;
                            wait(0.2);
                            lcd.locate(11,1); 
                            lcd.printf("     ");                                                        
                            lcd.locate(11,1);
                            lcd.printf("%d",o); 
                        }//2.4           
                        if(b3.read()==0 && h>=100 && h<125)
                        {//2.5
                            h=h+1;
                            o=o-1000;
                            wait(0.2);
                            lcd.locate(11,1);
                            lcd.printf("     ");                                                            
                            lcd.locate(11,1);
                            lcd.printf("%d",o); 
                        }//2.5  
                        if(o<0)
                           {//2.6
                                o=0;
                                lcd.locate(11,1);
                                lcd.printf("     ");
                                lcd.locate(11,1);
                                lcd.printf("%d",o); 
                            }//2.6   
    }//d
    
            if(x>4)
            {
                   x=1;
            }
    if(b4.read()==0)
    {
    
   
    goto PID;
    }
    }//while1
    
    PID:
     
        wait(0.5); // espera 1 segundo
        lcd.cls();      // borra lcd
        wait(0.2);
        lcd.printf("DATOS GUARDADOS!");
        wait(1);
        lcd.cls();
      
           lcd.locate(0,0);
           lcd.printf("Er:");
           lcd.locate(8,0);
           lcd.printf("Me:");        
           lcd.locate(0,1);
           lcd.printf("Sp:");
           lcd.locate(8,1);
           lcd.printf("CO:");  
           
    while(1)
    {//whilePID
    wait(0.1);         
                   sp=i;
                   kp=j;
                   kd=m;
                   ki=o;
           
           Sp=(sp*3.3)/100;
               med=Vin*3.3;
               err = (Sp-med);
               ap = kp*err;
               ai =(ki*err)+ai;

               ad = kd*(err-err_v);
           pid = (ap+ai+ad);
             if  (pid<0)
           {
            pid=0;
           }
           if (pid>99)
           {
             pid=100;
           }
           
           Vo=pid/100;
                       
                                           
                                lcd.locate(3,0);
                                lcd.printf("     ");            
           lcd.locate(3,0);
           lcd.printf("%.1f",err);
                                lcd.locate(11,0);
                                lcd.printf("     ");            
           lcd.locate(11,0);
           lcd.printf("%.1f",med);
                                lcd.locate(3,1);
                                lcd.printf("     "); 
           lcd.locate(3,1);
           lcd.printf("%.1f",Sp);
                                lcd.locate(11,1);
                                lcd.printf("     ");            
           lcd.locate(11,1);
           lcd.printf("%.1f",pid);
           
                err_v = err;
    }//whilePID
    }//main