Hugo Ferney Devia Romero / Mbed 2 deprecated Piccolo3Completo

Dependencies:   mbed

Committer:
Devia
Date:
Sat May 12 16:08:38 2018 +0000
Revision:
0:95fc72d3426c
Piccolo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Devia 0:95fc72d3426c 1 #include "mbed.h"
Devia 0:95fc72d3426c 2
Devia 0:95fc72d3426c 3 #define POSMAX 50 // en milimetros
Devia 0:95fc72d3426c 4 #define POSDRAW 30 // en milimetros
Devia 0:95fc72d3426c 5 #define BAUD 9600 // Configuracion de baudios
Devia 0:95fc72d3426c 6
Devia 0:95fc72d3426c 7 #define CM_EJECUTAR 0xff //FF Ejecutar
Devia 0:95fc72d3426c 8 #define CM_GUARDAR 0xfe //FE Guardar
Devia 0:95fc72d3426c 9 #define CM_VERTEX2D 0xfd //FD Vertex
Devia 0:95fc72d3426c 10 #define CM_DRAW 0xfc //FC Dibujo
Devia 0:95fc72d3426c 11 #define CM_NODRAW 0xfb //FB No Dibujo
Devia 0:95fc72d3426c 12 #define CM_STOP 0xfa //FA Parada
Devia 0:95fc72d3426c 13 #define CM_END 0xf0 //F0 Fin de Linea //F9 MOTOR PASO A PASO //F1 Interrupcion F2 Pausa de la interrupcion
Devia 0:95fc72d3426c 14
Devia 0:95fc72d3426c 15 #define MEM_SIZE 10
Devia 0:95fc72d3426c 16 #define MEM_TYPE uint32_t
Devia 0:95fc72d3426c 17
Devia 0:95fc72d3426c 18 int mem_head=0;
Devia 0:95fc72d3426c 19 int mem_tail=0;
Devia 0:95fc72d3426c 20 uint8_t full=0;
Devia 0:95fc72d3426c 21
Devia 0:95fc72d3426c 22 Serial pc(USBTX,USBRX); // Comunicación Serial
Devia 0:95fc72d3426c 23 MEM_TYPE buffer[MEM_SIZE];
Devia 0:95fc72d3426c 24
Devia 0:95fc72d3426c 25 PwmOut ServoX(PB_2); //D2
Devia 0:95fc72d3426c 26 PwmOut ServoY(PB_3); //D3
Devia 0:95fc72d3426c 27 PwmOut ServoZ(PB_4); //D4
Devia 0:95fc72d3426c 28
Devia 0:95fc72d3426c 29 uint8_t posx_old=0; // posición anterior del eje X
Devia 0:95fc72d3426c 30 uint8_t posy_old=0; // posición anterior del eje Y
Devia 0:95fc72d3426c 31 uint8_t ss_time=100; // tiempo de espera para moverse 1 mm en microsegundos
Devia 0:95fc72d3426c 32
Devia 0:95fc72d3426c 33 uint8_t mem_put(MEM_TYPE data)
Devia 0:95fc72d3426c 34 {
Devia 0:95fc72d3426c 35 if (full)
Devia 0:95fc72d3426c 36 return 1;
Devia 0:95fc72d3426c 37 buffer[mem_head] = data;
Devia 0:95fc72d3426c 38 mem_head += 1;
Devia 0:95fc72d3426c 39 if (mem_head == MEM_SIZE)
Devia 0:95fc72d3426c 40 full =1;
Devia 0:95fc72d3426c 41
Devia 0:95fc72d3426c 42 return 0;
Devia 0:95fc72d3426c 43 }
Devia 0:95fc72d3426c 44 uint8_t mem_get(MEM_TYPE* data)
Devia 0:95fc72d3426c 45 {
Devia 0:95fc72d3426c 46 if (mem_head == 0)
Devia 0:95fc72d3426c 47 return 1;
Devia 0:95fc72d3426c 48 if (mem_head == mem_tail)
Devia 0:95fc72d3426c 49 return 1;
Devia 0:95fc72d3426c 50
Devia 0:95fc72d3426c 51 *data = buffer[mem_tail];
Devia 0:95fc72d3426c 52 mem_tail += 1;
Devia 0:95fc72d3426c 53
Devia 0:95fc72d3426c 54 return 0;
Devia 0:95fc72d3426c 55 }
Devia 0:95fc72d3426c 56 uint32_t mem_free()
Devia 0:95fc72d3426c 57 {
Devia 0:95fc72d3426c 58 mem_head=0;
Devia 0:95fc72d3426c 59 full=0;
Devia 0:95fc72d3426c 60 }
Devia 0:95fc72d3426c 61 void sstime(uint8_t x, uint8_t y)
Devia 0:95fc72d3426c 62 {
Devia 0:95fc72d3426c 63 double dx=abs(x-posx_old);
Devia 0:95fc72d3426c 64 double dy=abs(y-posy_old);
Devia 0:95fc72d3426c 65 double dist= sqrt(dx*dx+dy*dy);
Devia 0:95fc72d3426c 66 wait_ms((int)(ss_time*dist));
Devia 0:95fc72d3426c 67 posx_old = x;
Devia 0:95fc72d3426c 68 posy_old= y;
Devia 0:95fc72d3426c 69
Devia 0:95fc72d3426c 70 }
Devia 0:95fc72d3426c 71 int coord2pulse(float coord) // conversión de coordenadas en Y
Devia 0:95fc72d3426c 72 {
Devia 0:95fc72d3426c 73 if(0 <= coord <= POSMAX)
Devia 0:95fc72d3426c 74 return int(700+coord*1900/50);
Devia 0:95fc72d3426c 75 return 700;
Devia 0:95fc72d3426c 76 }
Devia 0:95fc72d3426c 77 void vertex2d(uint8_t x, uint8_t y) // Funcion de llamado de conversiones X y Y
Devia 0:95fc72d3426c 78 {
Devia 0:95fc72d3426c 79 int pulseX = coord2pulse(x);
Devia 0:95fc72d3426c 80 int pulseY = coord2pulse(y);
Devia 0:95fc72d3426c 81 ServoX.pulsewidth_us(pulseX);
Devia 0:95fc72d3426c 82 ServoY.pulsewidth_us(pulseY);
Devia 0:95fc72d3426c 83 sstime(x,y);
Devia 0:95fc72d3426c 84 //wait_ms(ss_time);
Devia 0:95fc72d3426c 85 }
Devia 0:95fc72d3426c 86 void draw() // Función para enviarle la posicion de dibujo a Z, lo mueve hacia abajo.
Devia 0:95fc72d3426c 87 {
Devia 0:95fc72d3426c 88 ServoZ.pulsewidth_us(2500);
Devia 0:95fc72d3426c 89 pc.printf(" Dibujando...");
Devia 0:95fc72d3426c 90 wait_ms(ss_time*2);
Devia 0:95fc72d3426c 91 }
Devia 0:95fc72d3426c 92 void nodraw() // Función para enviarle la posicion de no dibujar a Z, lo mueve hacia arriba.
Devia 0:95fc72d3426c 93 {
Devia 0:95fc72d3426c 94 ServoZ.pulsewidth_us(700);
Devia 0:95fc72d3426c 95 pc.printf(" Dibujo Terminado...");
Devia 0:95fc72d3426c 96 wait_ms(ss_time*2);
Devia 0:95fc72d3426c 97 }
Devia 0:95fc72d3426c 98 void ejecutar()
Devia 0:95fc72d3426c 99 {
Devia 0:95fc72d3426c 100 pc.printf("se esta ejecutando el dibujo...");
Devia 0:95fc72d3426c 101
Devia 0:95fc72d3426c 102 uint32_t mem_free();
Devia 0:95fc72d3426c 103
Devia 0:95fc72d3426c 104 while (pc.getc() != CM_END)
Devia 0:95fc72d3426c 105 {
Devia 0:95fc72d3426c 106 void initdraw(); // posicion inicio de dibujo
Devia 0:95fc72d3426c 107 void memory(); //revisar memoria
Devia 0:95fc72d3426c 108 void dinamic (); //memoria dinamica
Devia 0:95fc72d3426c 109 uint8_t mem_get (); //leer
Devia 0:95fc72d3426c 110
Devia 0:95fc72d3426c 111 switch (pc.getc())
Devia 0:95fc72d3426c 112 {
Devia 0:95fc72d3426c 113 case CM_VERTEX2D:
Devia 0:95fc72d3426c 114
Devia 0:95fc72d3426c 115 for (int i=0; i<4; i++){
Devia 0:95fc72d3426c 116 void vertex2d(uint8_t x, uint8_t y);
Devia 0:95fc72d3426c 117 }
Devia 0:95fc72d3426c 118 break;
Devia 0:95fc72d3426c 119 case CM_DRAW:
Devia 0:95fc72d3426c 120 void draw ();
Devia 0:95fc72d3426c 121 break;
Devia 0:95fc72d3426c 122 case CM_NODRAW:
Devia 0:95fc72d3426c 123 void nodraw ();
Devia 0:95fc72d3426c 124 break;
Devia 0:95fc72d3426c 125 default:
Devia 0:95fc72d3426c 126 pc.printf("error de comando");
Devia 0:95fc72d3426c 127 break ;
Devia 0:95fc72d3426c 128 }
Devia 0:95fc72d3426c 129 }
Devia 0:95fc72d3426c 130 }
Devia 0:95fc72d3426c 131 void guardar()
Devia 0:95fc72d3426c 132 {
Devia 0:95fc72d3426c 133 pc.printf("se inicia el comado de guardar..");
Devia 0:95fc72d3426c 134
Devia 0:95fc72d3426c 135 uint32_t mem_free();
Devia 0:95fc72d3426c 136 while (pc.getc() != CM_END)
Devia 0:95fc72d3426c 137 {
Devia 0:95fc72d3426c 138 void initdraw(); //posicion incial de dibujo
Devia 0:95fc72d3426c 139 void memory();
Devia 0:95fc72d3426c 140 void dinamic ();
Devia 0:95fc72d3426c 141 uint8_t mem_put(); //escribir
Devia 0:95fc72d3426c 142
Devia 0:95fc72d3426c 143 }
Devia 0:95fc72d3426c 144 }
Devia 0:95fc72d3426c 145 void init_serial() // configuracion de baudios a pc
Devia 0:95fc72d3426c 146 {
Devia 0:95fc72d3426c 147 pc.baud(BAUD);
Devia 0:95fc72d3426c 148 }
Devia 0:95fc72d3426c 149 void init_servos() // configuracion de periodo
Devia 0:95fc72d3426c 150 {
Devia 0:95fc72d3426c 151 ServoX.period_ms(20);
Devia 0:95fc72d3426c 152 ServoY.period_ms(20);
Devia 0:95fc72d3426c 153 ServoZ.period_ms(20);
Devia 0:95fc72d3426c 154 }
Devia 0:95fc72d3426c 155 void init_draw(float x, float y)
Devia 0:95fc72d3426c 156 {
Devia 0:95fc72d3426c 157 vertex2d (x,y);
Devia 0:95fc72d3426c 158 wait_ms(ss_time);
Devia 0:95fc72d3426c 159 draw();
Devia 0:95fc72d3426c 160 }
Devia 0:95fc72d3426c 161 void home()
Devia 0:95fc72d3426c 162 {
Devia 0:95fc72d3426c 163 nodraw();
Devia 0:95fc72d3426c 164 vertex2d(0,0);
Devia 0:95fc72d3426c 165 pc.printf("Posicion Home");
Devia 0:95fc72d3426c 166 wait_ms(ss_time);
Devia 0:95fc72d3426c 167 }
Devia 0:95fc72d3426c 168 void put_sstime(uint8_t vtime)
Devia 0:95fc72d3426c 169 {
Devia 0:95fc72d3426c 170 ss_time=vtime;
Devia 0:95fc72d3426c 171
Devia 0:95fc72d3426c 172 }
Devia 0:95fc72d3426c 173 void parada ()
Devia 0:95fc72d3426c 174 { //subprograma de parada
Devia 0:95fc72d3426c 175 pc.printf("finalizando programa..");
Devia 0:95fc72d3426c 176 uint32_t mem_free();
Devia 0:95fc72d3426c 177 void nodraw();
Devia 0:95fc72d3426c 178 void home();
Devia 0:95fc72d3426c 179 }
Devia 0:95fc72d3426c 180 void dinamic () // memoria dinamica de 32 bits
Devia 0:95fc72d3426c 181 {
Devia 0:95fc72d3426c 182 int temp = pc.getc();
Devia 0:95fc72d3426c 183
Devia 0:95fc72d3426c 184 temp = temp<<8 + pc.getc();
Devia 0:95fc72d3426c 185 temp = temp<<8 + pc.getc();
Devia 0:95fc72d3426c 186 temp = temp<<8 + pc.getc();
Devia 0:95fc72d3426c 187 temp = temp<<8 + pc.getc();
Devia 0:95fc72d3426c 188 }
Devia 0:95fc72d3426c 189 void memory () // memoria para obtener el dato
Devia 0:95fc72d3426c 190 {
Devia 0:95fc72d3426c 191 mem_put(pc.getc());
Devia 0:95fc72d3426c 192 mem_put(pc.getc());
Devia 0:95fc72d3426c 193 mem_put(pc.getc());
Devia 0:95fc72d3426c 194 mem_put(pc.getc());
Devia 0:95fc72d3426c 195 MEM_TYPE val;
Devia 0:95fc72d3426c 196 mem_get(&val);
Devia 0:95fc72d3426c 197 pc.putc(val);
Devia 0:95fc72d3426c 198 }
Devia 0:95fc72d3426c 199
Devia 0:95fc72d3426c 200 int main()
Devia 0:95fc72d3426c 201 { // programa para reconocer efecutar o guardar
Devia 0:95fc72d3426c 202 init_servos();
Devia 0:95fc72d3426c 203 init_serial();
Devia 0:95fc72d3426c 204 home();
Devia 0:95fc72d3426c 205 pc.printf ("inicializacion");
Devia 0:95fc72d3426c 206 char read_cc;
Devia 0:95fc72d3426c 207 while(1)
Devia 0:95fc72d3426c 208 {
Devia 0:95fc72d3426c 209 read_cc = pc.getc();
Devia 0:95fc72d3426c 210 switch (read_cc) {
Devia 0:95fc72d3426c 211 case CM_EJECUTAR: ejecutar(); break;
Devia 0:95fc72d3426c 212 case CM_GUARDAR: guardar(); break;
Devia 0:95fc72d3426c 213 case CM_STOP: parada (); break;
Devia 0:95fc72d3426c 214 default: pc.printf("error de comando");break ;
Devia 0:95fc72d3426c 215 }
Devia 0:95fc72d3426c 216 }
Devia 0:95fc72d3426c 217 }