Update

Dependencies:   mbed mbed-rtos X_NUCLEO_IHM02A1

ST_SOLO.cpp

Committer:
hagenrap
Date:
2019-05-14
Revision:
39:6cc9a40bc8a6
Parent:
38:3776ee18e56f
Child:
40:117b324843ee

File content as of revision 39:6cc9a40bc8a6:

#include "SETUP.h"


/*** BEISPIEL FÜR RAPHI
if(evTasterStart == 1)
{

 entryEinlegenIn();
 StatusSOLO=SOLO_EinlegenIN;
 }*/

/*
if (count < 2) {
    Set_Servo_Bad_Fil();
    count = count + 1;
} else {

}
*/

/*
Set_Servo_Bad_Fil();
Thread::wait(1000);
Set_Servo_Good_Fil();
*/
/*
if (buttonSTART_pressed == true)
{
    printf("BUTTON_START\n\r");
    Thread::wait(1000);
    buttonSTART_pressed = false;
}
if (buttonAbbruch_pressed == true)
{
    printf("BUTTON_ABBRUCH\n\r");
    Thread::wait(1000);
    buttonAbbruch_pressed = false;
}
*/
/*
printf("SOLO\n\r");
printf(" LS1 %d\n\r", LS_1.read());
printf(" LS2 %d\n\r", LS_2.read());
printf(" LS3 %d\n\r", LS_3.read());
*/
/*
printf("SOLO\n\r");
motors[0]->run(StepperMotor::FWD, 500);
Thread::wait(1000);
*/

/*
motors[0]->run(StepperMotor::FWD, 500);
*/
/*
if(mybutton.read() == 0)
{
    printf("Blitz\n\r");
    Set_Cutter(500, 2000, );

}
*/





int StatusSOLO=SOLO_DEFAULT;

extern PwmOut Servo;

extern DigitalIn Button1;
extern DigitalIn Button2;

bool SOLO_Button1 = false;
bool SOLO_Button2 = false;


extern DigitalIn LS_1;
extern DigitalIn LS_2;
extern DigitalIn LS_3;

extern L6470  **motors;
extern L6470B **motors2;

extern XNucleoIHM02A1 *x_nucleo_ihm02a1_1;
extern XNucleoIHM02A12 *x_nucleo_ihm02a1_2;

extern DigitalIn  mybutton;

extern PwmOut Cutter_1;
extern PwmOut Cutter_2;
extern PwmOut Spleisser_1;
extern PwmOut Spleisser_2;

int material = 0;
float zeit = 0;
int val_LS1 = 0;
int val_LS2 = 0;
int val_LS3 = 0;




Timer machNichts;

void entry_SOLO_DEFAULT()
{
    val_LS3 = LS_3.read();
    if(val_LS3 == 0) {
        DisplaySendeBefehl(0x01);
        DisplaySendeBefehl(0x0C);
        gotoxy(1, 1);
        DisplaySendeString("ABBRUCH: ");
        gotoxy(1, 2);
        DisplaySendeString("Filament links");
        gotoxy(1, 4);
        DisplaySendeString("entfernen");

        Stepper_2_SetPara(TRAVELSPEED, TRAVELACC);
        Stepper_2_Move('V', 5*400);
    }

    DisplaySendeBefehl(0x01);
    val_LS1 = LS_1.read();
    while(val_LS1 == 0) {
        DisplaySendeBefehl(0x0C);
        gotoxy(1, 1);
        DisplaySendeString("ABBRUCH: ");
        gotoxy(1, 2);
        DisplaySendeString("Filament rechts");
        gotoxy(1, 4);
        DisplaySendeString("entfernen");
        Stepper_1_SetPara(TRAVELSPEED, TRAVELACC);
        Stepper_1_Run('R', TRAVELSPEED);
        val_LS1 = LS_1.read();
    }

    StatusSOLO = SOLO_DEFAULT;
}




void entry_SOLO_DEFAULT_END()
{
    DisplaySendeBefehl(0x01);
    DisplaySendeBefehl(0x0C);
    gotoxy(1, 1);
    DisplaySendeString("Filament links");
    gotoxy(1, 3);
    DisplaySendeString("entfernen");
    gotoxy(1, 4);
    DisplaySendeString("Bestaetigen");

    while(SOLO_Button1 == false) {
        SOLO_Button1 = get_Button_1();
    }
    SOLO_Button1 = false;

    StatusSOLO = SOLO_DEFAULT;
}



