Con la variacion del encoder, nos moveremos a traves de los parametros del PID,luego al pulsarlo nos enviara una señal a un speaker.

Dependencies:   Debounced QEI TextLCD mbed

main.cpp

Committer:
Jesse
Date:
2014-04-03
Revision:
0:cdf4bcffb35a

File content as of revision 0:cdf4bcffb35a:

//Jesse Mauricio Beltran
//Michelle Maceas Henao


#include "mbed.h"
#include "DebouncedIn.h"
#include "TextLCD.h"
#include "QEI.h"


QEI wheel (PTA16, PTA17, NC, 48);
TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7


DebouncedIn Enco(PTC5);
DebouncedIn button1(PTC10);
DebouncedIn button2(PTC6);
DebouncedIn button3(PTC11);
PwmOut Pwm(PTA5);

 
float pp=0.001;
float Dd=0.1;
int SP1=0,Sp=0,Kp1=0,Kp=0,Ki=0,Ki1=0,Kd=0,Kd1=0,v,m;
int C1=0x0E; // solo muestra el curzor
int i; // indice de la variable

int PWMmodule(float pp,float Dd)
{
        Pwm.period(pp);
        Pwm.write(Dd);
        wait(0.2);
        Pwm.write(0); 
        return 0;
} 

int main() 

{
    lcd.writeCommand(0x0E);
    lcd.printf("Sp=0    Kp=0");
    lcd.locate(0,1);
    lcd.printf("Ki=0    Kd=0");
    lcd.locate(2,0);
    lcd.printf("=");

    while(1) 
    {  
     m=wheel.getPulses();
     
            if(m!=v) {  
                                                
            switch(i) {
            
                case 0:
                    Kd1=Kd;
                    
                    lcd.locate(2,0);
                    lcd.printf("=     ");
                    lcd.locate(3,0);
                    lcd.printf("%d",Sp);
                    //Sp=m;
                    Sp=SP1+m;  
                    if(Sp<0)
                    {
                        Sp=0; 
                        wheel.reset();  
                        m=0; 
                    }                
                    break;
                case 1:
                    SP1=Sp;
                    lcd.locate(10,0);
                    lcd.printf("=     ");
                    lcd.locate(11,0);
                    lcd.printf("%d",Kp);
                    //Kp=m;
                    Kp=Kp1+m;  
                    if(Kp<0)
                    {
                        Kp=0; 
                        wheel.reset();  
                        m=0; 
                    }  
                    break;
                case 2:
                    Kp1=Kp;
                    lcd.locate(2,1);
                    lcd.printf("=     ");
                    lcd.locate(3,1);
                    lcd.printf("%d",Ki);
                    //Ki=m;
                    Ki=Ki1+m;  
                    if(Ki<0)
                    {
                        Ki=0; 
                        wheel.reset();  
                        m=0; 
                    } 
                    
                    break;
                case 3:
                    Ki1=Ki;
                    lcd.locate(10,1);
                    lcd.printf("=     ");
                    lcd.locate(11,1);
                    lcd.printf("%d",Kd);
                    Kd=Kd1+m;
                    if(Kd<0)
                    {
                        Kd=0; 
                        wheel.reset();  
                        m=0; 
                    } 
                    
                    break;
            }
            v=m;
        }
                  
        
        if(button3.falling() || Enco.falling()) 
        {
            PWMmodule(pp,Dd);
            wait(0.2);
            wheel.reset();
            i++;
            if(i>3) 
            {
                i=0;
            }
            switch (i) 
            {
                case 0:
                    lcd.locate(2,0);
                    lcd.printf("=");
                    break;
                case 1:
                    lcd.locate(10,0);
                    lcd.printf("=");
                    break;
                case 2:
                    lcd.locate(2,1);
                    lcd.printf("=");
                    break;
                case 3:
                    lcd.locate(10,1);
                    lcd.printf("=");
                    break;
                    
                    
            }
        } 
        /*if(button3.falling())
        {
                PWMmodule(pp,Dd);
        } */
    }
}