servos matriz

Dependencies:   mbed

FUNCIONAMIENTO DE SERVOMOTORES Y MOTOR PASO A PASO CON INDICADOR EN MATRIZ 8X8 CON COMUNICACION SERIAL

MATERIALES

  • Tarjeta nucleo STM32F446RE
  • Servomotores
  • Motor paso a paso
  • Tarjeta controladora de motor paso a paso ULN2003APG
  • Matriz 8X8 con controlador MAX7219
  • Jumpers
  • Protoboard

/media/uploads/miguelmstein/20170427_151521.jpg Materiales

PROCEDIMIENTO

Se procede a conectar los servomotores a las salidas PWM de la tarjeta. El PINOUT esta definido en el código. Para el motor paso a paso se declaran 4 salidas digitales cualesquiera. La matriz se conecta a los pines de CLOCK, SSEL y MOSI.

Advertencia: Para alimentar los servo motores y el motor paso a paso se utilizo un fuente externa de 5V con tierra común a la tarjeta. La matriz si esta alimentada por la tarjeta.

El código muestra en la matriz la dirección y el número del motor el cual esta funcionando. Los datos de entrada van por serial utilizando el programa Advanced Serial Port Terminal para Windows.

El código es autoria de los desarrolladores del proyecto tomando como referencia el proyecto anteriormente publicado de funcionamiento de una matriz 8X8 con SPI, además del código de protocolo de comunicación serial y el funcionamiento de los servomotores extraidos del siguiente desarrollador. https://developer.mbed.org/users/fabeltranm/

Anotaciones y explicaciones en el código mismo

<</codigo>>

  1. include "mbed.h"

PC_12: DIN, PC_10: CLK, PA_15: LOAD/CS SPI max72_spi(PC_12, NC, PC_10); DigitalOut load1(PA_15); DigitalOut load2(PC_3);

DigitalOut A(PB_8); DigitalOut B(PB_9); DigitalOut C(PA_5); DigitalOut D(PA_6); DigitalIn dir(PC_13);

PwmOut mypwm(PA_0); PwmOut mypwm1(PA_1); PwmOut mypwm2(PB_0);

Serial command(USBTX, USBRX);

define registros de matriz MAX7219

  1. define max7219_reg_noop 0x00
  2. define max7219_reg_digit0 0x01
  3. define max7219_reg_digit1 0x02
  4. define max7219_reg_digit2 0x03
  5. define max7219_reg_digit3 0x04
  6. define max7219_reg_digit4 0x05
  7. define max7219_reg_digit5 0x06
  8. define max7219_reg_digit6 0x07
  9. define max7219_reg_digit7 0x08
  10. define max7219_reg_decodeMode 0x09
  11. define max7219_reg_intensity 0x0a
  12. define max7219_reg_scanLimit 0x0b
  13. define max7219_reg_shutdown 0x0c
  14. define max7219_reg_displayTest 0x0f
  1. define LOW 0
  2. define HIGH 1
  1. define DEBUG 1

*************** COMANDO MOVER MOTOR |POS 1|POS 2|POS 3|POS 4| POS 5| | < | #M | , | #°G | > | #M -> indica el motor que se va a mover #°G -> indica los grados a mover del servomotor <,> -> inicio, separdor y fin de comando el inicio de comando no se almacena en el buffer *****************

VARIABLES PARA DEFINIR EL COMMANDO

  1. define BUFF_SIZE 8
  2. define COMM_NUM_MOTOR 0
  3. define COMM_SEPARADOR 1
  4. define COMM_GRADOS_MOTOR 2
  5. define COMM_NUM_MOTOR1 3
  6. define COMM_GRADOS_MOTOR1 4
  7. define COMM_NUM_MOTOR2 5
  8. define COMM_GRADOS_MOTOR2 6

uint8_t buffer_command[BUFF_SIZE]={0,0,0,0,0,0};

void print_num(uint8_t val)

{ if (val <10) command.putc(val+0x30); else command.putc(val-9+0x40);

} void print_bin2hex (uint8_t val) { command.printf(" 0x"); print_num(val>>4); print_num(val&0x0f);

}

TODO : TIMEOUT UART SERIAL void Read_command() { for (uint8_t i=0; i<BUFF_SIZE;i++) buffer_command[i]=command.getc();

}

void echo_command() { for (uint8_t i=0; i<BUFF_SIZE;i++) print_bin2hex(buffer_command[i]);

}

uint8_t check_command() { if (buffer_command[BUFF_SIZE-1]== '>' && buffer_command[COMM_SEPARADOR]==','){

  1. if DEBUG command.printf("\nMover Motor:"); print_bin2hex(buffer_command[COMM_NUM_MOTOR]); command.printf(" -> "); print_bin2hex(buffer_command[COMM_GRADOS_MOTOR]); command.printf("N grados \n");
  2. endif return 1; }
  3. if DEBUG command.printf("\n ERROR COMANDO -> "); echo_command();
  4. endif return 0;

}

void maxOne( int reg, int col) { maxSingle es la funcion facil para usar una sola matriz max7219 load1 = LOW; comienza max72_spi.write(reg); especifica registro max72_spi.write(col); coloca datos load1 = HIGH; acegura que los datos estan cargados(en el cambio en alto de LOAD/CS) }

void setup () { iniciacion de la matriz MAX7219 configuracion SPI : 8 bits, modo 0 max72_spi.format(8, 0); maxOne(max7219_reg_scanLimit, 0x07); maxOne(max7219_reg_decodeMode, 0x00); usando una matriz led (sin digitos) maxOne(max7219_reg_shutdown, 0x01); no para modo apagado

for (int e=1; e<=8; e++) { registros vacios, apaga todos los LEDs maxOne(e,0);

}

maxOne(max7219_reg_intensity, 0x03 & 0x0f); con el primer registro se cambia intensidad luminica de la matriz. rango: 0x00 a 0x0f }

//////

void AN() {

maxOne(1,158); maxOne(2,69); maxOne(3,37); maxOne(4,30); maxOne(5,248); maxOne(6,36); maxOne(7,66); maxOne(8,241);

}