void entry_SOLO_START()
{
    Stepper_1_Leerlauf();
    Stepper_2_Leerlauf();

    DisplaySendeBefehl(0x01);
    DisplaySendeBefehl(0x0C);
    gotoxy(1, 1);
    DisplaySendeString("MODUS: SOLO-Betrieb");

    Set_Servo_Good_Fil();
    //Servo_Off();
    
    Thread::wait(1000); // Damit Button nicht zwei mal gedrückt

    StatusSOLO = SOLO_START;
}






void entry_SOLO_EinlegenIN()
{
    DisplaySendeBefehl(0x01);
    DisplaySendeBefehl(0x0C);
    gotoxy(1, 1);
    DisplaySendeString("Filament rechts");
    gotoxy(1, 3);
    DisplaySendeString("einlegen");
    gotoxy(1, 4);
    DisplaySendeString("             Abbruch");

    StatusSOLO = SOLO_EinlegenIN;
}




void entry_SOLO_INtoSPLEISSER()
{
    DisplaySendeBefehl(0x01);
    DisplaySendeBefehl(0x0C);
    gotoxy(1, 1);
    DisplaySendeString("Filament rechts");
    gotoxy(1, 3);
    DisplaySendeString("bereit");
    gotoxy(1, 4);
    DisplaySendeString("Weiter       Abbruch");

    StatusSOLO = SOLO_INtoSPLEISSER;
}




void entry_SOLO_EinlegenOUT()
{
    DisplaySendeBefehl(0x01);
    DisplaySendeBefehl(0x0C);
    gotoxy(1, 1);
    DisplaySendeString("Filament links");
    gotoxy(1, 3);
    DisplaySendeString("einlegen");
    gotoxy(1, 4);
    DisplaySendeString("             Abbruch");

    StatusSOLO = SOLO_EinlegenOUT;
}




void entry_SOLO_OUTtoSPLEISSER()
{
    DisplaySendeBefehl(0x01);
    DisplaySendeBefehl(0x0C);
    gotoxy(1, 1);
    DisplaySendeString("Filamente bereit");
    gotoxy(1, 4);
    DisplaySendeString("Spleissen    Abbruch");

    StatusSOLO = SOLO_OUTtoSPLEISSER;
}





void entry_SOLO_Spleissen()
{
    DisplaySendeBefehl(0x01);
    DisplaySendeBefehl(0x0C);
    gotoxy(1, 1);
    DisplaySendeString("ACHTUNG:");
    gotoxy(1, 2);
    DisplaySendeString("SPLEISSENUNG!!!");

    StatusSOLO = SOLO_Spleissen;
}





void entry_SOLO_FERTIG()
{
    DisplaySendeBefehl(0x01);
    DisplaySendeBefehl(0x0C);
    gotoxy(1, 1);
    DisplaySendeString("Filament wird");
    gotoxy(1, 2);
    DisplaySendeString("abgekuehlt");

    Thread::wait(COOLINGTIME*1000);

    StatusSOLO = SOLO_FERTIG;
}





void Fkt_SOLO_Spleissen()
{
    Stepper_2_SetPara(PRECISIONSPEED, PRECISIONACC);
    Stepper_2_Move('R', 0.11*400);

    Stepper_1_Move('R', 0.08*400);
    Stepper_2_Move('R', 0.08*400);

    Set_Spleisser(ARConTIME, ARCoffTIME, REPETITONS);


    Stepper_1_SetPara(FILSPEED, FILACC);
    Stepper_2_SetPara(FILSPEED, FILACC);

    motors[0]->move(StepperMotor::BWD, 0.53*400*128);   // kein Move wegen whait!!!!
    Thread::wait(10);
    Stepper_2_Move('R', 0.70*400);
}










