Grupo T / Mbed OS GRUPOT

main.cpp

Committer:
lucasfontenla
Date:
2018-05-03
Revision:
5:0cbf491f703d
Parent:
4:48717b42eab2
Child:
6:af32c68ff4cf

File content as of revision 5:0cbf491f703d:

#include "mbed.h"

// MACHINE SETUP ---------------------------------------------------------------------------

// drivers output signal
DigitalOut stepX(D2);
DigitalOut dirX(D3);

DigitalOut stepY(D8);
DigitalOut dirY(D9);

DigitalOut stepZ(D11);
DigitalOut dirZ(D12);

// hardware input signal
// end-of-stroke sensors
DigitalIn endX1(D5);
DigitalIn endX2(D10);

// IHM for development
AnalogIn joyX(A0);
AnalogIn joyY(A1);

DigitalIn zUp(D6);
DigitalIn zDwn(D7);

// variables definition
int modeStatus = 1;

float valX;
float valY;
int valZUp;
int valZDwn;

int activeX = 1;
int activeY = 1;
int activeZ = 1;

int x_dir;
int y_dir;
int z_dir;

int contador = 0;

float ppsMax = 600.0;

void move(int pps, int x_dir, int y_dir, int z_dir, int x_step, int y_step, int z_step);

int main(){
    printf("Starting...\r\n");
    
    if(modeStatus){
        //Código de JOG
        printf("JOG Selected");
        while(1){        
            valX = joyX;
            valY = joyY;
            
            valZUp = zUp;
            valZDwn = zDwn;
            
            if(valX > 0.7){
                if(x_dir){
                    x_dir = 0;    
                }
                activeX = 1;    
            }
            else if(valX < 0.3){
                if(!x_dir){
                    x_dir = 1;    
                }
                activeX = 1;    
            }
            else{
                activeX = 0;
            }
            
            //----------------------------------------------------------------------
            
            if(valY > 0.7){
                if(!y_dir){
                    y_dir = 1;    
                }
                activeY = 1;    
            }
            else if(valY < 0.3){
                if(y_dir){
                    y_dir = 0;    
                }
                activeY = 1;    
            }
            else{
                activeY = 0;
            }
            
            //----------------------------------------------------------------------   
            
            if(!valZUp && valZDwn){
                if(z_dir){
                    z_dir = 0;    
                }
                activeZ = 1;    
            }
            else if(!valZDwn && valZUp){
                if(!z_dir){
                    z_dir = 1;    
                }
                activeZ = 1;    
            }
            else {
                activeZ = 0;    
            }
            
            //----------------------------------------------------------------------

            move(ppsMax, x_dir, y_dir, z_dir, activeX, activeY, activeZ);            

        }
    }
    
    else {
        //Código de execução fora do JOG    
    }
    
}

void move(int pps, int x_dir, int y_dir, int z_dir, int x_step, int y_step, int z_step){
    float time = 1.0/pps/2.0;
    
    dirX = x_dir;
    dirY = y_dir;
    dirZ = z_dir;
    
    int max_val;
    
    if(x_step > y_step){
        if(x_step > z_step){
            max_val = x_step;
        }
        else {
            max_val = z_step;
        }
    } else if(y_step > z_step){
        max_val = y_step;
    }
    else {
        max_val = z_step;    
    }
    
    for(int i = 0; i < max_val; i++){
        if(i > x_step){
            stepX = 0;
        }
        else { stepX = 1; }
        
        if(i > y_step){
            stepY = 0;
        }
        else { stepY = 1; }
        
        if(i > z_step){
            stepZ = 0;
        }
        else { stepZ = 1; }
        
        wait(time);
        stepX = 0;
        stepY = 0;
        stepZ = 0;
        wait(time); 
    }
}