Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:95fc72d3426c, 2018-05-12 (annotated)
- Committer:
- Devia
- Date:
- Sat May 12 16:08:38 2018 +0000
- Revision:
- 0:95fc72d3426c
Piccolo
Who changed what in which revision?
| User | Revision | Line number | New 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 | } |