void EntrySOLO()
{

    SOLO_Button1 = get_Button_1();
    SOLO_Button2 = get_Button_2();

    switch(StatusSOLO) {


        case SOLO_DEFAULT:

            entry_SOLO_START();

            break;





        case SOLO_START:

            if(material == 1) {
                gotoxy(1, 4);
                DisplaySendeString("Start            ABS");
            } else if(material == 0) {
                gotoxy(1, 4);
                DisplaySendeString("Start            PLA");
            }

            if(SOLO_Button1 == true) {
                SOLO_Button1 = false;
                entry_SOLO_EinlegenIN();
            }

            if(SOLO_Button2 == true) {
                SOLO_Button2 = false;
                material = !material;
                Thread::wait(300);
            }

            break;





        case SOLO_EinlegenIN:

            val_LS2 = LS_2.read();
            val_LS3 = LS_3.read();
            if(val_LS2 == 1) {
                Stepper_1_SetPara(TRAVELSPEED, TRAVELACC);
                Stepper_1_Run('V', TRAVELSPEED);
            } else if (val_LS2 == 0 && val_LS3 == 1) {
                Stepper_1_Run('V', PRECISIONSPEED);;
            } else if (val_LS2 == 0 && val_LS3 == 0) {
                Stepper_1_Stop();
                Stepper_1_SetPara(PRECISIONSPEED, PRECISIONACC);
                Stepper_1_Move('R', 0.1*400);
                entry_SOLO_INtoSPLEISSER();
            }

            if(SOLO_Button2 == true) {
                SOLO_Button2 = false;
                entry_SOLO_DEFAULT();
            }

            break;





        case SOLO_INtoSPLEISSER:

            if(SOLO_Button1 == true) {
                SOLO_Button1 = false;
                entry_SOLO_EinlegenOUT();
            }

            if(SOLO_Button2 == true) {
                SOLO_Button2 = false;
                entry_SOLO_DEFAULT();
            }

            break;






        case SOLO_EinlegenOUT:

            val_LS3 = LS_3.read();
            if(val_LS3 == 1) {
                Stepper_2_SetPara(PRECISIONSPEED, PRECISIONACC);
                Stepper_2_Run('R', PRECISIONSPEED);
            } else if (val_LS3 == 0) {
                Stepper_2_Stop();
                entry_SOLO_OUTtoSPLEISSER();
            }

            if(SOLO_Button2 == true) {
                SOLO_Button2 = false;
                entry_SOLO_DEFAULT();
            }

            break;




        case SOLO_OUTtoSPLEISSER:

            if(SOLO_Button1 == true) {
                SOLO_Button1 = false;
                entry_SOLO_Spleissen();
            }

            if(SOLO_Button2 == true) {
                SOLO_Button2 = false;
                entry_SOLO_DEFAULT();
            }

            break;

        case SOLO_Spleissen:

            Fkt_SOLO_Spleissen();

            entry_SOLO_FERTIG();

            break;





        case SOLO_FERTIG:

            DisplaySendeBefehl(0x01);
            DisplaySendeBefehl(0x0C);
            gotoxy(1, 1);
            DisplaySendeString("Filament wird");
            gotoxy(1, 2);
            DisplaySendeString("ausgeworfen");

            val_LS3 = LS_3.read();
            while(val_LS3 == 0) {
                Stepper_1_SetPara(TRAVELSPEED, SLOWACC);
                Stepper_2_SetPara(TRAVELSPEED, SLOWACC);
                
                motors[0]->run(StepperMotor::FWD, TRAVELSPEED+200);
                motors[1]->run(StepperMotor::FWD, TRAVELSPEED+200);

                //Stepper_1_Run('V', TRAVELSPEED+100);
                //Stepper_2_Run('V', TRAVELSPEED+100);

                val_LS3 = LS_3.read();
            }
            
            Stepper_1_Leerlauf();
            Stepper_2_Leerlauf();

            entry_SOLO_DEFAULT_END();

            break;

        case SOLO_STOERUNG:

            break;

    }
}


