As used for motor testing May / June 2016

Dependencies:   iC_MU mbed-rtos mbed

Fork of SweptSine by Vitec Group

ServiceKeyboard.cpp

Committer:
acodd
Date:
2016-06-08
Revision:
3:463edcfc09c5

File content as of revision 3:463edcfc09c5:

#include "mbed.h"
#include "rtos.h"
#include "MyAxis.h"


extern Serial pc;
extern float DeadBand;
extern bool scoping;
extern int scope_duration;
extern int scope_time;
extern bool sinusoid;
extern bool ratiocalc;
extern float jogaccel_time;
extern float jogaccel;
extern int pos_enc_start;
extern int run_count_jog;
extern int primed;
float temp;


// Returns the new set point entered via the keyboard
int ServiceKeyboard ()
{
    int key;                                            // The keypress by the user
    int value = 0;                                      // The variable to return

    key = pc.getc();                                    // Read the intial keypress

    switch (key)   {
// List keypresses used:
        case 'q':
            // To move up and down: 8, 2:  To move left and right 4,6. To start stop both: 5:
            pc.printf("\n\r Left, Right, Up Down:  4,6,8,2.  \n\r Start & Stop both: 5 \n\r Toggle all directions = d \n\r");
            pc.printf("\n\r Scope = s \n\r Run Test sinusoid = t \n\r Run Ratio Calculator = r \n\r Set Motor Kp = g \n\r Set Sys Kp_Sys = h \n\r Fetch Gain = f \n\r Set Kff_Sys = k \n\r Prime Start Scope = p \n\r Set Kff = 2 \n\r Set Gearbox Ratio = 1  \n\r");
            pc.printf(" Set Stationary c value = c \n\r Set Moving c value = b \n\r Set Jog_2 value = 3 \n\r \n\r \n\r Jog Speed PAN,TILT = j,m \n\r Set Jog Acceleration = a \n\r Cycle to hard Stop = z \n\r Fade = x \n\r");
            break;

// Turn on Scope Tool:
        case 's':
            if (!scoping) {
                scope_time = 0;
                scoping = true;
            } else {
                scoping = false;
            }
            break;
// Turn on Ratio Calculator:
        case 'r':
            if (!ratiocalc) {
                ratiocalc = true;
                pc.printf("\n\r Running Ratio Calculator");
            } else {
                Tilt.calcmyratio = false;
                Pan.calcmyratio = false;
            }
            break;
// We are going to jog Tilt up
        case '8':
            Tilt.sysjogdir = -1;
            if (Tilt.moveme) {
                //pc.printf("\n\r Moving stop");
                Tilt.moveme = false;
            } else {
                //pc.printf("\n\r Moving Start");
                Tilt.moveme = true;
            }
            break;
// We are going to jog Tilt down
        case '2':
            Tilt.sysjogdir = 1;
            if (Tilt.moveme) {
                //pc.printf("\n\r Moving stop");
                Tilt.moveme = false;
            } else {
                //pc.printf("\n\r Moving Start");
                Tilt.moveme = true;
            }
            break;
// We are going to jog Tilt up
        case '4':
            Pan.sysjogdir = -1;
            if (Pan.moveme) {
                //pc.printf("\n\r Moving stop");
                Pan.moveme = false;
            } else {
                //pc.printf("\n\r Moving Start");
                Pan.moveme = true;
            }
            break;
// We are going to jog Tilt down
        case '6':
            Pan.sysjogdir = 1;
            if (Pan.moveme) {
                //pc.printf("\n\r Moving stop");
                Pan.moveme = false;
            } else {
                //pc.printf("\n\r Moving Start");
                Pan.moveme = true;
            }
            break;
// We are going to jog everything
        case '5':
            if (Pan.moveme) {
                //pc.printf("\n\r Moving stop");
                Pan.moveme = false;
            } else {
                //pc.printf("\n\r Moving Start");
                Pan.moveme = true;
            }
            if (Tilt.moveme) {
                //pc.printf("\n\r Moving stop");
                Tilt.moveme = false;
            } else {
                //pc.printf("\n\r Moving Start");
                Tilt.moveme = true;
            }
            break;
// We are going to toggle all directions
        case 'd':
            Pan.sysjogdir = -Pan.sysjogdir;
            Tilt.sysjogdir = -Tilt.sysjogdir;
            break;

// Turn on Potentiometer control:
        case 't':
            if (!sinusoid) {
                pc.printf("\n\r Running sinusoid test");
                sinusoid = true;
            } else {
                sinusoid = false;
            }
            break;
// We are going to set the Motor gain
        case 'g':
            pc.printf("\n\r Enter a new Motor Kp gain x 1000: ");
            //key = pc.getc();
            do {
                key = pc.getc();                            // Wait for a keypress
                if(key >= '0' && key <= '9') {              // Check it is a number
                    value *= 10;                            // Index the old number
                    value += (key - '0');                   // Add on the new number
                    pc.printf("%c",key);                    // Display the new number
                }
            } while(key != 0x0D);
            Pan.Kp = value;
            Pan.Kp = Pan.Kp / 1000;
            Tilt.Kp = Pan.Kp;
            //PanVelocityPID.setKp(Kp/1000);
            pc.printf("\n\r");
            break;
// We are going to set the System gain
        case 'h':
            pc.printf("\n\r Enter a new System Sys_Kp gain x 10000: ");
            //key = pc.getc();
            do {
                key = pc.getc();                            // Wait for a keypress
                if(key >= '0' && key <= '9') {              // Check it is a number
                    value *= 10;                            // Index the old number
                    value += (key - '0');                   // Add on the new number
                    pc.printf("%c",key);                    // Display the new number
                }
            } while(key != 0x0D);
            Pan.Kp_Sys = value;
            Pan.Kp_Sys = Pan.Kp_Sys / 10000;
            Tilt.Kp_Sys = Pan.Kp_Sys;
            //PanVelocityPID.setKp(Kp/1000);
            pc.printf("\n\r");
            break;
// We are going to confirm what the gain is
        case 'f':
            //Kp = PanVelocityPID.getKp();
            pc.printf("\n\r Kp = %f, Kff = %f, Kp_Sys = %f, Kff_Sys = %f, Ratio = %f, c_stationary = %f, c_moving = %f, Jog_2 = %f \n\r", Pan.Kp,Pan.Kff,Pan.Kp_Sys,Pan.Kff_Sys,Pan.ratio,Pan.c_stationary, Pan.c_moving, Pan.Jog_2);
            break;

// We are going to set the Jog_2 Value:
        case '3':
            pc.printf("\n\r Enter a new Jog_2 value: ");
            //key = pc.getc();
            do {
                key = pc.getc();                            // Wait for a keypress
                if(key >= '0' && key <= '9') {              // Check it is a number
                    value *= 10;                            // Index the old number
                    value += (key - '0');                   // Add on the new number
                    pc.printf("%c",key);                    // Display the new number
                }
            } while(key != 0x0D);
            Pan.Jog_2 = value;
            pc.printf("\n\r");
            break;
// We are going to set the new threshold:
        case '1':
            pc.printf("\n\r Enter a new gearbox ratio: ");
            //key = pc.getc();
            do {
                key = pc.getc();                            // Wait for a keypress
                if(key >= '0' && key <= '9') {              // Check it is a number
                    value *= 10;                            // Index the old number
                    value += (key - '0');                   // Add on the new number
                    pc.printf("%c",key);                    // Display the new number
                }
            } while(key != 0x0D);
            Pan.ratio = value;
            pc.printf("\n\r");
            break;
// We are going to set the Kff gain
        case 'w':
            pc.printf("\n\r Enter a new Kff gain x 100: ");
            //key = pc.getc();
            do {
                key = pc.getc();                            // Wait for a keypress
                if(key >= '0' && key <= '9') {              // Check it is a number
                    value *= 10;                            // Index the old number
                    value += (key - '0');                   // Add on the new number
                    pc.printf("%c",key);                    // Display the new number
                }
            } while(key != 0x0D);
            Pan.Kff = value;
            Pan.Kff = Pan.Kff / 100;
            pc.printf("\n\r");
            break;
// We are going to set the dead band for the Motor PWM
        case 'k':
            pc.printf("\n\r Enter a new Kff_Sys x 100: ");
            //key = pc.getc();
            do {
                key = pc.getc();                            // Wait for a keypress
                if(key >= '0' && key <= '9') {              // Check it is a number
                    value *= 10;                            // Index the old number
                    value += (key - '0');                   // Add on the new number
                    pc.printf("%c",key);                    // Display the new number
                }
            } while(key != 0x0D);
            temp = value;
            Pan.Kff_Sys = temp / 100;
            pc.printf("\n\r");
            break;
// We are going to set a stationary c value
        case 'c':
            pc.printf("\n\r Enter a new stationary c value: ");
            //key = pc.getc();
            do {
                key = pc.getc();                            // Wait for a keypress
                if(key >= '0' && key <= '9') {              // Check it is a number
                    value *= 10;                            // Index the old number
                    value += (key - '0');                   // Add on the new number
                    pc.printf("%c",key);                    // Display the new number
                }
            } while(key != 0x0D);
            Pan.c_stationary = value;
            pc.printf("\n\r");
            break;
// We are going to set a moving b value
        case 'b':
            pc.printf("\n\r Enter a new moving c value: ");
            //key = pc.getc();
            do {
                key = pc.getc();                            // Wait for a keypress
                if(key >= '0' && key <= '9') {              // Check it is a number
                    value *= 10;                            // Index the old number
                    value += (key - '0');                   // Add on the new number
                    pc.printf("%c",key);                    // Display the new number
                }
            } while(key != 0x0D);
            Pan.c_moving = value;
            pc.printf("\n\r");
            break;
//  Set a jog speed
        case 'j':
            pc.printf("\n\r Set Jog PAN speed (Deg/s) x100 ");
            //key = pc.getc();
            do {
                key = pc.getc();                            // Wait for a keypress
                if(key >= '0' && key <= '9') {              // Check it is a number
                    value *= 10;                            // Index the old number
                    value += (key - '0');                   // Add on the new number
                    pc.printf("%c",key);                    // Display the new number
                }
            } while(key != 0x0D);
            Pan.jog = value;
            Pan.jog = (Pan.jog * 0.0145);
            pc.printf("\n\r");
            break;
//  Set a jog speed
        case 'm':
            pc.printf("\n\r Set Jog TILT speed (Deg/s) x100 ");
            //key = pc.getc();
            do {
                key = pc.getc();                            // Wait for a keypress
                if(key >= '0' && key <= '9') {              // Check it is a number
                    value *= 10;                            // Index the old number
                    value += (key - '0');                   // Add on the new number
                    pc.printf("%c",key);                    // Display the new number
                }
            } while(key != 0x0D);
            Tilt.jog = value;
            Tilt.jog = (Tilt.jog * 0.0145);
            pc.printf("\n\r");
            break;
// Set the jog function to cycle to a stop
        case 'z':
            pc.printf("\n\r Set to ramp to stop \n\r");
            Pan.ramp = Pan.jog / jogaccel_time;
            Pan.run_count_jog = 0;
            scope_time = 0;
            Pan.setramp = true;
            break;
// Set a Fade like move
        case 'x':
            pc.printf("\n\r Set to Fade like move \n\r");
            Pan.ramp = Pan.jog / jogaccel_time;
            Pan.run_count_jog = 0;
            scope_time = 0;
            Pan.setramp_x = true;

            Tilt.ramp = Tilt.jog / jogaccel_time;
            Tilt.run_count_jog = 0;
            scope_time = 0;
            Tilt.setramp_x = true;
            break;
//  Set a jog acceleration
        case 'a':
            pc.printf("\n\r Set ramp jogaccel_time, (ms) ");
            //key = pc.getc();
            do {
                key = pc.getc();                            // Wait for a keypress
                if(key >= '0' && key <= '9') {              // Check it is a number
                    value *= 10;                            // Index the old number
                    value += (key - '0');                   // Add on the new number
                    pc.printf("%c",key);                    // Display the new number
                }
            } while(key != 0x0D);
            temp = value;
            jogaccel_time = temp;
            //ramp = ramp / 1000;
            pc.printf("\n\r");
            break;
//  Prime the scope tool
        case 'p':
            pc.printf("\n\r Prime the scope tool \n\r");
            primed = true;
            break;
    }
    return(1);
}