se incrementa y decrementa parámetros con el encoder.

Dependencies:   QEI TextLCD mbed

Fork of TAREA_4_PROCESADORES by john lopez

Committer:
jana
Date:
Fri May 23 18:31:15 2014 +0000
Revision:
2:fba5e2ee8bee
Parent:
1:9ca362d07dd0
encoder_procesadores

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Wilmar87 0:dd68101b1b99 1 #include "mbed.h"
Wilmar87 0:dd68101b1b99 2 #include "TextLCD.h"
Wilmar87 0:dd68101b1b99 3 #include "DebouncedIn.h"
Wilmar87 0:dd68101b1b99 4 #include "QEI.h"
Wilmar87 0:dd68101b1b99 5
Wilmar87 0:dd68101b1b99 6 AnalogIn Vin(PTC2);
Wilmar87 0:dd68101b1b99 7 AnalogOut Vout(PTE30);
jana 2:fba5e2ee8bee 8 PwmOut Pwm(PTA5);
jana 2:fba5e2ee8bee 9 float p1 = 0.001;
jana 2:fba5e2ee8bee 10
jana 2:fba5e2ee8bee 11 int PWMmodule(float p1)
jana 2:fba5e2ee8bee 12 {
jana 2:fba5e2ee8bee 13 Pwm.period(p1);
jana 2:fba5e2ee8bee 14 Pwm.write(0.1);
jana 2:fba5e2ee8bee 15 wait(0.1);
jana 2:fba5e2ee8bee 16 Pwm.write(1);
jana 2:fba5e2ee8bee 17 wait(0.1);
jana 2:fba5e2ee8bee 18 Pwm.write(0.5);
jana 2:fba5e2ee8bee 19 wait(0.1);
jana 2:fba5e2ee8bee 20 Pwm.write(2);
jana 2:fba5e2ee8bee 21 wait(0.1);
jana 2:fba5e2ee8bee 22 Pwm.write(0.01);
jana 2:fba5e2ee8bee 23 wait(0.1);
jana 2:fba5e2ee8bee 24 Pwm.write(0.001);
jana 2:fba5e2ee8bee 25 wait(0.1);
jana 2:fba5e2ee8bee 26 Pwm.write(0);
jana 2:fba5e2ee8bee 27 return 0;
jana 2:fba5e2ee8bee 28 }
Wilmar87 0:dd68101b1b99 29
Wilmar87 0:dd68101b1b99 30 TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); //Puertos LCD rs, e, d4, d5, d6, d7
jana 2:fba5e2ee8bee 31 QEI encoder (PTD7, PTD6, NC, 624); //Puertos de la tarjeta asignados para el Encoder
Wilmar87 0:dd68101b1b99 32
jana 2:fba5e2ee8bee 33 DigitalOut led1(LED1);
jana 2:fba5e2ee8bee 34 DigitalOut led2(LED2);
jana 2:fba5e2ee8bee 35 DigitalOut led3(LED3);
jana 2:fba5e2ee8bee 36 DebouncedIn boton_encoder(PTC5); //cambiar la posición- EL BOTON DEL ENCODER
jana 2:fba5e2ee8bee 37
Wilmar87 0:dd68101b1b99 38
Wilmar87 0:dd68101b1b99 39 //Códigos LCD
jana 2:fba5e2ee8bee 40 int C2=0x18; // desplaza izquierda
jana 2:fba5e2ee8bee 41 int C3=0x1A; // desplaza derecha
jana 2:fba5e2ee8bee 42 int C4=0x0C; // quito cursor bajo
jana 2:fba5e2ee8bee 43 int C1=0x0E; // Muestra el cursor
Wilmar87 0:dd68101b1b99 44
Wilmar87 0:dd68101b1b99 45
jana 2:fba5e2ee8bee 46
jana 2:fba5e2ee8bee 47 int s, kp, ki, kd, sp, dato, spmax, kpmax, kimax, kdmax; // declaracion de variables
jana 2:fba5e2ee8bee 48
Wilmar87 0:dd68101b1b99 49
Wilmar87 0:dd68101b1b99 50
Wilmar87 0:dd68101b1b99 51
Wilmar87 0:dd68101b1b99 52 int main() {
Wilmar87 0:dd68101b1b99 53
jana 2:fba5e2ee8bee 54 // Ubica e imprime nombre de los parámetros en del PID en la pantalla LCD
Wilmar87 0:dd68101b1b99 55 lcd.cls();
jana 2:fba5e2ee8bee 56 lcd.writeCommand(C1); //comando para mostrar el cursor en el LCD
jana 2:fba5e2ee8bee 57 lcd.locate(2,0);
Wilmar87 0:dd68101b1b99 58 lcd.printf("Sp=");
jana 2:fba5e2ee8bee 59 lcd.locate(10,0);
Wilmar87 0:dd68101b1b99 60 lcd.printf("Kp=");
jana 2:fba5e2ee8bee 61 lcd.locate(2,1);
Wilmar87 0:dd68101b1b99 62 lcd.printf("Ki=");
jana 2:fba5e2ee8bee 63 lcd.locate(10,1);
Wilmar87 0:dd68101b1b99 64 lcd.printf("Kd=");
Wilmar87 0:dd68101b1b99 65
Wilmar87 0:dd68101b1b99 66
Wilmar87 0:dd68101b1b99 67 //Inicio del ciclo
Wilmar87 0:dd68101b1b99 68
Wilmar87 0:dd68101b1b99 69 while(1) {
jana 2:fba5e2ee8bee 70 if (boton_encoder.falling()) { //Detecta el aumento y disminucion del valor del encoder
lopjohn_26 1:9ca362d07dd0 71
jana 2:fba5e2ee8bee 72 PWMmodule(p1);
jana 2:fba5e2ee8bee 73 encoder.reset();
jana 2:fba5e2ee8bee 74 ++s;
jana 2:fba5e2ee8bee 75 if (s>=3){
jana 2:fba5e2ee8bee 76 s=0;
jana 2:fba5e2ee8bee 77 }
Wilmar87 0:dd68101b1b99 78 }
Wilmar87 0:dd68101b1b99 79
jana 2:fba5e2ee8bee 80 dato = encoder.getPulses(); //Asigna el valor de los pulsos del encoder a una variable
jana 2:fba5e2ee8bee 81
jana 2:fba5e2ee8bee 82
jana 2:fba5e2ee8bee 83
jana 2:fba5e2ee8bee 84 switch(s) {
Wilmar87 0:dd68101b1b99 85
Wilmar87 0:dd68101b1b99 86 case 0:
jana 2:fba5e2ee8bee 87
jana 2:fba5e2ee8bee 88 spmax=sp+dato;
Wilmar87 0:dd68101b1b99 89
jana 2:fba5e2ee8bee 90 if(spmax>=999){
jana 2:fba5e2ee8bee 91
jana 2:fba5e2ee8bee 92 lcd.locate(4,0);
Wilmar87 0:dd68101b1b99 93 lcd.printf("= ",sp);
jana 2:fba5e2ee8bee 94 lcd.locate(5,0);
Wilmar87 0:dd68101b1b99 95 lcd.printf("%i",sp);
jana 2:fba5e2ee8bee 96 }
jana 2:fba5e2ee8bee 97 else {
jana 2:fba5e2ee8bee 98 sp = sp + dato;
jana 2:fba5e2ee8bee 99 encoder.reset();
jana 2:fba5e2ee8bee 100 if (sp<0){
jana 2:fba5e2ee8bee 101 sp=0;
jana 2:fba5e2ee8bee 102 }
jana 2:fba5e2ee8bee 103 lcd.locate(4,0);
jana 2:fba5e2ee8bee 104 lcd.printf("= ",sp);
jana 2:fba5e2ee8bee 105 lcd.locate(5,0);
jana 2:fba5e2ee8bee 106 lcd.printf("%i",sp);
jana 2:fba5e2ee8bee 107 }
jana 2:fba5e2ee8bee 108 if (boton_encoder.falling()) {
lopjohn_26 1:9ca362d07dd0 109
jana 2:fba5e2ee8bee 110 PWMmodule(p1);
lopjohn_26 1:9ca362d07dd0 111
jana 2:fba5e2ee8bee 112 s=1;
Wilmar87 0:dd68101b1b99 113 led1=0;
Wilmar87 0:dd68101b1b99 114 wait(.15);
Wilmar87 0:dd68101b1b99 115 led1=1;
jana 2:fba5e2ee8bee 116 encoder.reset();
Wilmar87 0:dd68101b1b99 117 }
jana 2:fba5e2ee8bee 118 break;
jana 2:fba5e2ee8bee 119
jana 2:fba5e2ee8bee 120 case 1:
jana 2:fba5e2ee8bee 121
jana 2:fba5e2ee8bee 122 kpmax=kp+dato;
Wilmar87 0:dd68101b1b99 123
jana 2:fba5e2ee8bee 124 if(kpmax>=999){
jana 2:fba5e2ee8bee 125
jana 2:fba5e2ee8bee 126 lcd.locate(12,0);
jana 2:fba5e2ee8bee 127 lcd.printf("= ",kp);
jana 2:fba5e2ee8bee 128 lcd.locate(13,0);
jana 2:fba5e2ee8bee 129 lcd.printf("%i",kp);
jana 2:fba5e2ee8bee 130 }
jana 2:fba5e2ee8bee 131 else {
jana 2:fba5e2ee8bee 132
jana 2:fba5e2ee8bee 133 kp = kp + dato;
jana 2:fba5e2ee8bee 134 encoder.reset();
jana 2:fba5e2ee8bee 135 if (kp<0){
jana 2:fba5e2ee8bee 136 kp=0;
jana 2:fba5e2ee8bee 137 }
Wilmar87 0:dd68101b1b99 138
jana 2:fba5e2ee8bee 139 lcd.locate(12,0);
jana 2:fba5e2ee8bee 140 lcd.printf("= ",kp);
jana 2:fba5e2ee8bee 141 lcd.locate(13,0);
jana 2:fba5e2ee8bee 142 lcd.printf("%i",kp);
jana 2:fba5e2ee8bee 143 }
jana 2:fba5e2ee8bee 144 if (boton_encoder.falling()) {
jana 2:fba5e2ee8bee 145
jana 2:fba5e2ee8bee 146 PWMmodule(p1);
jana 2:fba5e2ee8bee 147
jana 2:fba5e2ee8bee 148 s=2;
jana 2:fba5e2ee8bee 149 led2=0;
jana 2:fba5e2ee8bee 150 wait(.15);
jana 2:fba5e2ee8bee 151 led2=1;
jana 2:fba5e2ee8bee 152 encoder.reset();
jana 2:fba5e2ee8bee 153 }
jana 2:fba5e2ee8bee 154 break;
jana 2:fba5e2ee8bee 155
jana 2:fba5e2ee8bee 156 case 2:
jana 2:fba5e2ee8bee 157
jana 2:fba5e2ee8bee 158 kimax=ki+dato;
Wilmar87 0:dd68101b1b99 159
jana 2:fba5e2ee8bee 160 if(kimax>=999){
jana 2:fba5e2ee8bee 161
jana 2:fba5e2ee8bee 162 lcd.locate(4,1);
jana 2:fba5e2ee8bee 163 lcd.printf("= ",ki);
jana 2:fba5e2ee8bee 164 lcd.locate(5,1);
jana 2:fba5e2ee8bee 165 lcd.printf("%i",ki);
jana 2:fba5e2ee8bee 166 }
jana 2:fba5e2ee8bee 167 else {
jana 2:fba5e2ee8bee 168 ki = ki + dato; //Asigna el valor del encoder al parámetro y tiene en cuenta el valor anterior
jana 2:fba5e2ee8bee 169 encoder.reset(); //Resetea el valor del encoder
jana 2:fba5e2ee8bee 170 if (ki<0){
jana 2:fba5e2ee8bee 171 ki=0; //No se muestran valores negativos
jana 2:fba5e2ee8bee 172 }
jana 2:fba5e2ee8bee 173
jana 2:fba5e2ee8bee 174 lcd.locate(4,1);
jana 2:fba5e2ee8bee 175 lcd.printf("= ",ki);
jana 2:fba5e2ee8bee 176 lcd.locate(5,1);
jana 2:fba5e2ee8bee 177 lcd.printf("%i",ki);
jana 2:fba5e2ee8bee 178 }
jana 2:fba5e2ee8bee 179 if (boton_encoder.falling()) { //Aumenta de posición el cursor a la siguiente parametro
jana 2:fba5e2ee8bee 180
jana 2:fba5e2ee8bee 181 PWMmodule(p1);
jana 2:fba5e2ee8bee 182
jana 2:fba5e2ee8bee 183 s=3;
jana 2:fba5e2ee8bee 184 led3=0;
jana 2:fba5e2ee8bee 185 wait(.15);
jana 2:fba5e2ee8bee 186 led3=1;
jana 2:fba5e2ee8bee 187 encoder.reset(); //------------- Resetea el valor del encoder
jana 2:fba5e2ee8bee 188 }
jana 2:fba5e2ee8bee 189 break;
jana 2:fba5e2ee8bee 190
jana 2:fba5e2ee8bee 191 case 3:
jana 2:fba5e2ee8bee 192
jana 2:fba5e2ee8bee 193 kdmax=kd+dato;
jana 2:fba5e2ee8bee 194
jana 2:fba5e2ee8bee 195 if(kdmax>=999){
jana 2:fba5e2ee8bee 196
jana 2:fba5e2ee8bee 197 lcd.locate(12,1);
jana 2:fba5e2ee8bee 198 lcd.printf("= ",kd);
jana 2:fba5e2ee8bee 199 lcd.locate(13,1);
jana 2:fba5e2ee8bee 200 lcd.printf("%i",kd);
jana 2:fba5e2ee8bee 201 }
jana 2:fba5e2ee8bee 202 else {
jana 2:fba5e2ee8bee 203 kd = kd + dato;
jana 2:fba5e2ee8bee 204 encoder.reset();
jana 2:fba5e2ee8bee 205 if (kd<0){
jana 2:fba5e2ee8bee 206 kd=0;
jana 2:fba5e2ee8bee 207 }
jana 2:fba5e2ee8bee 208
jana 2:fba5e2ee8bee 209 lcd.locate(12,1);
jana 2:fba5e2ee8bee 210 lcd.printf("= ",kd);
jana 2:fba5e2ee8bee 211 lcd.locate(13,1);
jana 2:fba5e2ee8bee 212 lcd.printf("%i",kd);
jana 2:fba5e2ee8bee 213 }
jana 2:fba5e2ee8bee 214 if (boton_encoder.falling()) {
jana 2:fba5e2ee8bee 215
jana 2:fba5e2ee8bee 216 PWMmodule(p1);
jana 2:fba5e2ee8bee 217
jana 2:fba5e2ee8bee 218 s=4;
jana 2:fba5e2ee8bee 219 led1=0;
jana 2:fba5e2ee8bee 220 wait(.15);
jana 2:fba5e2ee8bee 221 led1=1;
jana 2:fba5e2ee8bee 222 encoder.reset();
jana 2:fba5e2ee8bee 223
jana 2:fba5e2ee8bee 224 }
jana 2:fba5e2ee8bee 225 break;
jana 2:fba5e2ee8bee 226 }
jana 2:fba5e2ee8bee 227 }
Wilmar87 0:dd68101b1b99 228
Wilmar87 0:dd68101b1b99 229 }
Wilmar87 0:dd68101b1b99 230