Remote inc coolant nozzle control program

Dependencies:   mbed reScale USBDevice

Dependents:   Nozzle_inputs Nozzle_display

main.cpp

Committer:
BETZtechnik
Date:
2019-04-11
Revision:
22:a3ada529b264
Parent:
21:db507362ca7a
Child:
23:baedb9e32b6d
Child:
24:55fafbb82a37

File content as of revision 22:a3ada529b264:

 #include "mbed.h"

#include "reScale.h"


//Serial pc(USBTX, USBRX);

//InterruptIn aux1(P0_7, PullUp); // index pulse

DigitalIn aux1(P0_7);
DigitalIn cw(P1_24); 
DigitalIn ccw(P2_7);

int cwRequested = 0;
int ccwRequested = 0;

int aux1State = 0;


DigitalOut dir(P0_15);

Serial display(P0_14, P0_13, 19200);  // RS 485  TX RX?
Serial inputs(P1_23,P0_20, 9600); //rs232 TX RX


int maxServo = 2500;
int minServo = 500;
reScale servo1Scale(90,-90,minServo,maxServo); //19850 is 1.0v from voltage divider at 10k.

 PwmOut servo1(P1_13); //display board

//char tens = '0';
//char ones = '1';

int Hundreds = 0;
 int Tens = 0;
 int Ones = 0;   
 
 int twitch = 0;
 int twitchStart=0;
 int twitchDirection=0;
 int lastTwitchMove = 0;
 int maxTwitch = 0;
 int minTwitch = 0;
 int tReadMs = 10;
 
 int currentNozzle = 0;          

int index = 0;               // for parsing serial

int n1Pos = 0;

  int servo1Pos = 0;
  int lastServo1Pos = 999;


DigitalOut servo2(P2_2);

/*
void triggered()
{
    servo2 = 1;
    
    if (cw == 0){
        cwRequested = 1;
        }
        
        else if (ccw == 0){
            ccwRequested = 1;
            }
        
}            
    
*/

Timer t;

