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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "DebouncedIn.h"
00003 #include "DebounceIn.h"
00004 #include "TextLCD.h"
00005 AnalogIn Vin(PTC2);
00006 AnalogOut Vo(PTE30);
00007 int C1=0x0e;
00008 
00009 int i=0;
00010 int k=0,u=0;
00011 
00012 int j=0;
00013 int l=0,g=0;
00014 
00015 int m=0;
00016 int n=0,q=0;
00017 int o=0; 
00018 int p=0,h=0;
00019 
00020 float kp, ki, kd, sp ,err, med, yr, pid, ap, ai, ad, err_v ,Sp;
00021 int x=1;
00022 
00023 int main() 
00024 {
00025 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5) ;// declaración de los puertos del lcd
00026 DebounceIn b1(PTC16); //aumento 
00027 DebounceIn b3(PTC12);// disminuye
00028 DebouncedIn b2(PTC13);// ,cambio de posición
00029 DebounceIn  b4(PTC17);//  Cabio de etiqueta
00030 lcd.printf("TAREA2:Proc"); // IMPRIMIR 
00031 wait(1); // espera 1 segundo
00032 lcd.cls();      // borra lcd
00033 lcd.writeCommand(C1); // escribe el comando C1
00034         // Localiza y escribe los titulos Sp,Kp,Ki,Kd en la patalla
00035 lcd.locate(0,0);
00036 lcd.printf("Sp:%d",i);
00037 lcd.locate(8,0);
00038 lcd.printf("Kp:%d",j);
00039 lcd.locate(0,1);
00040 lcd.printf("Ki:%d",m);
00041 lcd.locate(8,1);
00042 lcd.printf("Kd:%d",o);
00043 // Ciclo infinito
00044 while (1)
00045 {
00046 if(b2.falling())
00047 {
00048   x=x+1;
00049  }
00050 //condicionales para ubicación en pantalla
00051         if(x==1)
00052         {//a
00053 lcd.locate(3,0);
00054 lcd.printf("%d",i);
00055                 //Ascenso
00056         if(b1.read()==1)
00057         {
00058         k=0;
00059         }
00060             if(b1.read()==0 && k<25)
00061             {//1.1
00062                 k=k+1;
00063                 i=i+1;
00064                 wait(0.2);
00065                 lcd.locate(3,0);
00066                 lcd.printf("%d",i);
00067              }//1.1    
00068                 if(b1.read()==0 && k>=25 && k<50)
00069                 {//1.2
00070                     k=k+1;
00071                     i=i+5;
00072                     wait(0.2);
00073                     lcd.locate(3,0);
00074                     lcd.printf("%d",i); 
00075                 }//1.2
00076                 
00077                 if(b1.read()==0 && k>=50 && k<75)
00078                 {//1.3
00079                     k=k+1;
00080                     i=i+10;
00081                     wait(0.2);
00082                     lcd.locate(3,0);
00083                     lcd.printf("%d",i); 
00084                 }//1.3
00085                 
00086                 if(b1.read()==0 && k>=75 && k<100)
00087                 {//1.4
00088                     k=k+1;
00089                     i=i+100;
00090                     wait(0.2);
00091                     lcd.locate(3,0);
00092                     lcd.printf("%d",i); 
00093                 }//1.4           
00094                 if(b1.read()==0 && k>=100 && k<125)
00095                 {//1.5
00096                     k=k+1;
00097                     i=i+1000;
00098                     wait(0.2);
00099                     lcd.locate(3,0);
00100                     lcd.printf("%d",i); 
00101                     if(i>9999)
00102                     {//1.5.1
00103                         i=9999;
00104                         lcd.locate(3,0);
00105                         lcd.printf("     ");
00106                         lcd.locate(3,0);
00107                         lcd.printf("%d",i); 
00108                     }//1.5.1
00109                 }//1.5  
00110                 //Descenso
00111         if(b3.read()==1)
00112         {
00113         u=0;
00114         }
00115                    if(b3.read()==0 && u<25)
00116                     {//2.1
00117                         u=u+1;
00118                         i=i-1;
00119                         wait(0.2);
00120                         lcd.locate(3,0); 
00121                         lcd.printf("     ");
00122                         lcd.locate(3,0);
00123                         lcd.printf("%d",i);
00124                      }//2.1    
00125                         if(b3.read()==0 && u>=25 && u<50)
00126                         {//2.2
00127                             u=u+1;
00128                             i=i-5;
00129                             wait(0.2);
00130                             lcd.locate(3,0);
00131                             lcd.printf("     ");                                                           
00132                             lcd.locate(3,0);
00133                             lcd.printf("%d",i); 
00134                         }//2.2
00135                         
00136                         if(b3.read()==0 && u>=50 && u<75)
00137                         {//2.3
00138                             u=u+1;
00139                             i=i-10;
00140                             wait(0.2);
00141                             lcd.locate(3,0);
00142                             lcd.printf("     ");                                                           
00143                             lcd.locate(3,0);
00144                             lcd.printf("%d",i); 
00145                         }//2.3
00146                         
00147                         if(b3.read()==0 && u>=75 && u<100)
00148                         {//2.4
00149                             u=u+1;
00150                             i=i-100;
00151                             wait(0.2);
00152                             lcd.locate(3,0); 
00153                             lcd.printf("     ");                                                        
00154                             lcd.locate(3,0);
00155                             lcd.printf("%d",i); 
00156                         }//2.4           
00157                         if(b3.read()==0 && u>=100 && u<125)
00158                         {//2.5
00159                             u=u-1;
00160                             i=i-1000;
00161                             wait(0.2);
00162                             lcd.locate(3,0);
00163                             lcd.printf("     ");                                                            
00164                             lcd.locate(3,0);
00165                             lcd.printf("%d",i); 
00166                         }//2.5  
00167                         if(i<0)
00168                            {//2.6
00169                                 i=0;
00170                                 lcd.locate(3,0);
00171                                 lcd.printf("     ");
00172                                 lcd.locate(3,0);
00173                                 lcd.printf("%d",i); 
00174                             }//2.6                            
00175                      
00176         }//a
00177            
00178     if(x==2)
00179     {//b
00180     lcd.locate(11,0);
00181     lcd.printf("%d",j);
00182     //Ascenso
00183             if(b1.read()==1)
00184         {
00185         l=0;
00186         }
00187             if(b1.read()==0 && l<25)
00188             {//1.1
00189                 l=l+1;
00190                 j=j+1;
00191                 wait(0.2);
00192                 lcd.locate(11,0);
00193                 lcd.printf("%d",j);
00194              }//1.1    
00195                 if(b1.read()==0 && l>=25 && l<50)
00196                 {//1.2
00197                     l=l+1;
00198                     j=j+5;
00199                     wait(0.2);
00200                     lcd.locate(11,0);
00201                     lcd.printf("%d",j); 
00202                 }//1.2
00203                 
00204                 if(b1.read()==0 && l>=50 && l<75)
00205                 {//1.3
00206                     l=l+1;
00207                     j=j+10;
00208                     wait(0.2);
00209                     lcd.locate(11,0);
00210                     lcd.printf("%d",j); 
00211                 }//1.3
00212                 
00213                 if(b1.read()==0 && l>=75 && l<100)
00214                 {//1.4
00215                     l=l+1;
00216                     j=j+100;
00217                     wait(0.2);
00218                     lcd.locate(11,0);
00219                     lcd.printf("%d",j); 
00220                 }//1.4           
00221                 if(b1.read()==0 && l>=100 && l<125)
00222                 {//1.5
00223                     l=l+1;
00224                     j=j+1000;
00225                     wait(0.2);
00226                     lcd.locate(11,0);
00227                     lcd.printf("%d",j); 
00228                     if(j>9999)
00229                     {//1.5.1
00230                         j=9999;
00231                         lcd.locate(11,0);
00232                         lcd.printf("     ");
00233                         lcd.locate(11,0);
00234                         lcd.printf("%d",j); 
00235                     }//1.5.1
00236                 }//1.5  
00237                 //Descenso
00238         if(b3.read()==1)
00239         {
00240         g=0;
00241         }
00242                    if(b3.read()==0 && g<25)
00243                     {//2.1
00244                         g=g+1;
00245                         j=j-1;
00246                         wait(0.2);
00247                         lcd.locate(11,0); 
00248                         lcd.printf("     ");
00249                         lcd.locate(11,0);
00250                         lcd.printf("%d",j);
00251                      }//2.1    
00252                         if(b3.read()==0 && g>=25 && g<50)
00253                         {//2.2
00254                             g=g+1;
00255                             j=j-5;
00256                             wait(0.2);
00257                             lcd.locate(11,0);
00258                             lcd.printf("     ");                                                           
00259                             lcd.locate(11,0);
00260                             lcd.printf("%d",j); 
00261                         }//2.2
00262                         
00263                         if(b3.read()==0 && g>=50 && g<75)
00264                         {//2.3
00265                             g=g+1;
00266                             j=j-10;
00267                             wait(0.2);
00268                             lcd.locate(11,0);
00269                             lcd.printf("     ");                                                           
00270                             lcd.locate(11,0);
00271                             lcd.printf("%d",j); 
00272                         }//2.3
00273                         
00274                         if(b3.read()==0 && g>=75 && g<100)
00275                         {//2.4
00276                             g=g+1;
00277                             j=j-100;
00278                             wait(0.2);
00279                             lcd.locate(11,0); 
00280                             lcd.printf("     ");                                                        
00281                             lcd.locate(11,0);
00282                             lcd.printf("%d",j); 
00283                         }//2.4           
00284                         if(b3.read()==0 && g>=100 && g<125)
00285                         {//2.5
00286                             g=g-1;
00287                             j=j-1000;
00288                             wait(0.2);
00289                             lcd.locate(11,0);
00290                             lcd.printf("     ");                                                            
00291                             lcd.locate(11,0);
00292                             lcd.printf("%d",j); 
00293                         }//2.5  
00294                         if(j<0)
00295                            {//2.6
00296                                 j=0;
00297                                 lcd.locate(11,0);
00298                                 lcd.printf("     ");
00299                                 lcd.locate(11,0);
00300                                 lcd.printf("%d",j); 
00301                             }//2.6 
00302     
00303      
00304     }//b
00305     
00306     if(x==3)
00307     {//c
00308       lcd.locate(3,1);
00309       lcd.printf("%d",m);
00310               if(b1.read()==1)
00311         {
00312         n=0;
00313         }
00314             if(b1.read()==0 && n<25)
00315             {//1.1
00316                 n=n+1;
00317                 m=m+1;
00318                 wait(0.2);
00319                 lcd.locate(3,1);
00320                 lcd.printf("%d",m);
00321              }//1.1    
00322                 if(b1.read()==0 && n>=25 && n<50)
00323                 {//1.2
00324                     n=n+1;
00325                     m=m+5;
00326                     wait(0.2);
00327                     lcd.locate(3,1);
00328                     lcd.printf("%d",m); 
00329                 }//1.2
00330                 
00331                 if(b1.read()==0 && n>=50 && n<75)
00332                 {//1.3
00333                     n=n+1;
00334                     m=m+10;
00335                     wait(0.2);
00336                     lcd.locate(3,1);
00337                     lcd.printf("%d",m); 
00338                 }//1.3
00339                 
00340                 if(b1.read()==0 && n>=75 && n<100)
00341                 {//1.4
00342                     n=n+1;
00343                     m=m+100;
00344                     wait(0.2);
00345                     lcd.locate(3,1);
00346                     lcd.printf("%d",m); 
00347                 }//1.4           
00348                 if(b1.read()==0 && n>=100 && n<125)
00349                 {//1.5
00350                     n=n+1;
00351                     m=m+1000;
00352                     wait(0.2);
00353                     lcd.locate(3,1);
00354                     lcd.printf("%d",m); 
00355                     if(m>9999)
00356                     {//1.5.1
00357                         m=9999;
00358                         lcd.locate(3,1);
00359                         lcd.printf("     ");
00360                         lcd.locate(3,1);
00361                         lcd.printf("%d",m); 
00362                     }//1.5.1
00363                 }//1.5  
00364                 //Descenso
00365         if(b3.read()==1)
00366         {
00367         q=0;
00368         }
00369                    if(b3.read()==0 && q<25)
00370                     {//2.1
00371                         q=q+1;
00372                         m=m-1;
00373                         wait(0.2);
00374                         lcd.locate(3,1); 
00375                         lcd.printf("     ");
00376                         lcd.locate(3,1);
00377                         lcd.printf("%d",m);
00378                      }//2.1    
00379                         if(b3.read()==0 && q>=25 && q<50)
00380                         {//2.2
00381                             q=q+1;
00382                             m=m-5;
00383                             wait(0.2);
00384                             lcd.locate(3,1);
00385                             lcd.printf("     ");                                                           
00386                             lcd.locate(3,1);
00387                             lcd.printf("%d",m); 
00388                         }//2.2
00389                         
00390                         if(b3.read()==0 && q>=50 && q<75)
00391                         {//2.3
00392                             q=q+1;
00393                             m=m-10;
00394                             wait(0.2);
00395                             lcd.locate(3,1);
00396                             lcd.printf("     ");                                                           
00397                             lcd.locate(3,1);
00398                             lcd.printf("%d",m); 
00399                         }//2.3
00400                         
00401                         if(b3.read()==0 && q>=75 && q<100)
00402                         {//2.4
00403                             q=q+1;
00404                             m=m-100;
00405                             wait(0.2);
00406                             lcd.locate(3,1); 
00407                             lcd.printf("     ");                                                        
00408                             lcd.locate(3,1);
00409                             lcd.printf("%d",m); 
00410                         }//2.4           
00411                         if(b3.read()==0 && q>=100 && q<125)
00412                         {//2.5
00413                             q=q+1;
00414                             m=m-1000;
00415                             wait(0.2);
00416                             lcd.locate(3,1);
00417                             lcd.printf("     ");                                                            
00418                             lcd.locate(3,1);
00419                             lcd.printf("%d",m); 
00420                         }//2.5  
00421                         if(m<0)
00422                            {//2.6
00423                                 m=0;
00424                                 lcd.locate(3,1);
00425                                 lcd.printf("     ");
00426                                 lcd.locate(3,1);
00427                                 lcd.printf("%d",m); 
00428                             }//2.6                  
00429       
00430     }//c
00431     
00432     if(x==4)
00433     {//d
00434     lcd.locate(11,1);
00435     lcd.printf("%d",o);
00436     
00437               if(b1.read()==1)
00438         {
00439         n=0;
00440         }
00441             if(b1.read()==0 && p<25)
00442             {//1.1
00443                 p=p+1;
00444                 o=o+1;
00445                 wait(0.2);
00446                 lcd.locate(11,1);
00447                 lcd.printf("%d",o);
00448              }//1.1    
00449                 if(b1.read()==0 && p>=25 && p<50)
00450                 {//1.2
00451                     p=p+1;
00452                     o=o+5;
00453                     wait(0.2);
00454                     lcd.locate(11,1);
00455                     lcd.printf("%f",o); 
00456                 }//1.2
00457                 
00458                 if(b1.read()==0 && p>=50 && p<75)
00459                 {//1.3
00460                     p=p+1;
00461                     o=o+10;
00462                     wait(0.2);
00463                     lcd.locate(11,1);
00464                     lcd.printf("%d",o); 
00465                 }//1.3
00466                 
00467                 if(b1.read()==0 && p>=75 && p<100)
00468                 {//1.4
00469                     p=p+1;
00470                     o=o+100;
00471                     wait(0.2);
00472                     lcd.locate(11,1);
00473                     lcd.printf("%d",o); 
00474                 }//1.4           
00475                 if(b1.read()==0 && p>=100 && p<125)
00476                 {//1.5
00477                     p=p+1;
00478                     o=o+1000;
00479                     wait(0.2);
00480                     lcd.locate(11,1);
00481                     lcd.printf("%d",o); 
00482                     if(o>9999)
00483                     {//1.5.1
00484                         o=9999;
00485                         lcd.locate(11,1);
00486                         lcd.printf("     ");
00487                         lcd.locate(11,1);
00488                         lcd.printf("%d",o); 
00489                     }//1.5.1
00490                 }//1.5  
00491                 //Descenso
00492         if(b3.read()==1)
00493         {
00494         h=0;
00495         }
00496                    if(b3.read()==0 && h<25)
00497                     {//2.1
00498                         h=h+1;
00499                         o=o-1;
00500                         wait(0.2);
00501                         lcd.locate(11,1); 
00502                         lcd.printf("     ");
00503                         lcd.locate(11,1);
00504                         lcd.printf("%d",o);
00505                      }//2.1    
00506                         if(b3.read()==0 && h>=25 && h<50)
00507                         {//2.2
00508                             h=h+1;
00509                             o=o-5;
00510                             wait(0.2);
00511                             lcd.locate(11,1);
00512                             lcd.printf("     ");                                                           
00513                             lcd.locate(11,1);
00514                             lcd.printf("%d",o); 
00515                         }//2.2
00516                         
00517                         if(b3.read()==0 && h>=50 && h<75)
00518                         {//2.3
00519                             h=h+1;
00520                             o=o-10;
00521                             wait(0.2);
00522                             lcd.locate(11,1);
00523                             lcd.printf("     ");                                                           
00524                             lcd.locate(11,1);
00525                             lcd.printf("%d",o); 
00526                         }//2.3
00527                         
00528                         if(b3.read()==0 && h>=75 && h<100)
00529                         {//2.4
00530                             h=h+1;
00531                             o=o-100;
00532                             wait(0.2);
00533                             lcd.locate(11,1); 
00534                             lcd.printf("     ");                                                        
00535                             lcd.locate(11,1);
00536                             lcd.printf("%d",o); 
00537                         }//2.4           
00538                         if(b3.read()==0 && h>=100 && h<125)
00539                         {//2.5
00540                             h=h+1;
00541                             o=o-1000;
00542                             wait(0.2);
00543                             lcd.locate(11,1);
00544                             lcd.printf("     ");                                                            
00545                             lcd.locate(11,1);
00546                             lcd.printf("%d",o); 
00547                         }//2.5  
00548                         if(o<0)
00549                            {//2.6
00550                                 o=0;
00551                                 lcd.locate(11,1);
00552                                 lcd.printf("     ");
00553                                 lcd.locate(11,1);
00554                                 lcd.printf("%d",o); 
00555                             }//2.6   
00556     }//d
00557     
00558             if(x>4)
00559             {
00560                    x=1;
00561             }
00562     if(b4.read()==0)
00563     {
00564     
00565    
00566     goto PID;
00567     }
00568     }//while1
00569     
00570     PID:
00571      
00572         wait(0.5); // espera 1 segundo
00573         lcd.cls();      // borra lcd
00574         wait(0.2);
00575         lcd.printf("DATOS GUARDADOS!");
00576         wait(1);
00577         lcd.cls();
00578       
00579            lcd.locate(0,0);
00580            lcd.printf("Er:");
00581            lcd.locate(8,0);
00582            lcd.printf("Me:");        
00583            lcd.locate(0,1);
00584            lcd.printf("Sp:");
00585            lcd.locate(8,1);
00586            lcd.printf("CO:");  
00587            
00588     while(1)
00589     {//whilePID
00590     wait(0.1);         
00591                    sp=i;
00592                    kp=j;
00593                    kd=m;
00594                    ki=o;
00595            
00596            Sp=(sp*3.3)/100;
00597                med=Vin*3.3;
00598                err = (Sp-med);
00599                ap = kp*err;
00600                ai =(ki*err)+ai;
00601 
00602                ad = kd*(err-err_v);
00603            pid = (ap+ai+ad);
00604              if  (pid<0)
00605            {
00606             pid=0;
00607            }
00608            if (pid>99)
00609            {
00610              pid=100;
00611            }
00612            
00613            Vo=pid/100;
00614                        
00615                                            
00616                                 lcd.locate(3,0);
00617                                 lcd.printf("     ");            
00618            lcd.locate(3,0);
00619            lcd.printf("%.1f",err);
00620                                 lcd.locate(11,0);
00621                                 lcd.printf("     ");            
00622            lcd.locate(11,0);
00623            lcd.printf("%.1f",med);
00624                                 lcd.locate(3,1);
00625                                 lcd.printf("     "); 
00626            lcd.locate(3,1);
00627            lcd.printf("%.1f",Sp);
00628                                 lcd.locate(11,1);
00629                                 lcd.printf("     ");            
00630            lcd.locate(11,1);
00631            lcd.printf("%.1f",pid);
00632            
00633                 err_v = err;
00634     }//whilePID
00635     }//main