LCD Connection
Fork of PID_encoder by
Diff: main.cpp
- Revision:
- 1:954623d16310
- Parent:
- 0:40599894595a
- Child:
- 2:81e45f6f6410
--- a/main.cpp Wed Oct 28 02:13:14 2015 +0000 +++ b/main.cpp Thu Sep 29 16:48:52 2016 +0000 @@ -1,240 +1,12 @@ #include "mbed.h" #include "TextLCD.h"// nos permite usar el lcd en nuestro comando -#include "DebouncedIn.h" // esta libreria es útil para podeer declarar todas las teclas o botones que se posean -#include "QEI.h" // nos permite utilizar el encoder -TextLCD lcd(PTE0, PTE1, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7 Teclado -QEI wheel (PTD5, PTD0, NC, 100); -//asignamos el puerto a cada interruptor -DebouncedIn button1(PTC12); //Aumentar -DebouncedIn button2(PTC13); //Decrementar -DebouncedIn button3(PTC16); //Pasar -DebouncedIn button4(PTC17); //inicio - -// asignamos los pines a la salida y a la entrada (analógicas) -AnalogIn y(PTB1); // Salida de la planta -AnalogOut u(PTE30); // Señal de control - -//Salidas digitales utilziadas para la comprobación del funcionamiento - -DigitalOut led1(LED1); -DigitalOut led2(LED2); -DigitalOut led3(LED3); -Timer t;// nos permite saber cuanto tiempo permanecen presionados los botones asociados al aumento y al decremento -int j; -int i; -int C1=0x0F; // inicializamos el lcd y el tipo de formato que este ultizará -int sp=0,kp=0,kd=0,ki=0,p=1; // condiciones iniciales de los parametros de controlador. NOTA: la variable p indica en que se parametro se desea intervenir (kp,ki,kd,sp, pasar e iniciar) -float ap, ai, ad, err, med, err_v, pid=0; // +TextLCD lcd(PTE0, PTE1, PTE2, PTE3, PTE4, PTE5, TextLCD::LCD16x2B); // rs, e, d4-d7 Teclado +//asignamos el puerto a cada interruptor int main() { - lcd.writeCommand(C1); - lcd.printf(" Controlador PID\n"); - wait(2); - lcd.cls(); - lcd.printf(" Equipo_5:\nEliana Mejia E."); - wait(2); - lcd.cls(); - lcd.printf("Sebastian Quintero Z. Sebastian Vergara P"); - wait(2); - lcd.cls(); - lcd.printf(" Ingresar Parametros "); - wait(2); - - retorno: //Cuando se presiona por segunda vez el botón 4 se retorna a la interfaz de parametros para modificarlos - p=1; - 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) { - - led3 =1; - if (button3.falling()) { //INCREMENTA POSICION DEL MENU CON BOTON 3 (Switche encoder) - led3 =!led3; - ++j; - } - - if (j==0){ - sp=sp+wheel.getPulses(); - wheel.reset(); - if (sp>999){ - sp=999; - } - if (sp<0){ - sp=0; - } - lcd.locate(2,0); - lcd.printf(" ",sp); - lcd.locate(2,0); - lcd.printf("%d",sp); - wait(0.2); - - if(button3.falling()){ - j=1; - led3=0; - wait(0.3); - wheel.reset(); - } - - } - - if (j==1) { - kp=kp+wheel.getPulses(); - wheel.reset(); - if (kp>999){ - kp=999; - } - if (kp<0){ - kp=0; - } - lcd.locate(10,0); - lcd.printf(" "); - lcd.locate(10,0); - lcd.printf("%d",kp); - wait(0.2); - - if(button3.falling()){ - j=2; - led3=0; - wait(0.3); - wheel.reset(); - } - - } - - if (j==2) { - ki=ki+wheel.getPulses(); - wheel.reset(); - if (ki>999){ - ki=999; - } - if (ki<0){ - ki=0; - } - lcd.locate(2,1); - lcd.printf(" "); - lcd.locate(2,1); - lcd.printf("%d",ki); - wait(0.2); - - if(button3.falling()){ - j=3; - led3=0; - wait(0.3); - wheel.reset(); - } - - } - - if (j==3) { - kd=kd+wheel.getPulses(); - wheel.reset(); - if (kd>999){ - kd=999; - } - if (kd<0){ - kd=0; - } - lcd.locate(10,1); - lcd.printf(" "); - lcd.locate(10,1); - lcd.printf("%d",kd); - wait(0.2); - - if(button3.falling()){ - j=0; - led3=0; - wait(0.3); - wheel.reset(); - } - - } - - if (j==4) { - j=0; - } - - if (!button4){ - break; //sale del bucle si pisan suiche4 - } - } //cierro while(1) -//%--------------------------------------------------------------------- - // accionamiento del botón asociado al inicio del programa realizado - - - - // se imprimen los parches del control ***************************************** - 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(1); - - - - p=0; - if(p==0){ - lcd.cls();// limpia la pantalla y la localiza en (0,0) - lcd.printf("Iniciando PID\n"); - wait(1); - while(1){ //si se presiona por segunda vez es para modificar los parámetros - - - med=5*y.read(); // las constantes por la cuál se amplifica la señal dependen del sistema que se desee controlar y en donde lo deseamos limitar - err=sp-med; // error del sistema - ap = kp*err; - - // se verifica que la accion integral no sea muy grande - - if(ai<5) - { - ai =(ki*err)+ai; //calculo de la integral del error - } - ad = kd*(err-err_v); //calculo de la acción derivativa - pid = (ap+ai+ad); - - // se verifica que pid sea positivo ************************************** - if(pid<=0){pid=0;} - - // se verifica que pid sea menor o igual l valor maximo ***************** - - if(pid>=5){pid=5;} - u.write(pid); // enviamos el valor de PID al puerto analógico de salida - t.start(); - - if(t>=1) - { - lcd.cls(); //limpiamos la pantalla del lcd - lcd.writeCommand(C1);//escribimos un comando segun el manual del modulo LCD en este caso modulo 1 - lcd.locate(8,0); - lcd.printf("Err=%0.1f", err); - lcd.locate(0,1); - lcd.printf("Med=%0.1f", med); - lcd.locate(8,1); - lcd.printf("PID=%0.1f", pid); - lcd.locate(0,0); - lcd.printf("Sp=%d", sp); - - t.reset(); - - } - } - - - } + lcd.printf("Lopez GAY\n"); }