PID en pantalla LCD con botones incremental, decremental y cambiador de variable (Sp, Kp, Ki, Kd) que tambien suenan con diferente frecuencia cuando se pulsan.

Dependencies:   Debounced TextLCD mbed

Fork of pid_teclas by Gustavo Ramirez

main.cpp

Committer:
walterg
Date:
2014-04-02
Revision:
1:69f927a70859
Parent:
0:9aa80672eb3d

File content as of revision 1:69f927a70859:

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

float Tdo=1/2093.005;
float Pdo=Tdo/2;
float Tre=1/2637.02;
float Pre=Tre/2;
float Tmi=1/3135.963;
float Pmi=Tmi/2;


TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7
 
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DebouncedIn button1(PTC12);
DebouncedIn button2(PTC13);
DebouncedIn button3(PTC16);

//DigitalOut Vparlante(PTC5);
PwmOut pw(PTA12);

int C1=0x0F;
int sp=0,kp=0,kd=0,ki=0,p=1;
int main()
{
    lcd.cls();
    lcd.writeCommand(C1);//escribimos un comando segun el manual del modulo LCD
    lcd.locate(8,0);
    lcd.printf("kp=%d", kp);
    lcd.locate(0,1);
    lcd.printf("Ki=%d", ki);
    lcd.locate(8,1);
    lcd.printf("Kd=%d", kd);
    lcd.locate(0,0);
    lcd.printf("Sp=%d", sp);
 
 
    while(1)
    {
        if (button1.falling())
        {
            pw.period(Tdo);
            pw.pulsewidth(Pdo);
            wait(0.1);
            pw=0;
            
            led1 =!led1;
            if (p==1)
            {
                ++sp;
                lcd.locate(3,0);
                lcd.printf("   ");
                lcd.locate(3,0);
                lcd.printf("%d", sp);
            }
            else if (p==2)
            {
                ++kp;
                lcd.locate(11,0);
                lcd.printf("   ");
                lcd.locate(11,0);
                lcd.printf("%d", kp);
            }
            else if (p==3)
            {
                ++ki;
                lcd.locate(3,1);
                lcd.printf("   ");
                lcd.locate(3,1);
                lcd.printf("%d", ki);
            }
            else if (p==4)
            {
                ++kd;
                lcd.locate(11,1);
                lcd.printf("   ");
                lcd.locate(11,1);
                lcd.printf("%d", kd);
            }
        }
        if (button2.falling())
        {
            pw.period(Tre);
            pw.pulsewidth(Pre);
            wait(0.1);
            pw=0;
            
            led2 =!led2;
            if (p==1)
            {
                if (sp==0)  // no mostrar nada
                {
                }
                else
                {
                    --sp;
                    lcd.locate(3,0);
                    lcd.printf("   ");
                    lcd.locate(3,0);
                    lcd.printf("%d", sp);
                }
            }
            if (p==2)
            {
                if (kp==0)  // no mostrar nada
                {
                }
                else
                {
                    --kp;
                    lcd.locate(11,0);
                    lcd.printf("   ");
                    lcd.locate(11,0);
                    lcd.printf("%d", kp);
                }
            }
            if (p==3)
            {
                if (ki==0)  // no mostrar nada
                {
                }
                else
                {
                    --ki;
                    lcd.locate(3,1);
                    lcd.printf("   ");
                    lcd.locate(3,1);
                    lcd.printf("%d", ki);
                }
            }
            if (p==4)
            {
                if (kd==0)  // no mostrar nada
                {
                }
                else
                {
                    --kd;
                    lcd.locate(11,1);
                    lcd.printf("   ");
                    lcd.locate(11,1);
                    lcd.printf("%d", kd);
                }
            }
        }
        if (button3.falling())
        {
            
            pw.period(Tmi);
            pw.pulsewidth(Pmi);
            wait(0.1);
            pw=0;
            
            led3 =!led3;
            if (p==1)
            {
                ++p;
                lcd.locate(11,0);
                lcd.printf("%d", kp);
                
                
            }
            else if (p==2)
            {
                ++p;
                lcd.locate(3,1);
                lcd.printf("%d", ki);
                lcd.locate(3,1);
                
            }
            else if (p==3)
            {
                ++p;
                lcd.locate(11,1);
                lcd.printf("%d", kd);
                
                
            }
            else if (p==4)
            {
                p=1;
                lcd.locate(3,0);
                lcd.printf("%d", sp);
                
                
            }
        }
    }
}