el siguiente programa muestra la funcion de ejecutar y guardar del piccolo

Dependencies:   mbed

Fork of 01-02EjercicioComunicacionSerial by ferney alberto beltran molina

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?

UserRevisionLine numberNew 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 }