d

Dependencies:   Debounced TextLCD mbed

Revision:
0:1fe45e27a3c7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Dec 12 20:41:26 2013 +0000
@@ -0,0 +1,175 @@
+#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;           
+          
+           }
+}