Giro en su propio eje Presentado por: Julio Fajardo, Cesar Pacheco, Angel Trujillo, Daniel Vizcaya

Dependencies:   mbed

Fork of 01_Embebidos by Daniel Vizcaya

Revision:
6:87a37f4163bd
Parent:
5:8e100835b017
--- a/01_main.cpp	Wed Mar 14 05:17:52 2018 +0000
+++ b/01_main.cpp	Wed Apr 25 02:12:19 2018 +0000
@@ -1,150 +1,242 @@
 #include "mbed.h"
 #include "draw.h"
+#include "stepmotor.h"
+
 #define CM_EJECUTAR 0xFF
 #define CM_GUARDAR 0xFE
+#define CM_TRASLADAR 0xF9
 #define CM_VERTEX2D 0xFD
 #define CM_DRAW 0XFC
 #define CM_NODRAW 0xFB
 #define CM_STOP 0xFA
 #define CM_ENTER 0xF0
+#define CM_GIRO 0xF8
 
-#define MEM_SIZE 10
+#define MEM_SIZE 100
 #define MEM_TYPE uint32_t //significa que de ahora en más donde diga MEM_TYPE será tipo uint32_t
-
+#define PASOSxCUADRANTE 250 //4096
 uint8_t mem_head = 0;
 uint8_t mem_tail = 0;
+char temp;
 bool full = 0;
 
 MEM_TYPE buffer[MEM_SIZE];
+stepmotor smotor1(D9,D10,D11,D12);
+stepmotor smotor2(D2,D6,D7,D8);
 Serial command(USBTX, USBRX);
 