void CUg(){

maxOne(1,0); maxOne(2,240); maxOne(3,144); maxOne(4,240); maxOne(5,130); maxOne(6,242); maxOne(7,135); maxOne(8,2);

}

void NUg(){

maxOne(1,2); maxOne(2,247); maxOne(3,146); maxOne(4,242); maxOne(5,130); maxOne(6,242); maxOne(7,135); maxOne(8,2);

}

void COUg(){

maxOne(1,2); maxOne(2,247); maxOne(3,146); maxOne(4,242); maxOne(5,128); maxOne(6,240); maxOne(7,128); maxOne(8,0);

}

void CDg(){

maxOne(1,0); maxOne(2,240); maxOne(3,144); maxOne(4,240); maxOne(5,146); maxOne(6,210); maxOne(7,183); maxOne(8,2);

}

void NDg(){

maxOne(1,2); maxOne(2,247); maxOne(3,146); maxOne(4,242); maxOne(5,146); maxOne(6,210); maxOne(7,183); maxOne(8,2);

}

void CODg(){

maxOne(1,2); maxOne(2,247); maxOne(3,146); maxOne(4,242); maxOne(5,144); maxOne(6,208); maxOne(7,176); maxOne(8,0);

}

void CRg(){

maxOne(1,0); maxOne(2,248); maxOne(3,136); maxOne(4,248); maxOne(5,138); maxOne(6,170); maxOne(7,223); maxOne(8,2);

}

void NRg(){

maxOne(1,2); maxOne(2,255); maxOne(3,138); maxOne(4,250); maxOne(5,138); maxOne(6,170); maxOne(7,223); maxOne(8,2);

}

void CORg(){

maxOne(1,2); maxOne(2,255); maxOne(3,138); maxOne(4,250); maxOne(5,136); maxOne(6,168); maxOne(7,216); maxOne(8,0);

}

void PASOD(){

maxOne(1,0); maxOne(2,240); maxOne(3,144); maxOne(4,240); maxOne(5,114); maxOne(6,66); maxOne(7,247); maxOne(8,2);

}

void PASOI(){

maxOne(1,2); maxOne(2,247); maxOne(3,146); maxOne(4,242); maxOne(5,112); maxOne(6,64); maxOne(7,240); maxOne(8,0);

}

void command_motor(uint8_t nm,uint8_t grado) {

unsigned int g = grado*10+640;

if (nm==0x01){

if (grado==0x5a){

mypwm.pulsewidth_us(g);

NUg();

}

else if (grado<0x5a){

mypwm.pulsewidth_us(g);

CUg();

}

else{

mypwm.pulsewidth_us(g);

COUg(); }

}

else if (nm==0x02){

if (grado==0x5a){

mypwm1.pulsewidth_us(g);

NDg();

}

else if (grado<0x5a){

mypwm1.pulsewidth_us(g);

CDg();

}

else{

mypwm1.pulsewidth_us(g);

CODg(); }

}

else if (nm==0x03){

if (grado==0x5a){

mypwm2.pulsewidth_us(g);

NRg();

}

else if (grado<0x5a){

mypwm2.pulsewidth_us(g);

CRg();

}

else{

mypwm2.pulsewidth_us(g);

CORg(); }

}

else if(nm==0x04){

unsigned int p = grado*10;

if(dir==0x01){

PASOD();

for(int i=0; i<p; i++){

A=1; B=0; C=0; D=0; wait_us(950); A=1; B=1; C=0; D=0; wait_us(950); A=0; B=1; C=0; D=0; wait_us(950); A=0; B=1; C=1; D=0; wait_us(950); A=0; B=0; C=1; D=0; wait_us(950); A=0; B=0; C=1; D=1; wait_us(950); A=0; B=0; C=0; D=1; wait_us(950); A=1; B=0; C=0; D=1; wait_us(950); } }

else{

PASOI();

for(int i=0; i<p; i++){

A=0; B=0; C=0; D=1; wait_us(950); A=0; B=0; C=1; D=1; wait_us(950); A=0; B=0; C=1; D=0; wait_us(950); A=0; B=1; C=1; D=0; wait_us(950); A=0; B=1; C=0; D=0; wait_us(950); A=1; B=1; C=0; D=0; wait_us(950); A=1; B=0; C=0; D=0; wait_us(950); A=1; B=0; C=0; D=1; wait_us(950); } }

}

}

int main() {

  1. if DEBUG command.printf("Brandon\n");
  2. else command.printf("inicio sin debug\n");
  3. endif uint8_t val;

mypwm.period_ms(20); mypwm1.period_ms(20); mypwm2.period_ms(20); setup (); while (1){

val=command.getc(); if (val== '<'){ Read_command(); if (check_command()){ command_motor(buffer_command[COMM_NUM_MOTOR],buffer_command[COMM_GRADOS_MOTOR]); command_motor(buffer_command[COMM_NUM_MOTOR1],buffer_command[COMM_GRADOS_MOTOR1]); command_motor(buffer_command[COMM_NUM_MOTOR2],buffer_command[COMM_GRADOS_MOTOR2]);

} }

} }