/*

void entry_SOLO_DEFAULT()
{
    StatusSOLO = SOLO_DEFAULT;
    DisplaySendeBefehl(0x01);
    machNichts.stop();
    machNichts.reset();
    zeit = 0;
    val_LS1 = LS_1.read();
    if(val_LS1 == 0) {
        while(val_LS1 == 0) {
            Stepper_1_Run('R', 500);
            gotoxy(1, 1);
            DisplaySendeString("ABBRUCH:");
            gotoxy(1, 2);
            DisplaySendeString("Filament rechts");
            gotoxy(1, 4);
            DisplaySendeString("entfernen");
            val_LS1 = LS_1.read();
        }
    }
    val_LS3 = LS_3.read();
    if(val_LS3 == 0) {
        while(val_LS3 == 0) {
            Stepper_2_Run('V', 500);
            gotoxy(1, 1);
            DisplaySendeString("ABBRUCH:");
            gotoxy(1, 2);
            DisplaySendeString("Filament links");
            gotoxy(1, 4);
            DisplaySendeString("entfernen");
            val_LS3 = LS_3.read();
        }
    }
    DisplaySendeBefehl(0x01);
}

void entry_SOLO_EinlegenIN()
{
    StatusSOLO = SOLO_EinlegenIN;
    DisplaySendeBefehl(0x01);
    machNichts.start();
    Set_Servo_Good_Fil();

}

void entry_SOLO_INtoSPLEISSER()
{
    StatusSOLO = SOLO_INtoSPLEISSER;
    DisplaySendeBefehl(0x01);
    machNichts.stop();
    machNichts.reset();
    zeit = 0;
    machNichts.start();
    enable_Buttons();
}

void entry_SOLO_EinlegenOUT()
{
    StatusSOLO = SOLO_EinlegenOUT;
    DisplaySendeBefehl(0x01);
    machNichts.stop();
    machNichts.reset();
    zeit = 0;
    machNichts.start();
    enable_Buttons();
}

void entry_SOLO_OUTtoSPLEISSER()
{
    StatusSOLO = SOLO_OUTtoSPLEISSER;
    DisplaySendeBefehl(0x01);
    machNichts.stop();
    machNichts.reset();
    zeit = 0;
    machNichts.start();
    enable_Buttons();
}

void entry_SOLO_Spleissen()
{
    DisplaySendeBefehl(0x01);
    StatusSOLO = SOLO_Spleissen;
}

void EntrySOLO()
{

    SOLOButtonSTART = get_Button_1();
    SOLOButtonSTART = get_Button_2();
    switch(StatusSOLO) {
        case SOLO_DEFAULT:

            enable_Buttons();

            Stepper_1_Leerlauf();
            Stepper_2_Leerlauf();


            DisplaySendeBefehl(0x0C);
            gotoxy(1, 1);
            DisplaySendeString("Modus: SOLO-Betrieb");
            if(material == 1) {
                gotoxy(1, 4);
                DisplaySendeString("Start            ABS");
            } else if(material == 0) {
                gotoxy(1, 4);
                DisplaySendeString("Start            PLA");
            }

            if(SOLOButtonSTART == true) {

                SOLOButtonSTART = false;
                //buttonAbbruch_pressed = false;
                //buttonAbbruch_diable_cb();
                material = !material;
            }



            if(SOLOButtonSTART == true) {

                SOLOButtonSTART = false;
                //buttonSTART_pressed = false;
                //buttonSTART_diable_cb();
                //entry_SOLO_EinlegenOUT();
                entry_SOLO_EinlegenIN();
            }

            break;




        case SOLO_EinlegenIN:

            //Servo_Off();

            DisplaySendeBefehl(0x0C);
            gotoxy(1, 1);
            DisplaySendeString("Filament rechts");
            gotoxy(1, 3);
            DisplaySendeString("einlegen");
            gotoxy(1, 4);
            DisplaySendeString("             Abbruch");


            if(SOLOButtonSTART == true) {
                SOLOButtonSTART = false;
                //buttonAbbruch_pressed = false;
                //buttonAbbruch_diable_cb();
                entry_SOLO_DEFAULT();
            }

            zeit = machNichts.read();
            if(zeit >= WARTEZEIT) {

                entry_SOLO_DEFAULT();
            }


            val_LS2 = LS_2.read();
            if(val_LS2 == 1) {
                Stepper_1_Run('V', 100);
            } else if (val_LS2 == 0) {
                Stepper_1_Stop();
                entry_SOLO_INtoSPLEISSER();
            }

            break;




        case SOLO_INtoSPLEISSER:
            DisplaySendeBefehl(0x0C);
            gotoxy(1, 1);
            DisplaySendeString("Filament rechts");
            gotoxy(1, 3);
            DisplaySendeString("bereit");
            gotoxy(1, 4);
            DisplaySendeString("Weiter       Abbruch");

            zeit = machNichts.read();
            if(zeit >= WARTEZEIT) {

                entry_SOLO_DEFAULT();
            }

            if(SOLOButtonSTART == true) {
                SOLOButtonSTART = false;
                //buttonAbbruch_pressed = false;
                //buttonAbbruch_diable_cb();
                entry_SOLO_DEFAULT();
            }

            if(SOLOButtonSTART == true) {
                SOLOButtonSTART = false;
                //buttonSTART_pressed = false;
                //buttonSTART_diable_cb();
                entry_SOLO_EinlegenOUT();
            }

            break;

        case SOLO_EinlegenOUT:
            DisplaySendeBefehl(0x0C);
            gotoxy(1, 1);
            DisplaySendeString("Filament links");
            gotoxy(1, 3);
            DisplaySendeString("einlegen");
            gotoxy(1, 4);
            DisplaySendeString("             Abbruch");

            if(SOLOButtonSTART == true) {
                SOLOButtonSTART = false;
                //buttonAbbruch_pressed = false;
                //buttonAbbruch_diable_cb();
                entry_SOLO_DEFAULT();
            }

            zeit = machNichts.read();
            if(zeit >= WARTEZEIT) {

                entry_SOLO_DEFAULT();
            }

            val_LS3 = LS_3.read();
            if(val_LS3 == 1) {
                Stepper_2_Run('R', 100);        /// das isch no Scheisse
            } else if (val_LS3 == 0) {
                Stepper_2_Stop();
                entry_SOLO_OUTtoSPLEISSER();
            }
            break;

        case SOLO_OUTtoSPLEISSER:
            DisplaySendeBefehl(0x0C);
            gotoxy(1, 1);
            DisplaySendeString("Filament links");
            gotoxy(1, 3);
            DisplaySendeString("bereit");
            gotoxy(1, 4);
            DisplaySendeString("Spleissen    Abbruch");

            zeit = machNichts.read();
            if(zeit >= WARTEZEIT) {

                entry_SOLO_DEFAULT();
            }

            if(SOLOButtonSTART == true) {
                SOLOButtonSTART = false;
                //buttonAbbruch_pressed = false;
                //buttonAbbruch_diable_cb();
                entry_SOLO_DEFAULT();
            }

            if(SOLOButtonSTART == true) {
               SOLOButtonSTART = false;
               // buttonSTART_pressed = false;
               // buttonSTART_diable_cb();
                entry_SOLO_Spleissen();
            }
            break;

        case SOLO_Spleissen:

            //DisplaySendeBefehl(0x0C);
            gotoxy(1, 1);
            DisplaySendeString("Spleissen");
            gotoxy(1, 3);
            DisplaySendeString("Spleissen");


            motors[1]->set_max_speed(50);
            //motors[1]->set_acceleration(5);
            Stepper_2_Move('R', 1.3*400);
            StatusSOLO = SOLO_FERTIG;

            break;

        case SOLO_FERTIG:

            motors[1]->set_max_speed(50);
            motors[1]->set_acceleration(10);
            motors[0]->set_max_speed(55);
            motors[0]->set_acceleration(10);

            //motors[0]->move(StepperMotor::FWD, 0.2*400*128);
            motors[1]->move(StepperMotor::FWD, 0.05*400*128);

            //Set_Cutter(400, 200, 4);

            motors[1]->wait_while_active();



            motors[1]->set_max_speed(300);
            motors[1]->set_acceleration(300);
            motors[0]->set_max_speed(400);
            motors[0]->set_acceleration(400);

            motors[0]->move(StepperMotor::FWD, 1.2*400*128);
            motors[1]->move(StepperMotor::FWD, 1*400*128);
            motors[1]->wait_while_active();
            Stepper_2_Leerlauf();

            motors[0]->perform_prepared_actions();
            motors2[0]->perform_prepared_actions();





            //motors2[0]->perform_prepared_actions();

            //Stepper_3_Move('V', 1.3*400);


            StatusSOLO = SOLO_STOERUNG;
            break;

        case SOLO_STOERUNG:
            gotoxy(1, 1);
            DisplaySendeString("fertigfertig");
            gotoxy(1, 3);
            DisplaySendeString("fertigfertig");
            break;

    }
}
*/