d

Dependencies:   Debounced TextLCD mbed

main.cpp

Committer:
salvarear
Date:
2013-12-12
Revision:
0:1fe45e27a3c7

File content as of revision 0:1fe45e27a3c7:

#include "mbed.h"
#include "DebouncedIn.h"
#include "TextLCD.h"
AnalogIn Vin(PTC2);
TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7  //documentacion de las librerias y disposicion de pines

DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DebouncedIn b1(PTC12);  //boton incrementa.
DebouncedIn b2(PTC13);  //boton decrementa.
DebouncedIn b3(PTB8);   //boton cambio menu.    
DebouncedIn b4(PTB9);   //boton reset.
     

int C1=0x0E; // solo muestra el cursor
int C2=0x18; // desplaza el cursor a la  izquierda
int C3=0x1A; // desplaza el cursor derecha
int C4=0x0C; // quita el  cursor bajo
int a; 
int b;
int kp, ki, kd, sp, err, med, pid, ap, ai, ad, err_v; //revisar antes de la primera tarear(PID)

int main() {
    lcd.cls();
    lcd.printf("Sp%d",sp);      //ubicacion de las variables en la pantalla
    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.writeCommand(C1);
    lcd.locate(0,0);
    lcd.printf("Sp%d",sp);
  
    while(1) {              //inicio cliclos del pid
        if (b1.falling()) { // incrementa
           led1 =!led1;
           ++a;
           lcd.locate(6,0);
           lcd.printf("%d", a);
        }
    if (b2.falling()) { //decrementa
           led2 =!led2;
           --a;
           lcd.locate(6,0);
           lcd.printf("%d", a);
            }
     if (b3.falling()) {      
                                            //botones
         if (b==0){
         lcd.locate(2,0);
         lcd.printf("%d",sp);
             if (b1.falling()) {                            
             ++sp;                
             }
             if (b2.falling()) {                            
             --sp;                
             } 
       }
        if (b==1) {                 
           lcd.locate(10,0);
           lcd.printf("%d",kp);
            if (b1.falling()){
            ++kp;
             }
             if (b2.falling()) {                            
             --kp;
              }
          }
          if (b==2) {
            lcd.locate(2,1);
             lcd.printf("%d",ki);
                  if (b1.falling()){
                  ++ki;
                  }
                  if (b2.falling()){                            
                  --ki;
                  }               
              }
           if (b==3) {
               lcd.locate(10,1);
               lcd.printf("%d",kd);
                  if (b1.falling()){
                  ++kd;
                  }
                  if (b2.falling()){                            
                  --kd
                  else(b==4) {
                     b=0;
               }                          
            }
           if (b4.falling()){
           break;                       
       }       }
  }                      
        

           lcd.writeCommand(C4);
           lcd.cls();      
           lcd.printf("    Guardando Datos!"); 
           wait(2);
           lcd.printf("     Espere....");
           wait(2);
           lcd.cls();
           lcd.printf("Iniciando PID");
           wait(2);
          
           lcd.cls();
           lcd.printf("Er%d",err);
           lcd.locate(8,0);
           lcd.printf("Me%d",med);
           lcd.locate(0,1);
           lcd.printf("Sp%d",sp);
           lcd.locate(8,1);
           lcd.printf("Co%d",pid);
           wait(5);
           
           void star_patch(void){  //funcion que imprime los caracteres que no van a variar en el display
            lcd.printf("SP=");
            lcd.locate(7,0);
            lcd.printf("Kp=");
            lcd.locate(0,1);
            lcd.printf("Ki=");
            lcd.locate(7,1);
            lcd.printf("Kd=");
            lcd.locate(3,0);
            }

        int main(){
        star_patch();
         while(1){
            if(k==3)k=0;
            if(salto.read()==0){    
             def_posicion(k);
              k++;
                 }
             else if(mas.read()==0){
             incremento(k); 
             }
             else if(menos.read()==0){
              decremento(k);
             }
        }
      }   
           
          //calculo del pid
           
           while(1) {
                              
           err = (sp-med);
           ap = kp*err;
           ai =(ki*err)+ai;    
           
           ad = kd*(err-err_v); 
           pid = (ap+ai+ad);
          
           if (pid > 999){
           pid=1000;
           } 
           
           wait(.5);
           lcd.locate(2,0);
           lcd.printf("%d",err);
           lcd.locate(10,0);
           lcd.printf("%d",med);
           lcd.locate(2,1);
           lcd.printf("%d",sp);
           lcd.locate(10,1);
           lcd.printf("%d",pid);
           err_v = err;           
          
           }
}