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

Dependencies:   mbed

Fork of 01_Embebidos by Daniel Vizcaya

01_main.cpp

Committer:
Bethory
Date:
2018-03-14
Revision:
5:8e100835b017
Parent:
4:8a884a5dd8c8
Child:
6:87a37f4163bd

File content as of revision 5:8e100835b017:

#include "mbed.h"
#include "draw.h"
#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_ENTER 0xF0

#define MEM_SIZE 10
#define MEM_TYPE uint32_t //significa que de ahora en más donde diga MEM_TYPE será tipo uint32_t

uint8_t mem_head = 0;
uint8_t mem_tail = 0;
bool full = 0;

MEM_TYPE buffer[MEM_SIZE];
Serial command(USBTX, USBRX);

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;
    return 0;
}

bool mem_get(MEM_TYPE* data){ //Leer
    if (mem_head == 0)
        return 1; 
    if (mem_head == mem_tail)
        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 guardar(){
    command.printf("se inicia el comando 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;
                mem_put(val);
                return;
            }
        }
        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;
                        mem_put(val);
                    }
                }  
            }     
        }
    }while(!full);        
}

int main(){
    init_servo();
    command.baud(9600);
    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;      
        }
    }  
}
/*
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é

*/