int main() {
    
cw.mode(PullUp);
ccw.mode(PullUp);
aux1.mode(PullUp);

t.start();


//aux1.rise(&triggered);



servo2 = 0;



      uint8_t c = 0; // for 485 link
  
    while(1) {
        
  
  if (t.read()  > 1200){
        t.reset();
        lastTwitchMove = t.read_ms();
        }     
        
        
//************************************  Interrupt response **********************       
       
        
        if (aux1 == 0 && aux1State == 0)
        {
           
           if (cw == 1)
           {
//servo2 = 1;
dir= 1;
//wait(0.001);
display.printf("M");
wait(0.05);
display.printf("-");
wait(0.001);
dir=0;
aux1State = 1;
//wait(.001);
}

if (ccw == 1)
{
dir= 1;
//wait(0.01);
display.printf("M");
wait(0.05);
display.printf("+");
wait(0.001);
dir=0;
aux1State = 1;
//wait(.001);
}
}

if (aux1 == 1 && aux1State == 1)
{
aux1State = 0;
//wait(0.1);
}          
            

//********************** Display code NEW with W **********************************

        while (display.readable()) {

            c = display.getc();

            if (c == 'N') {

                index = 1;

            }

            if (c == 'W') { // wiggle setting
                index = 5;
            }
            if (index == 5) {
                c = display.getc();
                if (c == '0') {
                    twitch = 0;
                    index = 0;
                }
                if (c == '1') {
                    twitch = 1;
                    index = 0;
                }
                if (c == '2') {
                    twitch = 2;
                    index = 0;
                }
                if (c == '3') {
                    twitch = 3;
                    index = 0;
                }
            }




            if (index == 1) {       //Display is sending -90>+90 and adding 190 for N1 so would send 100 to 280 for -90 to +90
                c = display.getc();
                if (c == '1') {  // N1
                    currentNozzle = 1;
                    Hundreds = 0;
                    index = 3;

}

 else if (c == '2') { //N2
                    currentNozzle = 1;
                    Hundreds = 1;
                    index = 3;
                }

                if (c == '3') { //N2     // Display adding 390 for N2 so 300 to 480 would be -90 to +90
                    currentNozzle = 2;
                    Hundreds = 0;
                    index = 3;
                }

                if (c == '4') { //N2
                    currentNozzle = 2;
                    Hundreds = 1;
                    index = 3;
                }


            }



            if (index == 3) {

                c = display.getc();

                if (c=='0') {
                    Tens = 0;
                    index = 4;

                }

                else if (c=='1') {
                    Tens = 1;
                    index = 4;

                }

                else if (c=='2') {
                    Tens = 2;
                    index = 4;

                }

                else if (c=='3') {
                    Tens = 3;
                    index = 4;

                }

                else if (c=='4') {
                    Tens = 4;
                    index = 4;
                }

                else if (c=='5') {
                    Tens = 5;
                    index = 4;
                }

                else if (c=='6') {
                    Tens = 6;
                    index = 4;
                }

                else if (c=='7') {
                    Tens = 7;
                    index = 4;
                } 
                
                else if (c=='8') {
                    Tens = 8;
                    index = 4;
                }

                else if (c=='9') {
                    Tens = 9;
                    index = 4;
                }


            }

            if (index == 4) {

                c = display.getc();

                if (c=='0') {
                    Ones = 0;
                }

                else if (c=='1') {
                    Ones = 1;
                }

                else if (c=='2') {
                    Ones = 2;
                }

                else if (c=='3') {
                    Ones = 3;
                }

                else if (c=='4') {
                    Ones = 4;
                }

                else if (c=='5') {
                    Ones = 5;
                }

                else if (c=='6') {
                    Ones = 6;
                }

                else if (c=='7') {
                    Ones = 7;
                }

                else if (c=='8') {
                    Ones = 8;
                }

                else if (c=='9') {
                    Ones = 9;
                }

               
                
if (currentNozzle == 1){                                     
n1Pos = (((Hundreds *100) + (Tens *10) + Ones) - 90);
twitchStart = 0; // trigger sweep from new angle                      
servo1Pos = servo1Scale.from(n1Pos);
//servo1.pulsewidth_us(servo1Pos);                        
index=0;
}  
                
                
                
                
            }
        }
        


            if (twitch == 0) {
                        if (servo1Pos != lastServo1Pos) {
                twitchStart = 0;
                twitchDirection = 0;
                servo1Pos = servo1Scale.from(n1Pos);
                servo1.pulsewidth_us(servo1Pos);
//servo2Pos = servo2Scale.from(n2Pos);
//servo2.pulsewidth_us(servo2Pos);
lastServo1Pos = servo1Pos;
            }
            }

            if (twitch > 0) {
                if (twitchStart == 0) {
                    //tw.start();  // start timer for nozzle sweep                    
                    //servo1Pos = servo1Scale.from(n1Pos);
                    servo1.pulsewidth_us(servo1Pos);
                    lastTwitchMove = t.read_ms(); // store time of last nozzle movement
                    minTwitch = servo1Pos; // store original servo postion for bottom of sweep
                    if (twitch == 1) {
                        maxTwitch = servo1Pos - 100; // 11.11mS per degree of sweep, 55 = 5 degrees of sweep. This should be a viariable set on the display.
                    }
                    if (twitch == 2) {
                        maxTwitch = servo1Pos - 150;
                    }
                    if (twitch == 3) {
                        maxTwitch = servo1Pos - 200;
                    }
                    twitchStart = 1;
                    
                }
                if ((twitchStart == 1) && (t.read_ms() > (lastTwitchMove + tReadMs))) {
                    if (twitchDirection == 0) { //going up
                        servo1Pos = servo1Pos - 10; // add variable amount of uS to the servo signal

                        if (servo1Pos < minServo) {
                            servo1Pos = minServo;
                            twitchDirection = 1; //reverse direction
                        }
                        if (servo1Pos < maxTwitch) {
                            servo1Pos = maxTwitch;
                            twitchDirection = 1; //reverse direction
                        }
                        lastTwitchMove = t.read_ms();
                    }

                    if (twitchDirection == 1) { // going down
                        servo1Pos = servo1Pos + 10; // add variable amount of Ms to the servo signal
                        if (servo1Pos > maxServo) {
                            servo1Pos = maxServo;
                            twitchDirection = 0; //reverse direction
                        }
                        if (servo1Pos > minTwitch) {
                            servo1Pos = minTwitch;
                            twitchDirection = 0; //reverse direction
                        }
                        lastTwitchMove = t.read_ms();
                    }
                    if (servo1Pos != lastServo1Pos) {
                        servo1.pulsewidth_us(servo1Pos);
                        lastServo1Pos = servo1Pos;
                    }
                }
            



}


//********************************* Inputs serial *******************************


while (inputs.readable())
{
             

               c = inputs.getc();
               
                if (c == 'T'){
                     
                    index = 1;
                    servo2=1;
                   }
                
                
                if (index == 1){   
                 c = inputs.getc();
                  
                 
    if (c=='0'){
                     Tens = 0;
                     servo2=1;
                     }
                     
                     else if (c=='1'){
                         Tens = 1;
                        
                          
                         }
                         
                         else if (c=='2'){
                             Tens = 2;
                           
                             }
                             
                             else if (c=='3'){
                                 Tens = 3;
                                
                                 }
                                 
                                 else if (c=='4'){
                                     Tens = 4;
                                     }
                                     
                                     else if (c=='5'){
                                     Tens = 5;
                                     }
                                     
                                     else if (c=='6'){
                                     Tens = 6;
                                     }
                                     
                                     else if (c=='7'){
                                     Tens = 7;
                                     }
                                     
                                     else if (c=='8'){
                                     Tens = 8;
                                     }
                                     
                                     else if (c=='9'){
                                     Tens = 9;
                                     }
                                     
                                     else if (c=='0'){
                                     Tens = 0;
                                     }
                         index = 2;
                         }
                         
                         
                         if (index == 2){
                              c = inputs.getc();
    if (c=='0'){
                     Ones = 0;
                     
                     }
                     
                     else if (c=='1'){
                         Ones = 1;
                        
                          
                         }
                         
                         else if (c=='2'){
                             Ones = 2;
                           
                             }
                             
                             else if (c=='3'){
                                 Ones = 3;
                                
                                 }
                                 
                                 else if (c=='4'){
                                     Ones = 4;
                                     }
                                     
                                     else if (c=='5'){
                                     Ones = 5;
                                     }
                                     
                                     else if (c=='6'){
                                     Ones = 6;
                                     }
                                     
                                     else if (c=='7'){
                                     Ones = 7;
                                     }
                                     
                                     else if (c=='8'){
                                     Ones = 8;
                                     }
                                     
                                     else if (c=='9'){
                                     Ones = 9;
                                     }
                                     
                                     else if (c=='0'){
                                     Ones = 0;
                                     }                             
                       int tempToolNo = (Tens*10)+100+Ones;
                       dir=1;
                       display.printf("T");
                       wait(0.05);
                        display.printf("%d", tempToolNo);   
                        wait(0.001);
                        dir=0;  
                      index = 0;
                      tempToolNo=0;
                      
                      }
                      
                      
                        }


// *****************************************************************************



}
}