Update
Dependencies: mbed mbed-rtos X_NUCLEO_IHM02A1
ST_SOLO.cpp
- Committer:
- scherfa2
- Date:
- 2019-05-14
- Revision:
- 40:117b324843ee
- Parent:
- 39:6cc9a40bc8a6
File content as of revision 40:117b324843ee:
#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(); printf("Funktion_SOLOSTART\r"); 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: printf("MODUS SOLO\n\r"); entry_SOLO_START(); break; case SOLO_START: printf("MODUS SOLO\n\r"); 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; } } */