-void mem_free(){ //Estaba como uint32_t no como void
-    mem_head=0;
-    full=0;
+void girar(uint8_t sentido)
+{
+    command.printf(">>>> %d \n",sentido);
+    uint32_t speed = 1500;
+    smotor1.set_speed(speed);
+    smotor2.set_speed(speed);
+    if(sentido==1)
+    {
+        command.printf("pa la derecha!!\n");
+        smotor1.step(7* PASOSxCUADRANTE, 0);
+        smotor2.step(7 * PASOSxCUADRANTE, 1);
+        
+    }else
+    {
+        command.printf("pa la izquierda!\n");
+        smotor1.step(7 * PASOSxCUADRANTE, 1);
+        smotor2.step(7 * PASOSxCUADRANTE, 0);   
+    }
+    wait(2);
 }
 
-bool mem_put(MEM_TYPE data){ //Escribir
+void mem_free()
+{ //Estaba como uint32_t no como void
+    mem_head = 0; 
+    full = 0;
+}
+
+bool mem_put(MEM_TYPE data)
+{ //Escribir
     if (full)
         return 1;
     buffer[mem_head] = data; //carga en dato en el buffer
     mem_head += 1;
     if (mem_head == MEM_SIZE)
-        full =1;
+        full = 1;
     return 0;
 }
 
-bool mem_get(MEM_TYPE* data){ //Leer
+bool mem_get(MEM_TYPE *data)
+{ //Leer
     if (mem_head == 0)
-        return 1; 
+        return 1;
     if (mem_head == mem_tail)
-        return 1; 
+        return 1;
     *data = buffer[mem_tail];
     mem_tail += 1;
     return 0;
 }
 
-void ejecutar(){
-    command.printf("se inicia el comando de ejecutar...\n");
-    for(int j=0;j<=mem_head;j++){
-        command.printf("%x\n",buffer[j]);
+void ejecutar()
+{
+    command.printf("inicio de ejecutar...\n");
+    for (int j = 0; j <= mem_head - 1; j++)
+    {
+        command.printf("%x\n", buffer[j]);
+        if (buffer[j] == CM_NODRAW)
+        {
+            nodraw();
+        }
+        if (buffer[j] == CM_DRAW)
+        {
+            draw();
+        }
+        if (buffer[j] == CM_STOP)
+        {
+            mem_free();
+            return;
+        }
+        temp = buffer[j] >> 24 & 0xFF;
+        if (temp == CM_VERTEX2D)
+        {
+            uint8_t datoX = buffer[j] >> 16 & 0xFF;
+            uint8_t datoY = buffer[j] >> 8 & 0xFF;
+            vertex2d(datoX, datoY);
+            //wait(1);
+        }
+        if (temp == CM_TRASLADAR) //no mover si draw se encuentra activo
+        {
+            uint32_t speed = 1500;
+            smotor1.set_speed(speed);
+            smotor2.set_speed(speed);
+            uint32_t cuadrantes = buffer[j] >> 16 & 0xFF;
+            bool direccion = buffer[j] >> 8 & 0xFF;
+            smotor1.step(cuadrantes * PASOSxCUADRANTE, direccion);
+            smotor2.step(cuadrantes * PASOSxCUADRANTE, direccion);
+            wait(2);
+        }
     }
+    command.printf("fin de ejecutar...\n");
+    mem_free();
 }
 
-void guardar(){
-    command.printf("se inicia el comando de guardar...\n");
+void guardar()
+{
+    command.printf("inicio de guardar...\n");
     MEM_TYPE val; //significa que la variable "val" es del tipo uint32_t
-    char dato1,dato2;
-    do{
-        dato1=command.getc();
-        if(dato1==CM_STOP){
-            dato2=command.getc();
-            if(dato2==CM_ENTER){
-                val=dato1;
+    char dato1, dato2;
+    do
+    {
+        dato1 = command.getc();
+        if (dato1 == CM_STOP)
+        {
+            dato2 = command.getc();
+            if (dato2 == CM_ENTER)
+            {
+                val = dato1;
                 mem_put(val);
                 return;
             }
         }
-        if(dato1==CM_NODRAW|dato1==CM_DRAW){
-            dato2=command.getc();
-            if(dato2==CM_ENTER){
-                val=dato1;
+        if (dato1 == CM_NODRAW | dato1 == CM_DRAW)
+        {
+            dato2 = command.getc();
+            if (dato2 == CM_ENTER)
+            {
+                val = dato1;
                 mem_put(val);
             }
         }
-        if(dato1==CM_VERTEX2D){
-            dato2=command.getc();
-            if(dato2<=0x32){
-                val=CM_VERTEX2D;
-                val=val<<8;
-                val=val|dato2;
-                dato2=command.getc();
-                if(dato2<=0x32){
-                    val=val<<8;
-                    val=val|dato2;
-                    dato2=command.getc();
-                    if(dato2==CM_ENTER){
-                        val=val<<8;
-                        val=val|CM_ENTER;
+        if (dato1 == CM_VERTEX2D)
+        {
+            dato2 = command.getc();
+            if (dato2 <= 0x32)
+            {
+                val = CM_VERTEX2D;
+                val = val << 8;
+                val = val | dato2;
+                dato2 = command.getc();
+                if (dato2 <= 0x32)
+                {
+                    val = val << 8;
+                    val = val | dato2;
+                    dato2 = command.getc();
+                    if (dato2 == CM_ENTER)
+                    {
+                        val = val << 8;
+                        val = val | CM_ENTER;
+                        mem_put(val);
+                    }
+                }
+            }
+        }
+        if (dato1 == CM_TRASLADAR)
+        {
+            dato2 = command.getc();
+            if (dato2 <= 0xEF)
+            {
+                val = CM_TRASLADAR;
+                val = val << 8;
+                val = val | dato2;
+                dato2 = command.getc();
+                if (dato2 <= 1)
+                {
+                    val = val << 8;
+                    val = val | dato2;
+                    dato2 = command.getc();
+                    if (dato2 == CM_ENTER)
+                    {
+                        val = val << 8;
+                        val = val | CM_ENTER;
                         mem_put(val);
                     }
-                }  
-            }     
+                }
+            }
         }
-    }while(!full);        
+    } while (!full);
+    command.printf("fin de guardar...\n");
 }
 
-int main(){
-    init_servo();
+int main()
+{
     command.baud(9600);
-    home(); //llama a no_draw y va a 0,0
-   
+    init_servo();
+    //home(); //llama a no_draw y va a 0,0
+
     char read_cc;
-    while(1){
-        read_cc=command.getc();
-        switch (read_cc){
-            case CM_GUARDAR: guardar(); break; //FE
-            case CM_EJECUTAR: ejecutar(); break;  //FF
-            default: command.printf("Error de comando \n");break;      
+    while (1)
+    {
+        read_cc = command.getc();
+        switch (read_cc)
+        {
+        case CM_GUARDAR:
+            if (read_cc = command.getc() == CM_ENTER)
+            {
+                guardar();
+            }
+            break; //FE
+        case CM_EJECUTAR:
+            if (read_cc = command.getc() == CM_ENTER)
+            {
+                ejecutar();
+            }
+            break; //FF
+        case CM_GIRO:
+            uint8_t sentido = command.getc();
+            if (sentido <= 1)
+            {
+                read_cc = command.getc();
+                if (read_cc = command.getc() == CM_ENTER)
+                {
+                    girar(sentido);
+            } 
+            }   
+            break; //F8
+        default:
+            command.printf("Paila \n");
+            break;
         }
-    }  
+    }
 }
 /*
-FE FB FD 00 00 F0
-FC F0 FD 32 00 F0
-FD 32 32 F0 FD 00
-32 F0 FD 00 00 F0
-FB F0 FA F0 FF
-
-FE F0 FD 54 32 F0 FC F0 FD 32 00 F0 FD 32 32 F0 FD 00 32 F0 FD 00 00 F0 FB F0 FA F0 FF
-FE 12 34 12 34 12 34 12 34 12 34 12 34 12 34 12 34 12 34 12 34 12 34 12 34 12 FA FF
-
-#define CM_EJECUTAR 0xFF
-#define CM_GUARDAR 0xFE
-#define CM_VERTEX2D 0xFD
-#define CM_DRAW 0XFC
-#define CM_NODRAW 0xFB
-#define CM_STOP 0xFA
-#define CM_END 0xF0
-
-    while(!full){
-        for(int i=1;i<=4;i++){
-            raw_data=command.getc();
-            command.printf("%x",raw_data);
-            if(raw_data==CM_STOP)
-                return;
-            if(i==1){
-                val=raw_data;
-            }else{
-                
-                val=val << 8;
-                val=val|raw_data;
-            }
-            command.printf(" %d",i);
-            command.printf(" %x\n",val);
-        }
-        mem_put(val);
-    }
-    //mem_get(&val); //&val es la dirección de la variable, no su contenido
-    //command.putc(val); //manda por puerto serial el contenido de "val" npi para qué
-
+FE F0 FD 12 34 F0 FB F0 FD 0A 0A F0 FD 28 0A F0 FD 28 28 F0 FD 0A 28 F0 F9 27 00 F0 FC F0 FA F0 FF F0
+FE F0 F9 02 00 F0 F9 02 01 F0 F9 01 01 F0 F9 01 00 F0 FA F0 FF F0
+    https://os.mbed.com/users/fabeltranm/
 */
\ No newline at end of file