Committer:
miguelmstein
Date:
Fri May 05 02:01:31 2017 +0000
Revision:
1:101a20f9eed2
Parent:
0:84edf6b90d7e
piccolo;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
miguelmstein 0:84edf6b90d7e 1 #include "mbed.h"
miguelmstein 0:84edf6b90d7e 2
miguelmstein 0:84edf6b90d7e 3 // PC_12: DIN, PC_10: CLK, PA_15: LOAD/CS
miguelmstein 0:84edf6b90d7e 4 SPI max72_spi(PC_12, NC, PC_10);
miguelmstein 0:84edf6b90d7e 5 DigitalOut load1(PA_15);
miguelmstein 0:84edf6b90d7e 6 DigitalOut load2(PC_3);
miguelmstein 0:84edf6b90d7e 7
miguelmstein 1:101a20f9eed2 8
miguelmstein 1:101a20f9eed2 9 DigitalOut A(PB_8);
miguelmstein 1:101a20f9eed2 10 DigitalOut B(PB_9);
miguelmstein 1:101a20f9eed2 11 DigitalOut C(PA_5);
miguelmstein 1:101a20f9eed2 12 DigitalOut D(PA_6);
miguelmstein 1:101a20f9eed2 13 DigitalIn dir(PC_13);
miguelmstein 1:101a20f9eed2 14
miguelmstein 0:84edf6b90d7e 15 PwmOut mypwm(PA_0);
miguelmstein 0:84edf6b90d7e 16 PwmOut mypwm1(PA_1);
miguelmstein 1:101a20f9eed2 17 PwmOut mypwm2(PB_0);
miguelmstein 1:101a20f9eed2 18
miguelmstein 1:101a20f9eed2 19 Serial command(USBTX, USBRX);
miguelmstein 1:101a20f9eed2 20
miguelmstein 0:84edf6b90d7e 21
miguelmstein 0:84edf6b90d7e 22 // define registros de matriz MAX7219
miguelmstein 0:84edf6b90d7e 23 #define max7219_reg_noop 0x00
miguelmstein 0:84edf6b90d7e 24 #define max7219_reg_digit0 0x01
miguelmstein 0:84edf6b90d7e 25 #define max7219_reg_digit1 0x02
miguelmstein 0:84edf6b90d7e 26 #define max7219_reg_digit2 0x03
miguelmstein 0:84edf6b90d7e 27 #define max7219_reg_digit3 0x04
miguelmstein 0:84edf6b90d7e 28 #define max7219_reg_digit4 0x05
miguelmstein 0:84edf6b90d7e 29 #define max7219_reg_digit5 0x06
miguelmstein 0:84edf6b90d7e 30 #define max7219_reg_digit6 0x07
miguelmstein 0:84edf6b90d7e 31 #define max7219_reg_digit7 0x08
miguelmstein 0:84edf6b90d7e 32 #define max7219_reg_decodeMode 0x09
miguelmstein 0:84edf6b90d7e 33 #define max7219_reg_intensity 0x0a
miguelmstein 0:84edf6b90d7e 34 #define max7219_reg_scanLimit 0x0b
miguelmstein 0:84edf6b90d7e 35 #define max7219_reg_shutdown 0x0c
miguelmstein 0:84edf6b90d7e 36 #define max7219_reg_displayTest 0x0f
miguelmstein 0:84edf6b90d7e 37
miguelmstein 0:84edf6b90d7e 38 #define LOW 0
miguelmstein 0:84edf6b90d7e 39 #define HIGH 1
miguelmstein 0:84edf6b90d7e 40
miguelmstein 1:101a20f9eed2 41
miguelmstein 1:101a20f9eed2 42
miguelmstein 1:101a20f9eed2 43
miguelmstein 1:101a20f9eed2 44 #define DEBUG 1
miguelmstein 1:101a20f9eed2 45
miguelmstein 1:101a20f9eed2 46 //*****************************************************************************
miguelmstein 1:101a20f9eed2 47 // COMANDO MOVER MOTOR
miguelmstein 1:101a20f9eed2 48 // |POS 1|POS 2|POS 3|POS 4| POS 5|
miguelmstein 1:101a20f9eed2 49 // | < | #M | , | #°G | > |
miguelmstein 1:101a20f9eed2 50 //
miguelmstein 1:101a20f9eed2 51 // #M -> indica el motor que se va a mover
miguelmstein 1:101a20f9eed2 52 // #°G -> indica los grados a mover del servomotor
miguelmstein 1:101a20f9eed2 53 // <,> -> inicio, separdor y fin de comando
miguelmstein 1:101a20f9eed2 54 // el inicio de comando no se almacena en el buffer
miguelmstein 1:101a20f9eed2 55 //*****************************************************************************
miguelmstein 1:101a20f9eed2 56
miguelmstein 1:101a20f9eed2 57 // VARIABLES PARA DEFINIR EL COMMANDO
miguelmstein 1:101a20f9eed2 58 #define BUFF_SIZE 8
miguelmstein 1:101a20f9eed2 59 #define COMM_NUM_MOTOR 0
miguelmstein 1:101a20f9eed2 60 #define COMM_SEPARADOR 1
miguelmstein 1:101a20f9eed2 61 #define COMM_GRADOS_MOTOR 2
miguelmstein 1:101a20f9eed2 62 #define COMM_NUM_MOTOR1 3
miguelmstein 1:101a20f9eed2 63 #define COMM_GRADOS_MOTOR1 4
miguelmstein 1:101a20f9eed2 64 #define COMM_NUM_MOTOR2 5
miguelmstein 1:101a20f9eed2 65 #define COMM_GRADOS_MOTOR2 6
miguelmstein 1:101a20f9eed2 66
miguelmstein 1:101a20f9eed2 67 uint8_t buffer_command[BUFF_SIZE]={0,0,0,0,0,0};
miguelmstein 1:101a20f9eed2 68
miguelmstein 1:101a20f9eed2 69 void print_num(uint8_t val)
miguelmstein 1:101a20f9eed2 70
miguelmstein 1:101a20f9eed2 71 {
miguelmstein 1:101a20f9eed2 72 if (val <10)
miguelmstein 1:101a20f9eed2 73 command.putc(val+0x30);
miguelmstein 1:101a20f9eed2 74 else
miguelmstein 1:101a20f9eed2 75 command.putc(val-9+0x40);
miguelmstein 1:101a20f9eed2 76
miguelmstein 1:101a20f9eed2 77 }
miguelmstein 1:101a20f9eed2 78 void print_bin2hex (uint8_t val)
miguelmstein 1:101a20f9eed2 79 {
miguelmstein 1:101a20f9eed2 80 command.printf(" 0x");
miguelmstein 1:101a20f9eed2 81 print_num(val>>4);
miguelmstein 1:101a20f9eed2 82 print_num(val&0x0f);
miguelmstein 1:101a20f9eed2 83
miguelmstein 1:101a20f9eed2 84
miguelmstein 1:101a20f9eed2 85 }
miguelmstein 1:101a20f9eed2 86
miguelmstein 1:101a20f9eed2 87 // TODO : TIMEOUT UART SERIAL
miguelmstein 1:101a20f9eed2 88 void Read_command()
miguelmstein 1:101a20f9eed2 89 {
miguelmstein 1:101a20f9eed2 90 for (uint8_t i=0; i<BUFF_SIZE;i++)
miguelmstein 1:101a20f9eed2 91 buffer_command[i]=command.getc();
miguelmstein 1:101a20f9eed2 92
miguelmstein 1:101a20f9eed2 93 }
miguelmstein 1:101a20f9eed2 94
miguelmstein 1:101a20f9eed2 95 void echo_command()
miguelmstein 1:101a20f9eed2 96 {
miguelmstein 1:101a20f9eed2 97 for (uint8_t i=0; i<BUFF_SIZE;i++)
miguelmstein 1:101a20f9eed2 98 print_bin2hex(buffer_command[i]);
miguelmstein 1:101a20f9eed2 99
miguelmstein 1:101a20f9eed2 100 }
miguelmstein 1:101a20f9eed2 101
miguelmstein 1:101a20f9eed2 102 uint8_t check_command()
miguelmstein 1:101a20f9eed2 103 {
miguelmstein 1:101a20f9eed2 104 if (buffer_command[BUFF_SIZE-1]== '>' && buffer_command[COMM_SEPARADOR]==','){
miguelmstein 1:101a20f9eed2 105
miguelmstein 1:101a20f9eed2 106 #if DEBUG
miguelmstein 1:101a20f9eed2 107 command.printf("\nMover Motor:");
miguelmstein 1:101a20f9eed2 108 print_bin2hex(buffer_command[COMM_NUM_MOTOR]);
miguelmstein 1:101a20f9eed2 109 command.printf(" -> ");
miguelmstein 1:101a20f9eed2 110 print_bin2hex(buffer_command[COMM_GRADOS_MOTOR]);
miguelmstein 1:101a20f9eed2 111 command.printf("N grados \n");
miguelmstein 1:101a20f9eed2 112 #endif
miguelmstein 1:101a20f9eed2 113 return 1;
miguelmstein 1:101a20f9eed2 114 }
miguelmstein 1:101a20f9eed2 115 #if DEBUG
miguelmstein 1:101a20f9eed2 116 command.printf("\n ERROR COMANDO -> ");
miguelmstein 1:101a20f9eed2 117 echo_command();
miguelmstein 1:101a20f9eed2 118 #endif
miguelmstein 1:101a20f9eed2 119 return 0;
miguelmstein 1:101a20f9eed2 120
miguelmstein 1:101a20f9eed2 121 }
miguelmstein 1:101a20f9eed2 122
miguelmstein 1:101a20f9eed2 123
miguelmstein 1:101a20f9eed2 124
miguelmstein 1:101a20f9eed2 125
miguelmstein 1:101a20f9eed2 126
miguelmstein 0:84edf6b90d7e 127 void maxOne( int reg, int col) {
miguelmstein 0:84edf6b90d7e 128 //maxSingle es la funcion facil para usar una sola matriz max7219
miguelmstein 0:84edf6b90d7e 129 load1 = LOW; // comienza
miguelmstein 0:84edf6b90d7e 130 max72_spi.write(reg); // especifica registro
miguelmstein 0:84edf6b90d7e 131 max72_spi.write(col); // coloca datos
miguelmstein 0:84edf6b90d7e 132 load1 = HIGH; // acegura que los datos estan cargados(en el cambio en alto de LOAD/CS)
miguelmstein 0:84edf6b90d7e 133 }
miguelmstein 0:84edf6b90d7e 134
miguelmstein 0:84edf6b90d7e 135
miguelmstein 0:84edf6b90d7e 136 void setup () {
miguelmstein 0:84edf6b90d7e 137 // iniciacion de la matriz MAX7219
miguelmstein 0:84edf6b90d7e 138 // configuracion SPI : 8 bits, modo 0
miguelmstein 0:84edf6b90d7e 139 max72_spi.format(8, 0);
miguelmstein 0:84edf6b90d7e 140 maxOne(max7219_reg_scanLimit, 0x07);
miguelmstein 0:84edf6b90d7e 141 maxOne(max7219_reg_decodeMode, 0x00); // usando una matriz led (sin digitos)
miguelmstein 0:84edf6b90d7e 142 maxOne(max7219_reg_shutdown, 0x01); // no para modo apagado
miguelmstein 0:84edf6b90d7e 143
miguelmstein 0:84edf6b90d7e 144
miguelmstein 0:84edf6b90d7e 145
miguelmstein 0:84edf6b90d7e 146
miguelmstein 0:84edf6b90d7e 147 for (int e=1; e<=8; e++) { // registros vacios, apaga todos los LEDs
miguelmstein 0:84edf6b90d7e 148 maxOne(e,0);
miguelmstein 1:101a20f9eed2 149
miguelmstein 0:84edf6b90d7e 150 }
miguelmstein 0:84edf6b90d7e 151
miguelmstein 0:84edf6b90d7e 152 maxOne(max7219_reg_intensity, 0x03 & 0x0f); // con el primer registro se cambia intensidad luminica de la matriz. rango: 0x00 a 0x0f
miguelmstein 1:101a20f9eed2 153 }
miguelmstein 0:84edf6b90d7e 154
miguelmstein 0:84edf6b90d7e 155 //////////////////////////////
miguelmstein 0:84edf6b90d7e 156
miguelmstein 0:84edf6b90d7e 157 void AN() {
miguelmstein 0:84edf6b90d7e 158
miguelmstein 0:84edf6b90d7e 159 maxOne(1,158);
miguelmstein 0:84edf6b90d7e 160 maxOne(2,69);
miguelmstein 0:84edf6b90d7e 161 maxOne(3,37);
miguelmstein 0:84edf6b90d7e 162 maxOne(4,30);
miguelmstein 0:84edf6b90d7e 163 maxOne(5,248);
miguelmstein 0:84edf6b90d7e 164 maxOne(6,36);
miguelmstein 0:84edf6b90d7e 165 maxOne(7,66);
miguelmstein 0:84edf6b90d7e 166 maxOne(8,241);
miguelmstein 0:84edf6b90d7e 167
miguelmstein 0:84edf6b90d7e 168 }
miguelmstein 0:84edf6b90d7e 169
miguelmstein 1:101a20f9eed2 170 void CUg(){
miguelmstein 0:84edf6b90d7e 171
miguelmstein 1:101a20f9eed2 172 maxOne(1,0);
miguelmstein 1:101a20f9eed2 173 maxOne(2,240);
miguelmstein 1:101a20f9eed2 174 maxOne(3,144);
miguelmstein 1:101a20f9eed2 175 maxOne(4,240);
miguelmstein 1:101a20f9eed2 176 maxOne(5,130);
miguelmstein 1:101a20f9eed2 177 maxOne(6,242);
miguelmstein 1:101a20f9eed2 178 maxOne(7,135);
miguelmstein 1:101a20f9eed2 179 maxOne(8,2);
miguelmstein 1:101a20f9eed2 180
miguelmstein 1:101a20f9eed2 181 }
miguelmstein 0:84edf6b90d7e 182
miguelmstein 1:101a20f9eed2 183 void NUg(){
miguelmstein 0:84edf6b90d7e 184
miguelmstein 1:101a20f9eed2 185 maxOne(1,2);
miguelmstein 1:101a20f9eed2 186 maxOne(2,247);
miguelmstein 1:101a20f9eed2 187 maxOne(3,146);
miguelmstein 1:101a20f9eed2 188 maxOne(4,242);
miguelmstein 1:101a20f9eed2 189 maxOne(5,130);
miguelmstein 1:101a20f9eed2 190 maxOne(6,242);
miguelmstein 1:101a20f9eed2 191 maxOne(7,135);
miguelmstein 1:101a20f9eed2 192 maxOne(8,2);
miguelmstein 1:101a20f9eed2 193
miguelmstein 1:101a20f9eed2 194 }
miguelmstein 1:101a20f9eed2 195
miguelmstein 1:101a20f9eed2 196 void COUg(){
miguelmstein 1:101a20f9eed2 197
miguelmstein 1:101a20f9eed2 198 maxOne(1,2);
miguelmstein 1:101a20f9eed2 199 maxOne(2,247);
miguelmstein 1:101a20f9eed2 200 maxOne(3,146);
miguelmstein 1:101a20f9eed2 201 maxOne(4,242);
miguelmstein 1:101a20f9eed2 202 maxOne(5,128);
miguelmstein 1:101a20f9eed2 203 maxOne(6,240);
miguelmstein 1:101a20f9eed2 204 maxOne(7,128);
miguelmstein 1:101a20f9eed2 205 maxOne(8,0);
miguelmstein 0:84edf6b90d7e 206
miguelmstein 1:101a20f9eed2 207
miguelmstein 1:101a20f9eed2 208 }
miguelmstein 0:84edf6b90d7e 209
miguelmstein 1:101a20f9eed2 210 void CDg(){
miguelmstein 1:101a20f9eed2 211
miguelmstein 0:84edf6b90d7e 212 maxOne(1,0);
miguelmstein 1:101a20f9eed2 213 maxOne(2,240);
miguelmstein 1:101a20f9eed2 214 maxOne(3,144);
miguelmstein 1:101a20f9eed2 215 maxOne(4,240);
miguelmstein 1:101a20f9eed2 216 maxOne(5,146);
miguelmstein 1:101a20f9eed2 217 maxOne(6,210);
miguelmstein 1:101a20f9eed2 218 maxOne(7,183);
miguelmstein 1:101a20f9eed2 219 maxOne(8,2);
miguelmstein 1:101a20f9eed2 220
miguelmstein 1:101a20f9eed2 221 }
miguelmstein 1:101a20f9eed2 222
miguelmstein 1:101a20f9eed2 223 void NDg(){
miguelmstein 1:101a20f9eed2 224
miguelmstein 1:101a20f9eed2 225 maxOne(1,2);
miguelmstein 1:101a20f9eed2 226 maxOne(2,247);
miguelmstein 1:101a20f9eed2 227 maxOne(3,146);
miguelmstein 1:101a20f9eed2 228 maxOne(4,242);
miguelmstein 1:101a20f9eed2 229 maxOne(5,146);
miguelmstein 1:101a20f9eed2 230 maxOne(6,210);
miguelmstein 1:101a20f9eed2 231 maxOne(7,183);
miguelmstein 1:101a20f9eed2 232 maxOne(8,2);
miguelmstein 1:101a20f9eed2 233
miguelmstein 1:101a20f9eed2 234 }
miguelmstein 1:101a20f9eed2 235
miguelmstein 1:101a20f9eed2 236 void CODg(){
miguelmstein 1:101a20f9eed2 237
miguelmstein 1:101a20f9eed2 238 maxOne(1,2);
miguelmstein 1:101a20f9eed2 239 maxOne(2,247);
miguelmstein 1:101a20f9eed2 240 maxOne(3,146);
miguelmstein 1:101a20f9eed2 241 maxOne(4,242);
miguelmstein 1:101a20f9eed2 242 maxOne(5,144);
miguelmstein 1:101a20f9eed2 243 maxOne(6,208);
miguelmstein 1:101a20f9eed2 244 maxOne(7,176);
miguelmstein 1:101a20f9eed2 245 maxOne(8,0);
miguelmstein 1:101a20f9eed2 246
miguelmstein 1:101a20f9eed2 247 }
miguelmstein 1:101a20f9eed2 248
miguelmstein 1:101a20f9eed2 249 void CRg(){
miguelmstein 1:101a20f9eed2 250
miguelmstein 1:101a20f9eed2 251 maxOne(1,0);
miguelmstein 1:101a20f9eed2 252 maxOne(2,248);
miguelmstein 1:101a20f9eed2 253 maxOne(3,136);
miguelmstein 1:101a20f9eed2 254 maxOne(4,248);
miguelmstein 0:84edf6b90d7e 255 maxOne(5,138);
miguelmstein 1:101a20f9eed2 256 maxOne(6,170);
miguelmstein 1:101a20f9eed2 257 maxOne(7,223);
miguelmstein 0:84edf6b90d7e 258 maxOne(8,2);
miguelmstein 1:101a20f9eed2 259
miguelmstein 1:101a20f9eed2 260 }
miguelmstein 1:101a20f9eed2 261
miguelmstein 1:101a20f9eed2 262 void NRg(){
miguelmstein 1:101a20f9eed2 263
miguelmstein 1:101a20f9eed2 264 maxOne(1,2);
miguelmstein 1:101a20f9eed2 265 maxOne(2,255);
miguelmstein 1:101a20f9eed2 266 maxOne(3,138);
miguelmstein 1:101a20f9eed2 267 maxOne(4,250);
miguelmstein 1:101a20f9eed2 268 maxOne(5,138);
miguelmstein 1:101a20f9eed2 269 maxOne(6,170);
miguelmstein 1:101a20f9eed2 270 maxOne(7,223);
miguelmstein 1:101a20f9eed2 271 maxOne(8,2);
miguelmstein 1:101a20f9eed2 272
miguelmstein 1:101a20f9eed2 273 }
miguelmstein 0:84edf6b90d7e 274
miguelmstein 1:101a20f9eed2 275 void CORg(){
miguelmstein 1:101a20f9eed2 276
miguelmstein 1:101a20f9eed2 277 maxOne(1,2);
miguelmstein 1:101a20f9eed2 278 maxOne(2,255);
miguelmstein 1:101a20f9eed2 279 maxOne(3,138);
miguelmstein 1:101a20f9eed2 280 maxOne(4,250);
miguelmstein 1:101a20f9eed2 281 maxOne(5,136);
miguelmstein 1:101a20f9eed2 282 maxOne(6,168);
miguelmstein 1:101a20f9eed2 283 maxOne(7,216);
miguelmstein 1:101a20f9eed2 284 maxOne(8,0);
miguelmstein 1:101a20f9eed2 285
miguelmstein 1:101a20f9eed2 286 }
miguelmstein 1:101a20f9eed2 287
miguelmstein 1:101a20f9eed2 288 void PASOD(){
miguelmstein 1:101a20f9eed2 289
miguelmstein 1:101a20f9eed2 290 maxOne(1,0);
miguelmstein 1:101a20f9eed2 291 maxOne(2,240);
miguelmstein 1:101a20f9eed2 292 maxOne(3,144);
miguelmstein 1:101a20f9eed2 293 maxOne(4,240);
miguelmstein 1:101a20f9eed2 294 maxOne(5,114);
miguelmstein 1:101a20f9eed2 295 maxOne(6,66);
miguelmstein 1:101a20f9eed2 296 maxOne(7,247);
miguelmstein 1:101a20f9eed2 297 maxOne(8,2);
miguelmstein 1:101a20f9eed2 298
miguelmstein 1:101a20f9eed2 299 }
miguelmstein 1:101a20f9eed2 300
miguelmstein 1:101a20f9eed2 301 void PASOI(){
miguelmstein 1:101a20f9eed2 302
miguelmstein 1:101a20f9eed2 303 maxOne(1,2);
miguelmstein 1:101a20f9eed2 304 maxOne(2,247);
miguelmstein 1:101a20f9eed2 305 maxOne(3,146);
miguelmstein 1:101a20f9eed2 306 maxOne(4,242);
miguelmstein 1:101a20f9eed2 307 maxOne(5,112);
miguelmstein 1:101a20f9eed2 308 maxOne(6,64);
miguelmstein 1:101a20f9eed2 309 maxOne(7,240);
miguelmstein 1:101a20f9eed2 310 maxOne(8,0);
miguelmstein 1:101a20f9eed2 311
miguelmstein 0:84edf6b90d7e 312 }
miguelmstein 0:84edf6b90d7e 313
miguelmstein 0:84edf6b90d7e 314
miguelmstein 1:101a20f9eed2 315 void command_motor(uint8_t nm,uint8_t grado) {
miguelmstein 1:101a20f9eed2 316
miguelmstein 1:101a20f9eed2 317 unsigned int g = grado*10+640;
miguelmstein 1:101a20f9eed2 318
miguelmstein 1:101a20f9eed2 319 if (nm==0x01){
miguelmstein 1:101a20f9eed2 320
miguelmstein 1:101a20f9eed2 321 if (grado==0x5a){
miguelmstein 1:101a20f9eed2 322
miguelmstein 1:101a20f9eed2 323 mypwm.pulsewidth_us(g);
miguelmstein 1:101a20f9eed2 324
miguelmstein 1:101a20f9eed2 325 NUg();
miguelmstein 1:101a20f9eed2 326
miguelmstein 1:101a20f9eed2 327 }
miguelmstein 1:101a20f9eed2 328
miguelmstein 1:101a20f9eed2 329 else if (grado<0x5a){
miguelmstein 1:101a20f9eed2 330
miguelmstein 1:101a20f9eed2 331 mypwm.pulsewidth_us(g);
miguelmstein 1:101a20f9eed2 332
miguelmstein 1:101a20f9eed2 333 CUg();
miguelmstein 1:101a20f9eed2 334
miguelmstein 1:101a20f9eed2 335 }
miguelmstein 1:101a20f9eed2 336
miguelmstein 1:101a20f9eed2 337 else{
miguelmstein 1:101a20f9eed2 338
miguelmstein 1:101a20f9eed2 339 mypwm.pulsewidth_us(g);
miguelmstein 1:101a20f9eed2 340
miguelmstein 1:101a20f9eed2 341 COUg();
miguelmstein 1:101a20f9eed2 342 }
miguelmstein 1:101a20f9eed2 343
miguelmstein 1:101a20f9eed2 344 }
miguelmstein 1:101a20f9eed2 345
miguelmstein 1:101a20f9eed2 346 else if (nm==0x02){
miguelmstein 1:101a20f9eed2 347
miguelmstein 1:101a20f9eed2 348
miguelmstein 1:101a20f9eed2 349
miguelmstein 1:101a20f9eed2 350 if (grado==0x5a){
miguelmstein 1:101a20f9eed2 351
miguelmstein 1:101a20f9eed2 352 mypwm1.pulsewidth_us(g);
miguelmstein 1:101a20f9eed2 353
miguelmstein 1:101a20f9eed2 354 NDg();
miguelmstein 1:101a20f9eed2 355
miguelmstein 1:101a20f9eed2 356 }
miguelmstein 1:101a20f9eed2 357
miguelmstein 1:101a20f9eed2 358 else if (grado<0x5a){
miguelmstein 1:101a20f9eed2 359
miguelmstein 1:101a20f9eed2 360 mypwm1.pulsewidth_us(g);
miguelmstein 1:101a20f9eed2 361
miguelmstein 1:101a20f9eed2 362 CDg();
miguelmstein 1:101a20f9eed2 363
miguelmstein 1:101a20f9eed2 364 }
miguelmstein 1:101a20f9eed2 365
miguelmstein 1:101a20f9eed2 366 else{
miguelmstein 1:101a20f9eed2 367
miguelmstein 1:101a20f9eed2 368 mypwm1.pulsewidth_us(g);
miguelmstein 1:101a20f9eed2 369
miguelmstein 1:101a20f9eed2 370 CODg();
miguelmstein 1:101a20f9eed2 371 }
miguelmstein 1:101a20f9eed2 372
miguelmstein 1:101a20f9eed2 373
miguelmstein 1:101a20f9eed2 374 }
miguelmstein 1:101a20f9eed2 375
miguelmstein 1:101a20f9eed2 376 else if (nm==0x03){
miguelmstein 1:101a20f9eed2 377
miguelmstein 1:101a20f9eed2 378 if (grado==0x5a){
miguelmstein 0:84edf6b90d7e 379
miguelmstein 1:101a20f9eed2 380 mypwm2.pulsewidth_us(g);
miguelmstein 1:101a20f9eed2 381
miguelmstein 1:101a20f9eed2 382 NRg();
miguelmstein 1:101a20f9eed2 383
miguelmstein 1:101a20f9eed2 384 }
miguelmstein 1:101a20f9eed2 385
miguelmstein 1:101a20f9eed2 386 else if (grado<0x5a){
miguelmstein 1:101a20f9eed2 387
miguelmstein 1:101a20f9eed2 388 mypwm2.pulsewidth_us(g);
miguelmstein 1:101a20f9eed2 389
miguelmstein 1:101a20f9eed2 390 CRg();
miguelmstein 1:101a20f9eed2 391
miguelmstein 1:101a20f9eed2 392 }
miguelmstein 1:101a20f9eed2 393
miguelmstein 1:101a20f9eed2 394 else{
miguelmstein 1:101a20f9eed2 395
miguelmstein 1:101a20f9eed2 396 mypwm2.pulsewidth_us(g);
miguelmstein 1:101a20f9eed2 397
miguelmstein 1:101a20f9eed2 398 CORg();
miguelmstein 1:101a20f9eed2 399 }
miguelmstein 1:101a20f9eed2 400
miguelmstein 1:101a20f9eed2 401 }
miguelmstein 1:101a20f9eed2 402
miguelmstein 1:101a20f9eed2 403 else if(nm==0x04){
miguelmstein 1:101a20f9eed2 404
miguelmstein 1:101a20f9eed2 405 unsigned int p = grado*10;
miguelmstein 1:101a20f9eed2 406
miguelmstein 1:101a20f9eed2 407 if(dir==0x01){
miguelmstein 1:101a20f9eed2 408
miguelmstein 1:101a20f9eed2 409 PASOD();
miguelmstein 1:101a20f9eed2 410
miguelmstein 1:101a20f9eed2 411 for(int i=0; i<p; i++){
miguelmstein 1:101a20f9eed2 412
miguelmstein 1:101a20f9eed2 413 A=1;
miguelmstein 1:101a20f9eed2 414 B=0;
miguelmstein 1:101a20f9eed2 415 C=0;
miguelmstein 1:101a20f9eed2 416 D=0;
miguelmstein 1:101a20f9eed2 417 wait_us(950);
miguelmstein 1:101a20f9eed2 418 A=1;
miguelmstein 1:101a20f9eed2 419 B=1;
miguelmstein 1:101a20f9eed2 420 C=0;
miguelmstein 1:101a20f9eed2 421 D=0;
miguelmstein 1:101a20f9eed2 422 wait_us(950);
miguelmstein 1:101a20f9eed2 423 A=0;
miguelmstein 1:101a20f9eed2 424 B=1;
miguelmstein 1:101a20f9eed2 425 C=0;
miguelmstein 1:101a20f9eed2 426 D=0;
miguelmstein 1:101a20f9eed2 427 wait_us(950);
miguelmstein 1:101a20f9eed2 428 A=0;
miguelmstein 1:101a20f9eed2 429 B=1;
miguelmstein 1:101a20f9eed2 430 C=1;
miguelmstein 1:101a20f9eed2 431 D=0;
miguelmstein 1:101a20f9eed2 432 wait_us(950);
miguelmstein 1:101a20f9eed2 433 A=0;
miguelmstein 1:101a20f9eed2 434 B=0;
miguelmstein 1:101a20f9eed2 435 C=1;
miguelmstein 1:101a20f9eed2 436 D=0;
miguelmstein 1:101a20f9eed2 437 wait_us(950);
miguelmstein 1:101a20f9eed2 438 A=0;
miguelmstein 1:101a20f9eed2 439 B=0;
miguelmstein 1:101a20f9eed2 440 C=1;
miguelmstein 1:101a20f9eed2 441 D=1;
miguelmstein 1:101a20f9eed2 442 wait_us(950);
miguelmstein 1:101a20f9eed2 443 A=0;
miguelmstein 1:101a20f9eed2 444 B=0;
miguelmstein 1:101a20f9eed2 445 C=0;
miguelmstein 1:101a20f9eed2 446 D=1;
miguelmstein 1:101a20f9eed2 447 wait_us(950);
miguelmstein 1:101a20f9eed2 448 A=1;
miguelmstein 1:101a20f9eed2 449 B=0;
miguelmstein 1:101a20f9eed2 450 C=0;
miguelmstein 1:101a20f9eed2 451 D=1;
miguelmstein 1:101a20f9eed2 452 wait_us(950);
miguelmstein 1:101a20f9eed2 453 }
miguelmstein 1:101a20f9eed2 454 }
miguelmstein 1:101a20f9eed2 455
miguelmstein 1:101a20f9eed2 456 else{
miguelmstein 1:101a20f9eed2 457
miguelmstein 1:101a20f9eed2 458 PASOI();
miguelmstein 1:101a20f9eed2 459
miguelmstein 1:101a20f9eed2 460 for(int i=0; i<p; i++){
miguelmstein 1:101a20f9eed2 461
miguelmstein 1:101a20f9eed2 462 A=0;
miguelmstein 1:101a20f9eed2 463 B=0;
miguelmstein 1:101a20f9eed2 464 C=0;
miguelmstein 1:101a20f9eed2 465 D=1;
miguelmstein 1:101a20f9eed2 466 wait_us(950);
miguelmstein 1:101a20f9eed2 467 A=0;
miguelmstein 1:101a20f9eed2 468 B=0;
miguelmstein 1:101a20f9eed2 469 C=1;
miguelmstein 1:101a20f9eed2 470 D=1;
miguelmstein 1:101a20f9eed2 471 wait_us(950);
miguelmstein 1:101a20f9eed2 472 A=0;
miguelmstein 1:101a20f9eed2 473 B=0;
miguelmstein 1:101a20f9eed2 474 C=1;
miguelmstein 1:101a20f9eed2 475 D=0;
miguelmstein 1:101a20f9eed2 476 wait_us(950);
miguelmstein 1:101a20f9eed2 477 A=0;
miguelmstein 1:101a20f9eed2 478 B=1;
miguelmstein 1:101a20f9eed2 479 C=1;
miguelmstein 1:101a20f9eed2 480 D=0;
miguelmstein 1:101a20f9eed2 481 wait_us(950);
miguelmstein 1:101a20f9eed2 482 A=0;
miguelmstein 1:101a20f9eed2 483 B=1;
miguelmstein 1:101a20f9eed2 484 C=0;
miguelmstein 1:101a20f9eed2 485 D=0;
miguelmstein 1:101a20f9eed2 486 wait_us(950);
miguelmstein 1:101a20f9eed2 487 A=1;
miguelmstein 1:101a20f9eed2 488 B=1;
miguelmstein 1:101a20f9eed2 489 C=0;
miguelmstein 1:101a20f9eed2 490 D=0;
miguelmstein 1:101a20f9eed2 491 wait_us(950);
miguelmstein 1:101a20f9eed2 492 A=1;
miguelmstein 1:101a20f9eed2 493 B=0;
miguelmstein 1:101a20f9eed2 494 C=0;
miguelmstein 1:101a20f9eed2 495 D=0;
miguelmstein 1:101a20f9eed2 496 wait_us(950);
miguelmstein 1:101a20f9eed2 497 A=1;
miguelmstein 1:101a20f9eed2 498 B=0;
miguelmstein 1:101a20f9eed2 499 C=0;
miguelmstein 1:101a20f9eed2 500 D=1;
miguelmstein 1:101a20f9eed2 501 wait_us(950);
miguelmstein 1:101a20f9eed2 502 }
miguelmstein 1:101a20f9eed2 503 }
miguelmstein 1:101a20f9eed2 504
miguelmstein 1:101a20f9eed2 505
miguelmstein 1:101a20f9eed2 506 }
miguelmstein 1:101a20f9eed2 507
miguelmstein 0:84edf6b90d7e 508
miguelmstein 1:101a20f9eed2 509
miguelmstein 1:101a20f9eed2 510
miguelmstein 1:101a20f9eed2 511
miguelmstein 1:101a20f9eed2 512
miguelmstein 1:101a20f9eed2 513
miguelmstein 0:84edf6b90d7e 514 }
miguelmstein 1:101a20f9eed2 515
miguelmstein 0:84edf6b90d7e 516
miguelmstein 0:84edf6b90d7e 517 int main() {
miguelmstein 0:84edf6b90d7e 518
miguelmstein 1:101a20f9eed2 519 #if DEBUG
miguelmstein 1:101a20f9eed2 520 command.printf("Brandon\n");
miguelmstein 1:101a20f9eed2 521 #else
miguelmstein 1:101a20f9eed2 522 command.printf("inicio sin debug\n");
miguelmstein 1:101a20f9eed2 523 #endif
miguelmstein 1:101a20f9eed2 524 uint8_t val;
miguelmstein 1:101a20f9eed2 525
miguelmstein 0:84edf6b90d7e 526 mypwm.period_ms(20);
miguelmstein 1:101a20f9eed2 527 mypwm1.period_ms(20);
miguelmstein 1:101a20f9eed2 528 mypwm2.period_ms(20);
miguelmstein 0:84edf6b90d7e 529 setup ();
miguelmstein 0:84edf6b90d7e 530 while (1){
miguelmstein 0:84edf6b90d7e 531
miguelmstein 1:101a20f9eed2 532 val=command.getc();
miguelmstein 1:101a20f9eed2 533 if (val== '<'){
miguelmstein 1:101a20f9eed2 534 Read_command();
miguelmstein 1:101a20f9eed2 535 if (check_command()){
miguelmstein 1:101a20f9eed2 536 command_motor(buffer_command[COMM_NUM_MOTOR],buffer_command[COMM_GRADOS_MOTOR]);
miguelmstein 1:101a20f9eed2 537 command_motor(buffer_command[COMM_NUM_MOTOR1],buffer_command[COMM_GRADOS_MOTOR1]);
miguelmstein 1:101a20f9eed2 538 command_motor(buffer_command[COMM_NUM_MOTOR2],buffer_command[COMM_GRADOS_MOTOR2]);
miguelmstein 1:101a20f9eed2 539
miguelmstein 1:101a20f9eed2 540 }
miguelmstein 1:101a20f9eed2 541 }
miguelmstein 0:84edf6b90d7e 542
miguelmstein 0:84edf6b90d7e 543 }
miguelmstein 0:84edf6b90d7e 544 }