Permite la configuración de los parámetros Kp, Ki Kd y Sp en un Display LCD 16x2 en un teclado matricial 4x4.

Dependencies:   TextLCD keypad mbed

Revision:
0:626b11d510b7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue May 17 16:54:56 2016 +0000
@@ -0,0 +1,171 @@
+#include "mbed.h"
+#include "TextLCD.h"
+#include "Keypad.h"
+ 
+TextLCD lcd(PTC9, PTC8, PTA5, PTA4, PTA12, PTD4); // rs, e, d4-d7
+int long g=0,p=0,i=0,d=0,s=0,chan=0,num=0;
+int c=1,b=1,a=15,uno=0,dos=0,tre=0,cua=0,aux=0,jod=0,pla=0,aste=0; 
+
+ int   Keytable[] = { 1, 2, 3, 10,   // r0
+                      4, 5, 6, 11,   // r1
+                      7, 8, 9, 12,   // r2
+                      20,0, 21, 13    // r3
+                    };
+ 
+ 
+ uint32_t cbAfterInput(uint32_t index) {
+        a = index;
+      return 0;
+  }
+  
+       void limpiar()
+      {
+      c=1,a=15,uno=0,dos=0,tre=0,cua=0,aux=0,b=1,jod=0,pla=0;
+      }
+ 
+  void nds()
+ {
+    if(aste==0){lcd.locate((3+aux),0);}
+    if(aste==1){lcd.locate((11+aux),0);}
+    if(aste==2){lcd.locate((3+aux),1);}
+    if(aste==3){lcd.locate((11+aux),1);} 
+ }
+ 
+      void mostrar ()                                                            
+      {
+      lcd.locate(0,0);                                                           
+      lcd.printf("Kp=%Ld", p);                                      
+      lcd.locate(8,0);                                                          
+      lcd.printf("Ki=%Ld", i);  
+      lcd.locate(0,1); 
+      lcd.printf("Kd=%Ld", d);
+      lcd.locate(8,1); 
+      lcd.printf("Sp=%Ld", s);
+      }     
+ 
+       void titi()
+      {
+      jod++;
+      if(jod<=1000){
+      nds();     
+      lcd.printf ("_");
+      }
+      if(jod>=2000){
+      nds();  
+      lcd.printf ("%Ld",chan);
+      }
+      if(jod==3000){jod=0;}
+      }
+ 
+ 
+ int long numero()
+{
+   while(b==1&&c==1)
+   {
+   titi();   
+   nds();
+   lcd.printf("%Ld",chan);
+   if(Keytable[a]==21){
+   aux++;
+   if(aux==4){c=0;aux=3;}
+   a=15;
+   chan=0;}
+ 
+   if(Keytable[a]==10){b=0;chan=0;}
+   if(Keytable[a]!=10&&Keytable[a]!=11&&Keytable[a]!=12&&Keytable[a]!=13&&Keytable[a]!=20&&Keytable[a]!=21&&a!=15)
+   {
+   chan=Keytable[a];
+      nds();     
+      lcd.printf ("%Ld",chan);  
+   if(chan==50){chan=0;}
+   switch(aux){  
+   case  0:uno=chan;
+   break;
+   case  1:dos=chan;
+   break;
+   case  2:tre=chan;
+   break;
+   case  3:cua=chan;
+   break;
+   default : a=15;
+   }
+  
+   a=15;
+
+   }
+   }
+   aux=aux;
+   switch(aux)
+   {
+   case  0:
+   uno=uno;
+   break;
+   case  1:
+   uno=uno*10;dos=dos;
+   break;
+   case  2:
+   uno=uno*100;dos=dos*10;tre=tre;
+   break;
+   case  3:
+   uno=uno*1000;dos=dos*100;tre=tre*10;cua=cua;   
+   break;
+   default : aux=0;
+   }
+   num=uno+dos+tre+cua;
+   aux=0;
+return(num);
+}
+ 
+ 
+int main() {
+                    // r0   r1   r2   r3   c0   c1   c2   c3
+      Keypad keypad(PTC11, PTC10, PTC6, PTC5, PTC4, PTC3, PTC0, PTC7);
+      keypad.attach(&cbAfterInput);
+      keypad.start();  // energize the keypad via c0-c3
+      mostrar();
+        
+        while(1)
+            {
+            
+            if(Keytable[a]==10)
+            {
+            if(aste==4){aste=0;}
+                        
+            switch(aste)
+            {                                                        
+            
+            case  0:limpiar();
+            lcd.locate(3,0);                                                           
+            lcd.printf("     "); 
+            p=numero(); 
+            mostrar();
+            break;
+            
+            case  1:limpiar();
+            lcd.locate(11,0);                                                           
+            lcd.printf("     ");             
+            i=numero();
+            mostrar();
+            
+            break;
+            
+            case  2:limpiar();
+            lcd.locate(3,1);                                                           
+            lcd.printf("     "); 
+            d=numero();
+            mostrar();
+            break;
+            
+            case  3:limpiar();
+            lcd.locate(11,1);                                                           
+            lcd.printf("     "); 
+            s=numero();
+            mostrar();
+            break;  
+            }
+            
+            aste++;
+            }
+            
+            }
+}
\ No newline at end of file