Diego Nova / Mbed 2 deprecated DEBUG1

Dependencies:   mbed

Committer:
dienov
Date:
Thu Oct 12 02:16:21 2017 +0000
Revision:
0:da21a18f1ee8
Telecomandos - Piccolo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dienov 0:da21a18f1ee8 1 #include "mbed.h"
dienov 0:da21a18f1ee8 2 #include "mbed.h"
dienov 0:da21a18f1ee8 3 #include "mbed.h"
dienov 0:da21a18f1ee8 4 #define MAXPOS 255
dienov 0:da21a18f1ee8 5
dienov 0:da21a18f1ee8 6 Serial command(USBTX, USBRX);
dienov 0:da21a18f1ee8 7 DigitalOut led(LED1);
dienov 0:da21a18f1ee8 8 #define DEBUG 1
dienov 0:da21a18f1ee8 9
dienov 0:da21a18f1ee8 10 //*****************************************************************************
dienov 0:da21a18f1ee8 11 // COMANDO MOVER MOTOR
dienov 0:da21a18f1ee8 12 // |POS 1|POS 2|POS 3|POS 4| POS 5|
dienov 0:da21a18f1ee8 13 // | < | #C | a | b | > |
dienov 0:da21a18f1ee8 14 //
dienov 0:da21a18f1ee8 15 // #C -> indica el comando
dienov 0:da21a18f1ee8 16 // a,b,c,d parametros del comando
dienov 0:da21a18f1ee8 17 // <,> -> inicio, y fin de comando
dienov 0:da21a18f1ee8 18 // el inicio de comando no se almacena en el buffer
dienov 0:da21a18f1ee8 19 //*****************************************************************************
dienov 0:da21a18f1ee8 20
dienov 0:da21a18f1ee8 21 // VARIABLES PARA DEFINIR EL COMMANDO
dienov 0:da21a18f1ee8 22 #define BUFF_SIZE 6
dienov 0:da21a18f1ee8 23 #define COMM_N 0
dienov 0:da21a18f1ee8 24 #define INITPARAMETER 1
dienov 0:da21a18f1ee8 25
dienov 0:da21a18f1ee8 26
dienov 0:da21a18f1ee8 27 // COMANDOS
dienov 0:da21a18f1ee8 28 #define PUNTO 0
dienov 0:da21a18f1ee8 29 #define LINEA 1
dienov 0:da21a18f1ee8 30 #define CUADRADO 2
dienov 0:da21a18f1ee8 31 #define CIRCULO 3
dienov 0:da21a18f1ee8 32 #define HOME 4
dienov 0:da21a18f1ee8 33
dienov 0:da21a18f1ee8 34 PwmOut servoX(PB_3);
dienov 0:da21a18f1ee8 35 PwmOut servoY(PB_5);
dienov 0:da21a18f1ee8 36 PwmOut servoZ(PB_4);
dienov 0:da21a18f1ee8 37
dienov 0:da21a18f1ee8 38
dienov 0:da21a18f1ee8 39 DigitalIn botoncirculo(PA_0);
dienov 0:da21a18f1ee8 40 DigitalIn botonpunto(PB_0);
dienov 0:da21a18f1ee8 41 DigitalIn botonlinea(PC_1);
dienov 0:da21a18f1ee8 42 DigitalIn botoncuadrado(PC_0);
dienov 0:da21a18f1ee8 43 float xvalue, yvalue, xiline,yiline,xfline,yfline;
dienov 0:da21a18f1ee8 44 int xisquare, yisquare,lenght,xlado,ylado;
dienov 0:da21a18f1ee8 45 double i,j,r;
dienov 0:da21a18f1ee8 46
dienov 0:da21a18f1ee8 47
dienov 0:da21a18f1ee8 48 int coord2pulse(float coord)
dienov 0:da21a18f1ee8 49 {
dienov 0:da21a18f1ee8 50 if(0 <= coord <= MAXPOS)
dienov 0:da21a18f1ee8 51 return int(coord*1000/150+750);
dienov 0:da21a18f1ee8 52 return 750;
dienov 0:da21a18f1ee8 53 }
dienov 0:da21a18f1ee8 54
dienov 0:da21a18f1ee8 55
dienov 0:da21a18f1ee8 56 void vertex2d(float x, float y, float z){
dienov 0:da21a18f1ee8 57
dienov 0:da21a18f1ee8 58 int pulseX = coord2pulse(x);
dienov 0:da21a18f1ee8 59 int pulseY = coord2pulse(y);
dienov 0:da21a18f1ee8 60 int pulseZ = coord2pulse(z);
dienov 0:da21a18f1ee8 61 servoX.pulsewidth_us(pulseX);
dienov 0:da21a18f1ee8 62 servoY.pulsewidth_us(pulseY);
dienov 0:da21a18f1ee8 63 servoZ.pulsewidth_us(pulseZ);
dienov 0:da21a18f1ee8 64 }
dienov 0:da21a18f1ee8 65
dienov 0:da21a18f1ee8 66 uint8_t buffer_command[BUFF_SIZE]={0,0,0,0,0,0};
dienov 0:da21a18f1ee8 67
dienov 0:da21a18f1ee8 68 void print_num(uint8_t val)
dienov 0:da21a18f1ee8 69
dienov 0:da21a18f1ee8 70 {
dienov 0:da21a18f1ee8 71 if (val <10)
dienov 0:da21a18f1ee8 72 command.putc(val+0x30);
dienov 0:da21a18f1ee8 73 else
dienov 0:da21a18f1ee8 74 command.putc(val-9+0x40);
dienov 0:da21a18f1ee8 75
dienov 0:da21a18f1ee8 76 }
dienov 0:da21a18f1ee8 77 void print_bin2hex (uint8_t val)
dienov 0:da21a18f1ee8 78 {
dienov 0:da21a18f1ee8 79 command.printf(" 0x");
dienov 0:da21a18f1ee8 80 print_num(val>>4);
dienov 0:da21a18f1ee8 81 print_num(val&0x0f);
dienov 0:da21a18f1ee8 82
dienov 0:da21a18f1ee8 83
dienov 0:da21a18f1ee8 84 }
dienov 0:da21a18f1ee8 85
dienov 0:da21a18f1ee8 86 // TODO : TIMEOUT UART SERIAL
dienov 0:da21a18f1ee8 87 void Read_command()
dienov 0:da21a18f1ee8 88 {
dienov 0:da21a18f1ee8 89 for (uint8_t i=0; i<BUFF_SIZE;i++)
dienov 0:da21a18f1ee8 90 buffer_command[i]=command.getc();
dienov 0:da21a18f1ee8 91
dienov 0:da21a18f1ee8 92 }
dienov 0:da21a18f1ee8 93
dienov 0:da21a18f1ee8 94 void echo_command()
dienov 0:da21a18f1ee8 95 {
dienov 0:da21a18f1ee8 96 for (uint8_t i=0; i<BUFF_SIZE;i++)
dienov 0:da21a18f1ee8 97 print_bin2hex(buffer_command[i]);
dienov 0:da21a18f1ee8 98
dienov 0:da21a18f1ee8 99 }
dienov 0:da21a18f1ee8 100
dienov 0:da21a18f1ee8 101
dienov 0:da21a18f1ee8 102 uint8_t check_command()
dienov 0:da21a18f1ee8 103 {
dienov 0:da21a18f1ee8 104 if (buffer_command[BUFF_SIZE-1]== '>')
dienov 0:da21a18f1ee8 105 return 1;
dienov 0:da21a18f1ee8 106 return 0;
dienov 0:da21a18f1ee8 107
dienov 0:da21a18f1ee8 108
dienov 0:da21a18f1ee8 109 }
dienov 0:da21a18f1ee8 110 void command_led(uint8_t tm)
dienov 0:da21a18f1ee8 111 {
dienov 0:da21a18f1ee8 112
dienov 0:da21a18f1ee8 113 //EJEMPLO DE COMANDO
dienov 0:da21a18f1ee8 114 #if DEBUG
dienov 0:da21a18f1ee8 115 command.printf("%i, segundos", tm);
dienov 0:da21a18f1ee8 116 #endif
dienov 0:da21a18f1ee8 117 led=1;
dienov 0:da21a18f1ee8 118 wait(tm);
dienov 0:da21a18f1ee8 119 led=0;
dienov 0:da21a18f1ee8 120
dienov 0:da21a18f1ee8 121 }
dienov 0:da21a18f1ee8 122
dienov 0:da21a18f1ee8 123
dienov 0:da21a18f1ee8 124
dienov 0:da21a18f1ee8 125 void linea(uint8_t xi, uint8_t yi,uint8_t xf,uint8_t yf)
dienov 0:da21a18f1ee8 126 {
dienov 0:da21a18f1ee8 127
dienov 0:da21a18f1ee8 128 vertex2d(xi,yi,240);
dienov 0:da21a18f1ee8 129 wait_ms(600);
dienov 0:da21a18f1ee8 130 vertex2d(xf,yf,240);
dienov 0:da21a18f1ee8 131 wait_ms(600);
dienov 0:da21a18f1ee8 132
dienov 0:da21a18f1ee8 133 }
dienov 0:da21a18f1ee8 134
dienov 0:da21a18f1ee8 135
dienov 0:da21a18f1ee8 136 void command_exe()
dienov 0:da21a18f1ee8 137 {
dienov 0:da21a18f1ee8 138 #if DEBUG
dienov 0:da21a18f1ee8 139 command.printf("Ejecutando comando: ");
dienov 0:da21a18f1ee8 140 #endif
dienov 0:da21a18f1ee8 141
dienov 0:da21a18f1ee8 142 switch (buffer_command[COMM_N]){
dienov 0:da21a18f1ee8 143
dienov 0:da21a18f1ee8 144 case (PUNTO):
dienov 0:da21a18f1ee8 145 linea(buffer_command[INITPARAMETER],buffer_command[INITPARAMETER+1],buffer_command[INITPARAMETER+2], buffer_command[INITPARAMETER+3]);
dienov 0:da21a18f1ee8 146 #if DEBUG
dienov 0:da21a18f1ee8 147 command.printf("Dibujado Punto\n");
dienov 0:da21a18f1ee8 148 #endif
dienov 0:da21a18f1ee8 149
dienov 0:da21a18f1ee8 150
dienov 0:da21a18f1ee8 151 break;
dienov 0:da21a18f1ee8 152
dienov 0:da21a18f1ee8 153 case (LINEA):
dienov 0:da21a18f1ee8 154 #if DEBUG
dienov 0:da21a18f1ee8 155 command.printf("Dibujando Linea\n");
dienov 0:da21a18f1ee8 156 #endif
dienov 0:da21a18f1ee8 157
dienov 0:da21a18f1ee8 158 break;
dienov 0:da21a18f1ee8 159
dienov 0:da21a18f1ee8 160 case CUADRADO:
dienov 0:da21a18f1ee8 161 #if DEBUG
dienov 0:da21a18f1ee8 162 command.printf("Dibujando Cuadrado\n");
dienov 0:da21a18f1ee8 163 #endif
dienov 0:da21a18f1ee8 164
dienov 0:da21a18f1ee8 165
dienov 0:da21a18f1ee8 166 break;
dienov 0:da21a18f1ee8 167
dienov 0:da21a18f1ee8 168 case CIRCULO:
dienov 0:da21a18f1ee8 169 #if DEBUG
dienov 0:da21a18f1ee8 170 command.printf("Dibujando Circulo\n");
dienov 0:da21a18f1ee8 171 #endif
dienov 0:da21a18f1ee8 172
dienov 0:da21a18f1ee8 173
dienov 0:da21a18f1ee8 174 break;
dienov 0:da21a18f1ee8 175
dienov 0:da21a18f1ee8 176 default:
dienov 0:da21a18f1ee8 177
dienov 0:da21a18f1ee8 178 #if DEBUG
dienov 0:da21a18f1ee8 179 command.printf("comando no encontrado\n");
dienov 0:da21a18f1ee8 180 #endif
dienov 0:da21a18f1ee8 181
dienov 0:da21a18f1ee8 182
dienov 0:da21a18f1ee8 183 }
dienov 0:da21a18f1ee8 184 }
dienov 0:da21a18f1ee8 185
dienov 0:da21a18f1ee8 186 int main() {
dienov 0:da21a18f1ee8 187 #if DEBUG
dienov 0:da21a18f1ee8 188 command.printf("inicio con debug\n");
dienov 0:da21a18f1ee8 189 #else
dienov 0:da21a18f1ee8 190 command.printf("inicio sin debug\n");
dienov 0:da21a18f1ee8 191 #endif
dienov 0:da21a18f1ee8 192 uint8_t val;
dienov 0:da21a18f1ee8 193 while(1){
dienov 0:da21a18f1ee8 194 val=command.getc();
dienov 0:da21a18f1ee8 195 if (val== '<'){
dienov 0:da21a18f1ee8 196 Read_command();
dienov 0:da21a18f1ee8 197 if (check_command()){
dienov 0:da21a18f1ee8 198 command_exe();
dienov 0:da21a18f1ee8 199 }else{
dienov 0:da21a18f1ee8 200 #if DEBUG
dienov 0:da21a18f1ee8 201 command.printf("\n ERROR COMANDO -> ");
dienov 0:da21a18f1ee8 202 echo_command();
dienov 0:da21a18f1ee8 203 #endif
dienov 0:da21a18f1ee8 204 }
dienov 0:da21a18f1ee8 205 }
dienov 0:da21a18f1ee8 206 else{
dienov 0:da21a18f1ee8 207 #if DEBUG
dienov 0:da21a18f1ee8 208 command.printf("error de inicio de trama: ");
dienov 0:da21a18f1ee8 209 command.putc(val);
dienov 0:da21a18f1ee8 210 #endif
dienov 0:da21a18f1ee8 211 }
dienov 0:da21a18f1ee8 212
dienov 0:da21a18f1ee8 213 }
dienov 0:da21a18f1ee8 214 }
dienov 0:da21a18f1ee8 215