CODIGO PICOLO

Dependencies:   mbed

/media/uploads/nicolas_guerrero/definimos_variables_globales.pdf

Committer:
nicolas_guerrero
Date:
Wed May 30 14:29:52 2018 +0000
Revision:
2:2e94085cdc90
Parent:
1:629f060522ce
Programa Piccolo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nicolas_guerrero 0:3a659d0cc027 1 //lO UNICO DIFERENTE AL CODIGO ES PwmOut motor_x(A3), motor_y(A1), motor_z(A0);
nicolas_guerrero 0:3a659d0cc027 2 #include "mbed.h"
nicolas_guerrero 1:629f060522ce 3 #include "stepmotor.h"
nicolas_guerrero 1:629f060522ce 4
nicolas_guerrero 0:3a659d0cc027 5 #define MEM_SIZE 5000
nicolas_guerrero 0:3a659d0cc027 6 #define MEM_TYPE uint32_t
nicolas_guerrero 0:3a659d0cc027 7 #define MAXPOS 50 // en milimetros
nicolas_guerrero 0:3a659d0cc027 8 #define SS_TIME 100 // en microsegundos
nicolas_guerrero 0:3a659d0cc027 9 #define POSDRAW 10
nicolas_guerrero 0:3a659d0cc027 10 #define periodo 20
nicolas_guerrero 0:3a659d0cc027 11 #define CM_EJECUTAR 0xff
nicolas_guerrero 0:3a659d0cc027 12 #define CM_GUARDAR 0xfe
nicolas_guerrero 0:3a659d0cc027 13 #define CM_VERTEX2D 0xfd
nicolas_guerrero 0:3a659d0cc027 14 #define CM_DRAW 0xfc
nicolas_guerrero 0:3a659d0cc027 15 #define CM_NODRAW 0xfb
nicolas_guerrero 0:3a659d0cc027 16 #define CM_STOP 0xfa
nicolas_guerrero 0:3a659d0cc027 17 #define CM_END 0xf0
nicolas_guerrero 1:629f060522ce 18 #define CM_SMOTOR 0xf9
nicolas_guerrero 0:3a659d0cc027 19
nicolas_guerrero 0:3a659d0cc027 20 MEM_TYPE arreglo2[MEM_SIZE];
nicolas_guerrero 0:3a659d0cc027 21 Serial pc(USBTX, USBRX);
nicolas_guerrero 0:3a659d0cc027 22 PwmOut motor_x(PB_4), motor_y(PB_5), motor_z(PB_3);
nicolas_guerrero 1:629f060522ce 23 stepmotor smotor1(D9,D10,D11,D12);
nicolas_guerrero 1:629f060522ce 24 stepmotor smotor2 (PA_13,PA_14,PA_15,PB_7);
nicolas_guerrero 0:3a659d0cc027 25 int mem_head = 0,i=0,z=0;
nicolas_guerrero 0:3a659d0cc027 26 int mem_tail = 0;
nicolas_guerrero 0:3a659d0cc027 27 uint8_t full = 0;
nicolas_guerrero 1:629f060522ce 28 char b,verificar=0;
nicolas_guerrero 0:3a659d0cc027 29 MEM_TYPE comando,px,py,condicionf;
nicolas_guerrero 0:3a659d0cc027 30
nicolas_guerrero 0:3a659d0cc027 31
nicolas_guerrero 0:3a659d0cc027 32 int coord2us(float coord)
nicolas_guerrero 0:3a659d0cc027 33 {
nicolas_guerrero 0:3a659d0cc027 34 if(0 <= coord <= MAXPOS)
nicolas_guerrero 0:3a659d0cc027 35 return int(750+coord*1900/50);// u6
nicolas_guerrero 0:3a659d0cc027 36 return 750;
nicolas_guerrero 0:3a659d0cc027 37
nicolas_guerrero 0:3a659d0cc027 38 }
nicolas_guerrero 0:3a659d0cc027 39
nicolas_guerrero 0:3a659d0cc027 40 void draw()
nicolas_guerrero 0:3a659d0cc027 41 {
nicolas_guerrero 0:3a659d0cc027 42 z=coord2us(POSDRAW);
nicolas_guerrero 0:3a659d0cc027 43 motor_z.pulsewidth_us(z);
nicolas_guerrero 0:3a659d0cc027 44 wait(1);
nicolas_guerrero 0:3a659d0cc027 45 }
nicolas_guerrero 1:629f060522ce 46
nicolas_guerrero 0:3a659d0cc027 47 void nodraw()
nicolas_guerrero 1:629f060522ce 48 {
nicolas_guerrero 0:3a659d0cc027 49 z=coord2us(MAXPOS);
nicolas_guerrero 0:3a659d0cc027 50 motor_z.pulsewidth_us(z);
nicolas_guerrero 0:3a659d0cc027 51 wait(1);
nicolas_guerrero 0:3a659d0cc027 52 }
nicolas_guerrero 1:629f060522ce 53
nicolas_guerrero 0:3a659d0cc027 54 void vertex2d(float x, float y){
nicolas_guerrero 0:3a659d0cc027 55
nicolas_guerrero 0:3a659d0cc027 56 int pulseX = coord2us(x);
nicolas_guerrero 0:3a659d0cc027 57 int pulseY = coord2us(y);
nicolas_guerrero 0:3a659d0cc027 58
nicolas_guerrero 0:3a659d0cc027 59 motor_x.pulsewidth_us(pulseX);
nicolas_guerrero 0:3a659d0cc027 60 motor_y.pulsewidth_us(pulseY);
nicolas_guerrero 0:3a659d0cc027 61 wait_ms(SS_TIME);
nicolas_guerrero 0:3a659d0cc027 62
nicolas_guerrero 0:3a659d0cc027 63 }
nicolas_guerrero 0:3a659d0cc027 64 ///////////////////////////////////////////////////////
nicolas_guerrero 1:629f060522ce 65 void ejecutar()
nicolas_guerrero 1:629f060522ce 66 {
nicolas_guerrero 0:3a659d0cc027 67 MEM_TYPE bandera=0;
nicolas_guerrero 1:629f060522ce 68 if (mem_head==0) {pc.printf("no hay datos para ejecutar\r\n");}
nicolas_guerrero 1:629f060522ce 69 else
nicolas_guerrero 1:629f060522ce 70 {
nicolas_guerrero 1:629f060522ce 71 pc.printf("se esta ejecutando el dibujo...\r\n");
nicolas_guerrero 1:629f060522ce 72 for(i=0;i<mem_head-1;i++)
nicolas_guerrero 0:3a659d0cc027 73 {
nicolas_guerrero 1:629f060522ce 74 uint32_t speed=1500;
nicolas_guerrero 1:629f060522ce 75 smotor1.set_speed(speed);
nicolas_guerrero 1:629f060522ce 76 bandera=arreglo2[i];
nicolas_guerrero 1:629f060522ce 77 switch (bandera)
nicolas_guerrero 0:3a659d0cc027 78 {
nicolas_guerrero 1:629f060522ce 79 case CM_DRAW: draw();break;
nicolas_guerrero 1:629f060522ce 80 case CM_NODRAW: nodraw(); break;
nicolas_guerrero 1:629f060522ce 81 default:
nicolas_guerrero 1:629f060522ce 82 verificar = (uint8_t)(bandera>>16);
nicolas_guerrero 1:629f060522ce 83 int x = (uint8_t)(bandera>>8);
nicolas_guerrero 1:629f060522ce 84 int y = (uint8_t)(bandera);
nicolas_guerrero 1:629f060522ce 85 if (verificar==CM_SMOTOR){smotor1.step((uint32_t)x,(bool)y);}
nicolas_guerrero 1:629f060522ce 86 if (verificar==CM_VERTEX2D){vertex2d(x,y);}
nicolas_guerrero 1:629f060522ce 87 break;
nicolas_guerrero 0:3a659d0cc027 88 }
nicolas_guerrero 0:3a659d0cc027 89 }
nicolas_guerrero 0:3a659d0cc027 90 }
nicolas_guerrero 0:3a659d0cc027 91 }
nicolas_guerrero 1:629f060522ce 92 uint32_t read_command()
nicolas_guerrero 1:629f060522ce 93 {
nicolas_guerrero 1:629f060522ce 94
nicolas_guerrero 1:629f060522ce 95 uint32_t val=0;
nicolas_guerrero 1:629f060522ce 96 uint8_t cnt=0;
nicolas_guerrero 1:629f060522ce 97
nicolas_guerrero 1:629f060522ce 98 char endc=pc.getc();
nicolas_guerrero 1:629f060522ce 99
nicolas_guerrero 1:629f060522ce 100 while(endc != CM_END && cnt <4) {
nicolas_guerrero 1:629f060522ce 101 if(endc!=CM_END)
nicolas_guerrero 1:629f060522ce 102 val=((val<<8) +endc);
nicolas_guerrero 1:629f060522ce 103 endc=pc.getc();
nicolas_guerrero 1:629f060522ce 104 cnt++;
nicolas_guerrero 1:629f060522ce 105 }
nicolas_guerrero 1:629f060522ce 106 if(endc==CM_END)
nicolas_guerrero 1:629f060522ce 107 return val;
nicolas_guerrero 1:629f060522ce 108 return 0; //al retornar 0 indica que no se recibe el comando
nicolas_guerrero 1:629f060522ce 109 }
nicolas_guerrero 0:3a659d0cc027 110 /////////////////////////////////////////////////////////////
nicolas_guerrero 1:629f060522ce 111 void guardar()
nicolas_guerrero 1:629f060522ce 112 {
nicolas_guerrero 0:3a659d0cc027 113 pc.printf("se inicia el comado de guardar..\r\n");
nicolas_guerrero 0:3a659d0cc027 114 mem_head=0;
nicolas_guerrero 0:3a659d0cc027 115 do
nicolas_guerrero 0:3a659d0cc027 116 {
nicolas_guerrero 1:629f060522ce 117 pc.printf("entro while llenar\n\r");
nicolas_guerrero 1:629f060522ce 118 arreglo2[mem_head]= read_command();
nicolas_guerrero 0:3a659d0cc027 119 b=arreglo2[mem_head];
nicolas_guerrero 1:629f060522ce 120 pc.printf("posicion %i se lleno con %x\r\n",mem_head,arreglo2[mem_head]);
nicolas_guerrero 0:3a659d0cc027 121 mem_head++;
nicolas_guerrero 0:3a659d0cc027 122 }
nicolas_guerrero 0:3a659d0cc027 123 while(b!=CM_STOP);
nicolas_guerrero 0:3a659d0cc027 124
nicolas_guerrero 0:3a659d0cc027 125 }
nicolas_guerrero 1:629f060522ce 126 ///////////////////////////////////////////////////////
nicolas_guerrero 1:629f060522ce 127
nicolas_guerrero 0:3a659d0cc027 128
nicolas_guerrero 1:629f060522ce 129 int main()
nicolas_guerrero 1:629f060522ce 130 {
nicolas_guerrero 0:3a659d0cc027 131 // configuracion de periodo
nicolas_guerrero 0:3a659d0cc027 132 motor_x.period_ms(periodo);
nicolas_guerrero 0:3a659d0cc027 133 motor_y.period_ms(periodo);
nicolas_guerrero 0:3a659d0cc027 134 motor_z.period_ms(periodo);
nicolas_guerrero 1:629f060522ce 135 motor_x.pulsewidth_us(750);
nicolas_guerrero 1:629f060522ce 136 motor_y.pulsewidth_us(750);
nicolas_guerrero 2:2e94085cdc90 137 motor_z.pulsewidth_us(2650);
nicolas_guerrero 0:3a659d0cc027 138 char caracter;
nicolas_guerrero 1:629f060522ce 139 while(1)
nicolas_guerrero 0:3a659d0cc027 140 {
nicolas_guerrero 1:629f060522ce 141 caracter=read_command();
nicolas_guerrero 1:629f060522ce 142 switch (caracter)
nicolas_guerrero 1:629f060522ce 143 {
nicolas_guerrero 0:3a659d0cc027 144 case CM_EJECUTAR: ejecutar(); break;
nicolas_guerrero 0:3a659d0cc027 145 case CM_GUARDAR: guardar(); break;
nicolas_guerrero 1:629f060522ce 146 default: pc.printf("error de comando\r\n");break;
nicolas_guerrero 0:3a659d0cc027 147 }
nicolas_guerrero 0:3a659d0cc027 148 }
nicolas_guerrero 0:3a659d0cc027 149 }