el siguiente programa muestra la funcion de ejecutar y guardar del piccolo
Fork of 01-02EjercicioComunicacionSerial by
main.cpp@1:3989eb5bad79, 2018-03-14 (annotated)
- Committer:
- albeiro
- Date:
- Wed Mar 14 05:33:27 2018 +0000
- Revision:
- 1:3989eb5bad79
- Parent:
- 0:abaa541e10d5
programa piccolo
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fabeltranm | 0:abaa541e10d5 | 1 | #include "mbed.h" |
fabeltranm | 0:abaa541e10d5 | 2 | |
fabeltranm | 0:abaa541e10d5 | 3 | #include "draw.h" |
fabeltranm | 0:abaa541e10d5 | 4 | #define CM_EJECUTAR 0xff |
fabeltranm | 0:abaa541e10d5 | 5 | #define CM_GUARDAR 0xfe |
fabeltranm | 0:abaa541e10d5 | 6 | #define CM_VERTEX2D 0xfd |
fabeltranm | 0:abaa541e10d5 | 7 | #define CM_DRAW 0xfc |
fabeltranm | 0:abaa541e10d5 | 8 | #define CM_NODRAW 0xfb |
fabeltranm | 0:abaa541e10d5 | 9 | #define CM_STOP 0xfa |
fabeltranm | 0:abaa541e10d5 | 10 | #define CM_END 0xf0 |
albeiro | 1:3989eb5bad79 | 11 | #define MEM_TYPE uint32_t |
albeiro | 1:3989eb5bad79 | 12 | #define MAXPOS 50 |
albeiro | 1:3989eb5bad79 | 13 | #define POSDRAW 10 |
albeiro | 1:3989eb5bad79 | 14 | #define ss_time 100 |
albeiro | 1:3989eb5bad79 | 15 | #include "math.h" |
fabeltranm | 0:abaa541e10d5 | 16 | |
fabeltranm | 0:abaa541e10d5 | 17 | |
fabeltranm | 0:abaa541e10d5 | 18 | |
fabeltranm | 0:abaa541e10d5 | 19 | |
albeiro | 1:3989eb5bad79 | 20 | void ejecutar(){ |
albeiro | 1:3989eb5bad79 | 21 | command.printf("se esta ejecutando el dibujo..."); |
albeiro | 1:3989eb5bad79 | 22 | |
albeiro | 1:3989eb5bad79 | 23 | |
albeiro | 1:3989eb5bad79 | 24 | PwmOut myServoX(PB_3); |
albeiro | 1:3989eb5bad79 | 25 | PwmOut myServoY(PB_4); |
albeiro | 1:3989eb5bad79 | 26 | PwmOut myServoZ(PB_5); |
albeiro | 1:3989eb5bad79 | 27 | |
albeiro | 1:3989eb5bad79 | 28 | |
albeiro | 1:3989eb5bad79 | 29 | uint32_t posx_old=0; // posición anterior del eje X |
albeiro | 1:3989eb5bad79 | 30 | uint32_t posy_old=0; // posición anterior del eje Y |
albeiro | 1:3989eb5bad79 | 31 | uint32_t ss_time=100; // tiempo de espera para moverse 1 mm en microsegundos |
albeiro | 1:3989eb5bad79 | 32 | |
albeiro | 1:3989eb5bad79 | 33 | void put_sstime(uint32_t vtime) |
albeiro | 1:3989eb5bad79 | 34 | { |
albeiro | 1:3989eb5bad79 | 35 | s_time = vtime; |
albeiro | 1:3989eb5bad79 | 36 | } |
albeiro | 1:3989eb5bad79 | 37 | |
albeiro | 1:3989eb5bad79 | 38 | int coord2us(float coord); |
albeiro | 1:3989eb5bad79 | 39 | { |
albeiro | 1:3989eb5bad79 | 40 | if(0 <= coord <= MAXPOS) |
albeiro | 1:3989eb5bad79 | 41 | return int(750+coord*1900/50);// u6 |
albeiro | 1:3989eb5bad79 | 42 | return 750; |
albeiro | 1:3989eb5bad79 | 43 | } |
albeiro | 1:3989eb5bad79 | 44 | |
albeiro | 1:3989eb5bad79 | 45 | void sstime(uint32_t x, uint32_t y) |
albeiro | 1:3989eb5bad79 | 46 | { |
albeiro | 1:3989eb5bad79 | 47 | double dx=abs(x-posx_old); |
albeiro | 1:3989eb5bad79 | 48 | double dy=abs(y-posy_old); |
albeiro | 1:3989eb5bad79 | 49 | double dist= sqrt(dx*dx+dy*dy); |
albeiro | 1:3989eb5bad79 | 50 | wait_ms((int)(ss_time*dist)); |
albeiro | 1:3989eb5bad79 | 51 | posx_old =x; |
albeiro | 1:3989eb5bad79 | 52 | posy_old=y; |
albeiro | 1:3989eb5bad79 | 53 | } |
albeiro | 1:3989eb5bad79 | 54 | |
albeiro | 1:3989eb5bad79 | 55 | void vertex2d(uint32_t x, uint32_t y) |
albeiro | 1:3989eb5bad79 | 56 | { |
albeiro | 1:3989eb5bad79 | 57 | int pulseX = coord2us(x); |
albeiro | 1:3989eb5bad79 | 58 | int pulseY = coord2us(y); |
albeiro | 1:3989eb5bad79 | 59 | |
albeiro | 1:3989eb5bad79 | 60 | myServoX.pulsewidth_us(pulseX); |
albeiro | 1:3989eb5bad79 | 61 | myServoY.pulsewidth_us(pulseY); |
albeiro | 1:3989eb5bad79 | 62 | sstime(x,y); |
albeiro | 1:3989eb5bad79 | 63 | } |
albeiro | 1:3989eb5bad79 | 64 | |
albeiro | 1:3989eb5bad79 | 65 | void home () |
albeiro | 1:3989eb5bad79 | 66 | { |
albeiro | 1:3989eb5bad79 | 67 | nodraw (); |
albeiro | 1:3989eb5bad79 | 68 | vertex2d ( 0,0 ); |
albeiro | 1:3989eb5bad79 | 69 | } |
albeiro | 1:3989eb5bad79 | 70 | |
albeiro | 1:3989eb5bad79 | 71 | void draw () ; |
albeiro | 1:3989eb5bad79 | 72 | { |
albeiro | 1:3989eb5bad79 | 73 | myServoZ.pulsewidth_us (POSDRAW); |
albeiro | 1:3989eb5bad79 | 74 | wait_ms (ss_time * 2 ); |
albeiro | 1:3989eb5bad79 | 75 | } |
albeiro | 1:3989eb5bad79 | 76 | |
albeiro | 1:3989eb5bad79 | 77 | void nodraw () ; |
albeiro | 1:3989eb5bad79 | 78 | { |
albeiro | 1:3989eb5bad79 | 79 | myServoZ.pulsewidth_us (MAXPOS); |
albeiro | 1:3989eb5bad79 | 80 | wait_ms (ss_time * 2 ); |
albeiro | 1:3989eb5bad79 | 81 | } |
albeiro | 1:3989eb5bad79 | 82 | void initdraw ( float x, fLoat y) ; |
albeiro | 1:3989eb5bad79 | 83 | { |
albeiro | 1:3989eb5bad79 | 84 | vertex2d (x, y); |
albeiro | 1:3989eb5bad79 | 85 | dibujar(); |
albeiro | 1:3989eb5bad79 | 86 | } |
albeiro | 1:3989eb5bad79 | 87 | void init_servo (); |
albeiro | 1:3989eb5bad79 | 88 | { |
albeiro | 1:3989eb5bad79 | 89 | myServoX.period_ms ( 20 ); |
albeiro | 1:3989eb5bad79 | 90 | myServoY.period_ms ( 20 ); |
albeiro | 1:3989eb5bad79 | 91 | myServoZ.period_ms ( 20 ); |
albeiro | 1:3989eb5bad79 | 92 | } |
albeiro | 1:3989eb5bad79 | 93 | |
albeiro | 1:3989eb5bad79 | 94 | } |
albeiro | 1:3989eb5bad79 | 95 | |
fabeltranm | 0:abaa541e10d5 | 96 | |
fabeltranm | 0:abaa541e10d5 | 97 | |
albeiro | 1:3989eb5bad79 | 98 | |
albeiro | 1:3989eb5bad79 | 99 | |
albeiro | 1:3989eb5bad79 | 100 | |
albeiro | 1:3989eb5bad79 | 101 | |
albeiro | 1:3989eb5bad79 | 102 | |
albeiro | 1:3989eb5bad79 | 103 | |
albeiro | 1:3989eb5bad79 | 104 | |
albeiro | 1:3989eb5bad79 | 105 | |
fabeltranm | 0:abaa541e10d5 | 106 | void guardar(){ |
fabeltranm | 0:abaa541e10d5 | 107 | command.printf("se inicia el comado de guardar.."); |
fabeltranm | 0:abaa541e10d5 | 108 | // ubicar acà el codigo |
albeiro | 1:3989eb5bad79 | 109 | int mem_head = 0; |
albeiro | 1:3989eb5bad79 | 110 | int mem_tail = 0; |
albeiro | 1:3989eb5bad79 | 111 | uint32_t full = 0; |
albeiro | 1:3989eb5bad79 | 112 | |
albeiro | 1:3989eb5bad79 | 113 | MEM_TYPE buffer[MEM_SIZE]; |
albeiro | 1:3989eb5bad79 | 114 | Serial command(USBTX, USBRX); |
albeiro | 1:3989eb5bad79 | 115 | |
albeiro | 1:3989eb5bad79 | 116 | uint32_t mem_free() |
albeiro | 1:3989eb5bad79 | 117 | { |
albeiro | 1:3989eb5bad79 | 118 | mem_head=0; |
albeiro | 1:3989eb5bad79 | 119 | full=0; |
albeiro | 1:3989eb5bad79 | 120 | } |
albeiro | 1:3989eb5bad79 | 121 | |
albeiro | 1:3989eb5bad79 | 122 | uint32_t mem_put(MEM_TYPE data) |
albeiro | 1:3989eb5bad79 | 123 | { |
albeiro | 1:3989eb5bad79 | 124 | |
albeiro | 1:3989eb5bad79 | 125 | if (full) |
albeiro | 1:3989eb5bad79 | 126 | return 1; |
albeiro | 1:3989eb5bad79 | 127 | buffer[mem_head] = data; |
albeiro | 1:3989eb5bad79 | 128 | mem_head += 1; |
albeiro | 1:3989eb5bad79 | 129 | if (mem_head == MEM_SIZE) |
albeiro | 1:3989eb5bad79 | 130 | full =1; |
albeiro | 1:3989eb5bad79 | 131 | return 0; |
albeiro | 1:3989eb5bad79 | 132 | } |
albeiro | 1:3989eb5bad79 | 133 | uint32_t mem_get(MEM_TYPE* data) |
albeiro | 1:3989eb5bad79 | 134 | { |
albeiro | 1:3989eb5bad79 | 135 | if (mem_head == 0) |
albeiro | 1:3989eb5bad79 | 136 | return 1; |
albeiro | 1:3989eb5bad79 | 137 | if (mem_head == mem_tail) |
albeiro | 1:3989eb5bad79 | 138 | return 1; |
fabeltranm | 0:abaa541e10d5 | 139 | |
albeiro | 1:3989eb5bad79 | 140 | |
albeiro | 1:3989eb5bad79 | 141 | *data = buffer[mem_tail]; |
albeiro | 1:3989eb5bad79 | 142 | mem_tail += 1; |
albeiro | 1:3989eb5bad79 | 143 | |
albeiro | 1:3989eb5bad79 | 144 | return 0; |
fabeltranm | 0:abaa541e10d5 | 145 | } |
albeiro | 1:3989eb5bad79 | 146 | |
albeiro | 1:3989eb5bad79 | 147 | int main(){ |
albeiro | 1:3989eb5bad79 | 148 | |
albeiro | 1:3989eb5bad79 | 149 | mem_put(command.getc()); |
albeiro | 1:3989eb5bad79 | 150 | mem_put(command.getc()); |
albeiro | 1:3989eb5bad79 | 151 | mem_put(command.getc()); |
albeiro | 1:3989eb5bad79 | 152 | mem_put(command.getc()); |
albeiro | 1:3989eb5bad79 | 153 | MEM_TYPE val; |
albeiro | 1:3989eb5bad79 | 154 | mem_get(&val); |
albeiro | 1:3989eb5bad79 | 155 | command.putc(val); |
albeiro | 1:3989eb5bad79 | 156 | } |
albeiro | 1:3989eb5bad79 | 157 | } |
albeiro | 1:3989eb5bad79 | 158 | |
albeiro | 1:3989eb5bad79 | 159 | |
albeiro | 1:3989eb5bad79 | 160 | |
albeiro | 1:3989eb5bad79 | 161 | |
albeiro | 1:3989eb5bad79 | 162 | |
albeiro | 1:3989eb5bad79 | 163 | |
albeiro | 1:3989eb5bad79 | 164 | |
fabeltranm | 0:abaa541e10d5 | 165 | void init_serial() |
fabeltranm | 0:abaa541e10d5 | 166 | { |
albeiro | 1:3989eb5bad79 | 167 | Serial command(USBTX, USBRX); |
fabeltranm | 0:abaa541e10d5 | 168 | command.baud(9600); |
albeiro | 1:3989eb5bad79 | 169 | pc.format(8,none,1); |
fabeltranm | 0:abaa541e10d5 | 170 | } |
fabeltranm | 0:abaa541e10d5 | 171 | int main() { |
fabeltranm | 0:abaa541e10d5 | 172 | init_servo(); |
fabeltranm | 0:abaa541e10d5 | 173 | init_serial(); |
fabeltranm | 0:abaa541e10d5 | 174 | home(); |
fabeltranm | 0:abaa541e10d5 | 175 | char read_cc; |
fabeltranm | 0:abaa541e10d5 | 176 | while(1) |
fabeltranm | 0:abaa541e10d5 | 177 | { |
fabeltranm | 0:abaa541e10d5 | 178 | switch (read_cc) { |
fabeltranm | 0:abaa541e10d5 | 179 | case CM_EJECUTAR: ejecutar(); break; |
fabeltranm | 0:abaa541e10d5 | 180 | case CM_GUARDAR: guardar(); break; |
fabeltranm | 0:abaa541e10d5 | 181 | default: command.printf("error de comando");break ; |
fabeltranm | 0:abaa541e10d5 | 182 | } |
fabeltranm | 0:abaa541e10d5 | 183 | } |
fabeltranm | 0:abaa541e10d5 | 184 | } |