convert_KeilToMbed
Dependencies: DigitDisplay Motor PID mbed millis
Fork of DagonFly__RoadToJapan_15Mei_Ultimate by
Diff: main.cpp
- Revision:
- 44:452c214d9cf5
- Parent:
- 43:3807a95aa284
- Child:
- 45:964ae71a30e3
diff -r 3807a95aa284 -r 452c214d9cf5 main.cpp --- a/main.cpp Sun Mar 12 06:56:53 2017 +0000 +++ b/main.cpp Wed Apr 05 12:54:03 2017 +0000 @@ -25,15 +25,14 @@ /* Kanan => */ /* Kiri => */ /* */ -/* Tombol silang => Power Screw Aktif */ +/* Tombol silang => Pneumatik aktif */ /* Tombol segitiga => Aktif motor Launcher */ -/* Tombol lingkaran => Aktif Pneumatik Launcher */ +/* Tombol lingkaran => Reloader naik */ +/* Tombol kotak => Reloader turun */ /* Tombol L1 => Pivot Kiri */ /* Tombol R1 => Pivot Kanan */ -/* Tombol L3 => PWM Motor Belakang Dikurangi */ -/* Tombol R3 => PWM Motor Belakang Ditambah */ -/* Tombol L2 => PWM Motor Depan Dikurangi */ -/* Tombol R2 => PWM Motor Depan Ditambah */ +/* Tombol L2 => Kurang PWM Motor Launcher */ +/* Tombol R2 => Tambah PWM Motor Launcher */ /* */ /* Bismillahirahmanirrahim */ /* Jagalah Kebersihan Kodingan */ @@ -53,22 +52,21 @@ #define PI 3.14159265 #define D_ENCODER 10 // Diameter Roda Encoder #define D_ROBOT 80 // Diameter Roda Robot -#define PERPINDAHAN 1 // Perpindahan ke kanan dan kiri // Variable Atas double speed, speed2; const double maxSpeed = 0.95, minSpeed = 0.0; -const double kpA=0.6757, kdA=0.06757, kiA=0.00006757; +const double kpA=0.6757, kdA=0.7757, kiA=0.00003757; double p,i,d; double p2,i2,d2; double last_error = 0, current_error, sum_error = 0; double last_error2 = 0, current_error2, sum_error2 = 0; float rpm, rpm2; -float target_rpm = 8.0, target_rpm2 = 10.0; +float target_rpm = 17.0, target_rpm2 = 17.0; // selisih 4 bagus, sama bagus const float maxRPM = 28, minRPM = 0; // Limit 25 atau 27 -const float pwmPowerUp = 0.8; -const float pwmPowerDown = -0.9; +const float pwmPowerUp = 1.0; +const float pwmPowerDown = -1.0; float jarak_ping=0; @@ -77,13 +75,12 @@ float keliling_enc = PI*D_ENCODER; float keliling_robot = PI*D_ROBOT; float speedT = 0.2; -float vpid = 0; -float PIVOT = 0.2; // PWM Pivot Kanan, Pivot Kiri -float tuneDpn = 0.62; // Tunning PWM motor Depan -float tuneBlk = 0.62; // Tunning PWM motor belakang -float tuneR = 0.72; +float PIVOT = 0.17; // PWM Pivot Kanan, Pivot Kiri +float tuneDpn = 0.80; // Tunning PWM motor Depan +float tuneBlk = 0.80; // Tunning PWM motor belakang +float tuneR = 0.78; float tuneL = 0.72; -float serong = 0.65; +float serong = 0.4; float rasio = 1.4545; /* variable tunning */ @@ -111,6 +108,7 @@ bool isReload = false; bool ReloadOn = false; bool flag_Pneu = false; +bool ready = false; /*****************************************************/ /* Definisi Prosedur, Fungsi dan Setting Pinout */ @@ -132,33 +130,35 @@ encoderKRAI encoderBase(PC_4, PB_15, 2000, encoderKRAI::X2_ENCODING); //inA, inB, pin Indeks (NC = tak ada), 2xresolusi, mode pembacaan /* Deklarasi Encoder Launcher */ -encoderKRAI encLauncherBlk( PC_10, PC_11, 28, encoderKRAI::X4_ENCODING); -encoderKRAI encLauncherDpn( PD_2, PC_12, 28, encoderKRAI::X4_ENCODING); +encoderKRAI encLauncherDpn( PC_10, PC_11, 28, encoderKRAI::X4_ENCODING); +encoderKRAI encLauncherBlk( PC_12, PD_2, 28, encoderKRAI::X4_ENCODING); /* Deklarasi Motor Base */ -Motor motorDpn(PB_9, PA_12, PC_5); // pwm, fwd, rev -Motor motorBlk(PB_6, PB_1, PB_12); -Motor motorL (PA_11, PA_6, PA_7); -Motor motorR (PB_7, PA_14, PA_15); +Motor motorDpn(PB_7, PC_3, PC_0); //(PB_9, PA_12, PC_5); +//Motor motorBlk(PB_6, PC_14, PC_13); //(PB_6, PB_1, PB_12); (PC_7, PC_14, PC_13); +Motor motorBlk(PB_2, PB_15, PB_1); +Motor motorL (PB_9, PA_12, PA_6); +Motor motorR (PB_8, PC_5, PC_6); //(PC_6, PB_4, PB_5); /* Deklarasi Motor Launcher */ -Motor launcherDpn(PA_8,PC_2,PC_1); // pwm ,fwd, rev -Motor launcherBlk(PA_10, PC_3, PC_0); // pwm, fwd, rev -Motor powerScrew(PA_9, PA_4, PC_15); // pwm, fwd, rev +Motor launcherDpn(PA_5,PB_12,PA_11); // pwm ,fwd, rev +Motor launcherBlk(PB_3, PC_4, PA_10); // pwm, fwd, rev +Motor powerScrew(PB_10, PB_14, PB_13); // pwm, fwd, rev /* Deklarasi Penumatik Launcher */ -DigitalOut pneumatik(PB_3, PullUp); +DigitalOut pneumatik(PA_4, PullUp); /*Dekalrasi Limit Switch */ //DigitalIn infraAtas(PC_9, PullUp); -DigitalIn limitTengah(PB_10, PullUp); -DigitalIn limitBawah(PC_8, PullUp); +DigitalIn limitTengah(PA_9, PullUp); +DigitalIn limitBawah(PC_7, PullUp); +DigitalIn limitBawah1(PA_7, PullUp); /*deklarasi PING ultrasonic*/ -Ping pingAtas(PC_9); +Ping pingAtas(PC_15); /*Deklarasi Display*/ -DigitDisplay display (D15, D4); +DigitDisplay display (PA_8, PC_8); /****************************************************/ /* Deklarasi Fungsi dan Procedure */ @@ -183,6 +183,18 @@ // Pivot Kiri caseJoystick = 2; } + else if ((joystick.START_click)&&(!joystick.SELECT_click)&&(!joystick.R3_click)) { + // tambah rpm dengan nilai tertentu + caseJoystick = 31; + } + else if ((!joystick.START_click)&&(joystick.SELECT_click)&&(!joystick.R3_click)) { + // kurangi rpm dengan nilai tertentu + caseJoystick = 32; + } + else if ((!joystick.START_click)&&(!joystick.SELECT_click)&&(joystick.R3_click)) { + // kurangi rpm dengan nilai tertentu + caseJoystick = 33; + } else if ((joystick.R1)&&(!joystick.L1)&&(!joystick.atas)&&(!joystick.bawah)&&(joystick.kanan)&&(!joystick.kiri)) { // Kanan + Rotasi kanan caseJoystick = 17; @@ -241,43 +253,35 @@ } else if ((!joystick.R1)&&(!joystick.L1)&&(joystick.atas)&&(!joystick.bawah)&&(joystick.kanan)&&(!joystick.kiri)) { // Serong kanan maju - caseJoystick = 13; - //pc.printf("bawah"); + caseJoystick = 13; } else if ((!joystick.R1)&&(!joystick.L1)&&(joystick.atas)&&(!joystick.bawah)&&(!joystick.kanan)&&(joystick.kiri)) { // Serong kiri maju - caseJoystick = 14; - //pc.printf("bawah"); + caseJoystick = 14; } else if ((!joystick.R1)&&(!joystick.L1)&&(!joystick.atas)&&(joystick.bawah)&&(joystick.kanan)&&(!joystick.kiri)) { // Serong kanan mundur - caseJoystick = 15; - //pc.printf("bawah"); + caseJoystick = 15; } else if ((!joystick.R1)&&(!joystick.L1)&&(!joystick.atas)&&(joystick.bawah)&&(!joystick.kanan)&&(joystick.kiri)) { // Serong kiri mundur - caseJoystick = 16; - //pc.printf("bawah"); + caseJoystick = 16; } else if ((!joystick.R1)&&(!joystick.L1)&&(!joystick.atas)&&(!joystick.bawah)&&(joystick.kanan)&&(!joystick.kiri)) { // Kanan caseJoystick = 3; - //pc.printf("kanan"); } else if ((!joystick.R1)&&(!joystick.L1)&&(!joystick.atas)&&(!joystick.bawah)&&(!joystick.kanan)&&(joystick.kiri)) { // Kiri caseJoystick = 4; - //pc.printf("kiri"); } else if ((!joystick.R1)&&(!joystick.L1)&&(joystick.atas)&&(!joystick.bawah)&&(!joystick.kanan)&&(!joystick.kiri)) { // Atas -- Maju - caseJoystick = 8; - //pc.printf("atas"); + caseJoystick = 8; } else if ((!joystick.R1)&&(!joystick.L1)&&(!joystick.atas)&&(joystick.bawah)&&(!joystick.kanan)&&(!joystick.kiri)) { // Bawah -- Mundur - caseJoystick = 9; - //pc.printf("bawah"); + caseJoystick = 9; } else if (joystick.segitiga_click){ // Motor Launcher @@ -482,35 +486,36 @@ { // Serong kanan maju motorDpn.speed(-serong); - motorL.brake(-rasio*serong); + motorL.speed(-serong); motorBlk.speed(serong); - motorR.brake(rasio*serong); + motorR.speed(serong); break; } case (14) : { // Serong kiri maju motorDpn.speed(serong); - motorR.brake(rasio*serong); + motorR.speed(serong); motorBlk.speed(-serong); - motorL.brake(-rasio*serong); + motorL.speed(-serong); break; } case (15) : { // Serong kanan mundur - motorR.brake(-rasio*serong); + motorDpn.speed(-serong); + motorR.speed(-serong); motorBlk.speed(serong); - motorL.brake(rasio*serong); + motorL.speed(serong); break; } case (16) : { // Serong kiri mundur motorDpn.speed(serong); - motorL.brake(rasio*serong); + motorL.speed(serong); motorBlk.speed(-serong); - motorR.brake(-rasio*serong); + motorR.speed(-serong); break; } case (3) : @@ -534,7 +539,6 @@ case (8) : { // Maju - //init_rpm(); motorR.speed(tuneR); motorL.speed(-tuneL); motorDpn.brake(1); @@ -544,7 +548,6 @@ case (9) : { // Mundur - //init_rpm(); motorR.speed(-tuneR); motorL.speed(tuneL); motorDpn.brake(1); @@ -576,9 +579,13 @@ case (10) : { // Pneumatik - pneumatik = 0; - previousMillis3 = millis(); - flag_Pneu = true; + if (ready) + { + pneumatik = 0; + previousMillis3 = millis(); + flag_Pneu = true; + ready = false; + } break; } case (11) : @@ -588,6 +595,30 @@ isReload = false; break; } + case (31) : + { + // start + target_rpm2 = 22; + target_rpm = 22; + init_rpm(); + break; + } + case (32) : + { + // select + target_rpm2 = 10; + target_rpm = 10; + init_rpm(); + break; + } + case (33) : + { + // R3 + target_rpm2 = 17; + target_rpm = 17; + init_rpm(); + break; + } case (12) : { // Power Screw Down @@ -610,7 +641,7 @@ if(ReloadOn){ if(isReload){ powerScrew.speed(pwmPowerDown); - if(!limitBawah){ + if((!limitBawah)||(!limitBawah1)){ isReload = false; ReloadOn = false; } @@ -620,12 +651,15 @@ } else if((jarak_ping > 6.5) && !flag_Pneu){ powerScrew.speed(pwmPowerUp); + ready = false; } - else if((jarak_ping < 6 ) && !flag_Pneu) { - powerScrew.speed(-0.1); + else if((jarak_ping < 6.0) && !flag_Pneu) { + powerScrew.speed(-0.85); + ready = false; } else{ powerScrew.brake(1); + ready = true; } } else{ @@ -646,10 +680,10 @@ { rpm = (float)encLauncherBlk.getPulses(); current_error = target_rpm - rpm; - sum_error = sum_error + current_error; + sum_error = sum_error + current_error*12.5; p = current_error*kpA; d = (current_error-last_error)*kdA/12.5; - i = sum_error*kiA*12.5; + i = sum_error*kiA; speed = p + d + i; //init_speed(); if(speed > maxSpeed){ @@ -670,10 +704,10 @@ { rpm2 = (float)encLauncherDpn.getPulses(); current_error2 = target_rpm2 - rpm2; - sum_error2 = sum_error2 + current_error2; + sum_error2 = sum_error2 + current_error2*12.5; p2 = current_error2*kpA; d2 = (current_error2-last_error2)*kdA/12.5; - i2 = sum_error2*kiA*12.5; + i2 = sum_error2*kiA; speed2 = p2 + d2 + i2; //init_speed(); if (speed2 > maxSpeed){ @@ -689,11 +723,18 @@ encLauncherDpn.reset(); previousMillis2 = currentMillis2; } + pc.printf("%.2f\t%.2f\n",rpm,rpm2); } else { launcherDpn.brake(1); launcherBlk.brake(1); + sum_error = 0; + sum_error2 = 0; + current_error = 0; + current_error2 = 0; + last_error = 0; + last_error2 = 0; } } @@ -740,7 +781,7 @@ joystick.olah_data(); // Masuk ke case joystick case_joy = case_joystick(); - pc.printf("%d\n",case_joy); + //pc.printf("%d\n",case_joy); aktuator(); launcher(); reloader(); @@ -754,13 +795,8 @@ joystick.idle(); } - if(millis() - previousMillis5 >= 400){ - //display.write(0,((int) target_rpm2-2) / 10); - //display.write(1,((int)target_rpm2-2) % 10); - //display.write(2, (int)target_rpm2 / 10); - //display.write(3, (int)target_rpm2 % 10); - //display.setColon(true); - + if(millis() - previousMillis5 >= 400) + { display.write(0,((int) rpm2) / 10); display.write(1,((int)rpm2) % 10); display.write(2, (int)target_rpm2 / 10);