el siguiente programa muestra la funcion de ejecutar y guardar del piccolo
Fork of 01-02EjercicioComunicacionSerial by
Diff: main.cpp
- Revision:
- 1:3989eb5bad79
- Parent:
- 0:abaa541e10d5
--- a/main.cpp Wed Mar 07 01:00:46 2018 +0000 +++ b/main.cpp Wed Mar 14 05:33:27 2018 +0000 @@ -8,25 +8,165 @@ #define CM_NODRAW 0xfb #define CM_STOP 0xfa #define CM_END 0xf0 +#define MEM_TYPE uint32_t +#define MAXPOS 50 +#define POSDRAW 10 +#define ss_time 100 +#include "math.h" -Serial command(USBTX, USBRX); +void ejecutar(){ + command.printf("se esta ejecutando el dibujo..."); + + + PwmOut myServoX(PB_3); + PwmOut myServoY(PB_4); + PwmOut myServoZ(PB_5); + + + uint32_t posx_old=0; // posición anterior del eje X + uint32_t posy_old=0; // posición anterior del eje Y + uint32_t ss_time=100; // tiempo de espera para moverse 1 mm en microsegundos + + void put_sstime(uint32_t vtime) + { + s_time = vtime; + } + + int coord2us(float coord); + { + if(0 <= coord <= MAXPOS) + return int(750+coord*1900/50);// u6 + return 750; + } + + void sstime(uint32_t x, uint32_t y) + { + double dx=abs(x-posx_old); + double dy=abs(y-posy_old); + double dist= sqrt(dx*dx+dy*dy); + wait_ms((int)(ss_time*dist)); + posx_old =x; + posy_old=y; + } + + void vertex2d(uint32_t x, uint32_t y) + { + int pulseX = coord2us(x); + int pulseY = coord2us(y); + + myServoX.pulsewidth_us(pulseX); + myServoY.pulsewidth_us(pulseY); + sstime(x,y); + } + + void home () + { + nodraw (); + vertex2d ( 0,0 ); + } + + void draw () ; + { + myServoZ.pulsewidth_us (POSDRAW); + wait_ms (ss_time * 2 ); + } + + void nodraw () ; + { + myServoZ.pulsewidth_us (MAXPOS); + wait_ms (ss_time * 2 ); + } + void initdraw ( float x, fLoat y) ; + { + vertex2d (x, y); + dibujar(); + } + void init_servo (); + { + myServoX.period_ms ( 20 ); + myServoY.period_ms ( 20 ); + myServoZ.period_ms ( 20 ); + } + + } + -void ejecutar(){ - command.printf("se esta ejecutando el dibujo..."); - // ubicar acà el codigo -} + + + + + + + + void guardar(){ command.printf("se inicia el comado de guardar.."); // ubicar acà el codigo + int mem_head = 0; +int mem_tail = 0; +uint32_t full = 0; + +MEM_TYPE buffer[MEM_SIZE]; +Serial command(USBTX, USBRX); + +uint32_t mem_free() +{ + mem_head=0; + full=0; +} + +uint32_t mem_put(MEM_TYPE data) +{ + + if (full) + return 1; + buffer[mem_head] = data; + mem_head += 1; + if (mem_head == MEM_SIZE) + full =1; + return 0; +} +uint32_t mem_get(MEM_TYPE* data) +{ + if (mem_head == 0) + return 1; + if (mem_head == mem_tail) + return 1; + + *data = buffer[mem_tail]; + mem_tail += 1; + + return 0; } + +int main(){ + + mem_put(command.getc()); + mem_put(command.getc()); + mem_put(command.getc()); + mem_put(command.getc()); + MEM_TYPE val; + mem_get(&val); + command.putc(val); + } +} + + + + + + + void init_serial() { + Serial command(USBTX, USBRX); command.baud(9600); + pc.format(8,none,1); } int main() { init_servo();