Jean Martin Mojica Pinzon
/
piccolo
1er corte
main.cpp@0:6b90993ae9ec, 2018-03-14 (annotated)
- Committer:
- jeanmojica05
- Date:
- Wed Mar 14 04:18:08 2018 +0000
- Revision:
- 0:6b90993ae9ec
Proceso programaci?n piccolo
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jeanmojica05 | 0:6b90993ae9ec | 1 | #include "mbed.h" |
jeanmojica05 | 0:6b90993ae9ec | 2 | #include "math.h" |
jeanmojica05 | 0:6b90993ae9ec | 3 | |
jeanmojica05 | 0:6b90993ae9ec | 4 | #define MEM_SIZE 10 |
jeanmojica05 | 0:6b90993ae9ec | 5 | #define MEM_TYPE uint8_t |
jeanmojica05 | 0:6b90993ae9ec | 6 | #define MAXPOS 50 // en milimetros |
jeanmojica05 | 0:6b90993ae9ec | 7 | #define SS_TIME 100 // en microsegundos |
jeanmojica05 | 0:6b90993ae9ec | 8 | #define POSDRAW 10 |
jeanmojica05 | 0:6b90993ae9ec | 9 | #define CM_EJECUTAR 0xff |
jeanmojica05 | 0:6b90993ae9ec | 10 | #define CM_GUARDAR 0xfe |
jeanmojica05 | 0:6b90993ae9ec | 11 | #define CM_VERTEX2D 0xfd |
jeanmojica05 | 0:6b90993ae9ec | 12 | #define CM_DRAW 0xfc |
jeanmojica05 | 0:6b90993ae9ec | 13 | #define CM_NODRAW 0xfb |
jeanmojica05 | 0:6b90993ae9ec | 14 | #define CM_STOP 0xfa |
jeanmojica05 | 0:6b90993ae9ec | 15 | #define CM_END 0xf0 |
jeanmojica05 | 0:6b90993ae9ec | 16 | |
jeanmojica05 | 0:6b90993ae9ec | 17 | |
jeanmojica05 | 0:6b90993ae9ec | 18 | PwmOut myServoX(PB_3); |
jeanmojica05 | 0:6b90993ae9ec | 19 | PwmOut myServoY(PB_4); |
jeanmojica05 | 0:6b90993ae9ec | 20 | PwmOut myServoZ(PB_5); |
jeanmojica05 | 0:6b90993ae9ec | 21 | |
jeanmojica05 | 0:6b90993ae9ec | 22 | int mem_head = 0; |
jeanmojica05 | 0:6b90993ae9ec | 23 | int mem_tail = 0; |
jeanmojica05 | 0:6b90993ae9ec | 24 | uint8_t full = 0; |
jeanmojica05 | 0:6b90993ae9ec | 25 | uint8_t posx_old=0; // posición anterior del eje X |
jeanmojica05 | 0:6b90993ae9ec | 26 | uint8_t posy_old=0; // posición anterior del eje Y |
jeanmojica05 | 0:6b90993ae9ec | 27 | uint8_t ss_time=100; // tiempo de espera para moverse 1 mm en microsegundos |
jeanmojica05 | 0:6b90993ae9ec | 28 | |
jeanmojica05 | 0:6b90993ae9ec | 29 | MEM_TYPE buffer[MEM_SIZE]; |
jeanmojica05 | 0:6b90993ae9ec | 30 | Serial command(USBTX, USBRX); |
jeanmojica05 | 0:6b90993ae9ec | 31 | |
jeanmojica05 | 0:6b90993ae9ec | 32 | void put_sstime(uint8_t vtime){ |
jeanmojica05 | 0:6b90993ae9ec | 33 | ss_time=vtime; |
jeanmojica05 | 0:6b90993ae9ec | 34 | |
jeanmojica05 | 0:6b90993ae9ec | 35 | } |
jeanmojica05 | 0:6b90993ae9ec | 36 | |
jeanmojica05 | 0:6b90993ae9ec | 37 | int coord2us(float coord) |
jeanmojica05 | 0:6b90993ae9ec | 38 | { |
jeanmojica05 | 0:6b90993ae9ec | 39 | if(0 <= coord <= MAXPOS) |
jeanmojica05 | 0:6b90993ae9ec | 40 | return int(750+coord*1900/50);// u6 |
jeanmojica05 | 0:6b90993ae9ec | 41 | return 750; |
jeanmojica05 | 0:6b90993ae9ec | 42 | |
jeanmojica05 | 0:6b90993ae9ec | 43 | } |
jeanmojica05 | 0:6b90993ae9ec | 44 | |
jeanmojica05 | 0:6b90993ae9ec | 45 | void sstime(uint8_t x, uint8_t y) |
jeanmojica05 | 0:6b90993ae9ec | 46 | { |
jeanmojica05 | 0:6b90993ae9ec | 47 | double dx=abs(x-posx_old); |
jeanmojica05 | 0:6b90993ae9ec | 48 | double dy=abs(y-posy_old); |
jeanmojica05 | 0:6b90993ae9ec | 49 | double dist= sqrt(dx*dx+dy*dy); |
jeanmojica05 | 0:6b90993ae9ec | 50 | wait_ms((int)(ss_time*dist)); |
jeanmojica05 | 0:6b90993ae9ec | 51 | posx_old =x; |
jeanmojica05 | 0:6b90993ae9ec | 52 | posy_old=y; |
jeanmojica05 | 0:6b90993ae9ec | 53 | |
jeanmojica05 | 0:6b90993ae9ec | 54 | } |
jeanmojica05 | 0:6b90993ae9ec | 55 | |
jeanmojica05 | 0:6b90993ae9ec | 56 | void draw(){ |
jeanmojica05 | 0:6b90993ae9ec | 57 | myServoZ.pulsewidth_us(POSDRAW); |
jeanmojica05 | 0:6b90993ae9ec | 58 | wait_ms(ss_time*2); |
jeanmojica05 | 0:6b90993ae9ec | 59 | } |
jeanmojica05 | 0:6b90993ae9ec | 60 | |
jeanmojica05 | 0:6b90993ae9ec | 61 | void nodraw(){ |
jeanmojica05 | 0:6b90993ae9ec | 62 | myServoZ.pulsewidth_us(MAXPOS); |
jeanmojica05 | 0:6b90993ae9ec | 63 | wait_ms(ss_time*2); |
jeanmojica05 | 0:6b90993ae9ec | 64 | } |
jeanmojica05 | 0:6b90993ae9ec | 65 | |
jeanmojica05 | 0:6b90993ae9ec | 66 | |
jeanmojica05 | 0:6b90993ae9ec | 67 | void vertex2d(uint8_t x, uint8_t y){ |
jeanmojica05 | 0:6b90993ae9ec | 68 | |
jeanmojica05 | 0:6b90993ae9ec | 69 | int pulseX = coord2us(x); |
jeanmojica05 | 0:6b90993ae9ec | 70 | int pulseY = coord2us(y); |
jeanmojica05 | 0:6b90993ae9ec | 71 | |
jeanmojica05 | 0:6b90993ae9ec | 72 | myServoX.pulsewidth_us(pulseX); |
jeanmojica05 | 0:6b90993ae9ec | 73 | myServoY.pulsewidth_us(pulseY); |
jeanmojica05 | 0:6b90993ae9ec | 74 | |
jeanmojica05 | 0:6b90993ae9ec | 75 | sstime(x,y); |
jeanmojica05 | 0:6b90993ae9ec | 76 | |
jeanmojica05 | 0:6b90993ae9ec | 77 | } |
jeanmojica05 | 0:6b90993ae9ec | 78 | |
jeanmojica05 | 0:6b90993ae9ec | 79 | void initdraw(float x, float y){ |
jeanmojica05 | 0:6b90993ae9ec | 80 | vertex2d (x,y); |
jeanmojica05 | 0:6b90993ae9ec | 81 | draw(); |
jeanmojica05 | 0:6b90993ae9ec | 82 | } |
jeanmojica05 | 0:6b90993ae9ec | 83 | |
jeanmojica05 | 0:6b90993ae9ec | 84 | void home(){ |
jeanmojica05 | 0:6b90993ae9ec | 85 | nodraw(); |
jeanmojica05 | 0:6b90993ae9ec | 86 | vertex2d(0 ,0); |
jeanmojica05 | 0:6b90993ae9ec | 87 | } |
jeanmojica05 | 0:6b90993ae9ec | 88 | |
jeanmojica05 | 0:6b90993ae9ec | 89 | void init_servo() |
jeanmojica05 | 0:6b90993ae9ec | 90 | { |
jeanmojica05 | 0:6b90993ae9ec | 91 | myServoX.period_ms(20); |
jeanmojica05 | 0:6b90993ae9ec | 92 | myServoY.period_ms(20); |
jeanmojica05 | 0:6b90993ae9ec | 93 | myServoZ.period_ms(20); |
jeanmojica05 | 0:6b90993ae9ec | 94 | |
jeanmojica05 | 0:6b90993ae9ec | 95 | |
jeanmojica05 | 0:6b90993ae9ec | 96 | } |
jeanmojica05 | 0:6b90993ae9ec | 97 | void ejecutar(){ |
jeanmojica05 | 0:6b90993ae9ec | 98 | command.printf("se esta ejecutando el dibujo..."); |
jeanmojica05 | 0:6b90993ae9ec | 99 | // ubicar acà el codigo |
jeanmojica05 | 0:6b90993ae9ec | 100 | } |
jeanmojica05 | 0:6b90993ae9ec | 101 | void guardar(){ |
jeanmojica05 | 0:6b90993ae9ec | 102 | command.printf("se inicia el comado de guardar.."); |
jeanmojica05 | 0:6b90993ae9ec | 103 | // ubicar acà el codigo |
jeanmojica05 | 0:6b90993ae9ec | 104 | |
jeanmojica05 | 0:6b90993ae9ec | 105 | } |
jeanmojica05 | 0:6b90993ae9ec | 106 | |
jeanmojica05 | 0:6b90993ae9ec | 107 | void init_serial() |
jeanmojica05 | 0:6b90993ae9ec | 108 | { |
jeanmojica05 | 0:6b90993ae9ec | 109 | command.baud(9600); |
jeanmojica05 | 0:6b90993ae9ec | 110 | } |
jeanmojica05 | 0:6b90993ae9ec | 111 | int main() { |
jeanmojica05 | 0:6b90993ae9ec | 112 | init_servo(); |
jeanmojica05 | 0:6b90993ae9ec | 113 | init_serial(); |
jeanmojica05 | 0:6b90993ae9ec | 114 | home(); |
jeanmojica05 | 0:6b90993ae9ec | 115 | char read_cc; |
jeanmojica05 | 0:6b90993ae9ec | 116 | pc.printf("Dibujando linea"); |
jeanmojica05 | 0:6b90993ae9ec | 117 | valor= pc.getc(); |
jeanmojica05 | 0:6b90993ae9ec | 118 | if(valor=='FF') |
jeanmojica05 | 0:6b90993ae9ec | 119 | ejecutar(); |
jeanmojica05 | 0:6b90993ae9ec | 120 | |
jeanmojica05 | 0:6b90993ae9ec | 121 | default: command.printf("error de comando");break ; |
jeanmojica05 | 0:6b90993ae9ec | 122 | } |
jeanmojica05 | 0:6b90993ae9ec | 123 | } |
jeanmojica05 | 0:6b90993ae9ec | 124 | } |