Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:da21a18f1ee8, 2017-10-12 (annotated)
- Committer:
- dienov
- Date:
- Thu Oct 12 02:16:21 2017 +0000
- Revision:
- 0:da21a18f1ee8
Telecomandos - Piccolo
Who changed what in which revision?
User | Revision | Line number | New 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 |