progam hybrid. versi lawas

Dependencies:   ESC Motor NewTextLCD PID PS3 PS_PAD Ping Servo mbed millis

Fork of Base_Hybrid_Latihan_Ok_Hajar_servo_sensor by KRAI 2016

Revision:
6:0e159860e5c6
Parent:
5:34be90fa6d27
Child:
7:4d6a73d924ff
--- a/main.cpp	Fri Feb 19 12:49:34 2016 +0000
+++ b/main.cpp	Fri Feb 19 14:18:01 2016 +0000
@@ -36,7 +36,7 @@
 float max=0.50;
 
 // PID sensor garis 
-//PID PID(0.992,0.000,0.81,0.001); //(P,I,D, time sampling)
+PID PID(0.992,0.000,0.81,0.001); //(P,I,D, time sampling)
 
 // Motor(pwm, fwd, rev)
 //Motor motor2(PC_6, PC_8, PC_9);  //gripper
@@ -58,7 +58,7 @@
 Servo servo_gripper(PB_9);
 //Deklarasi Input Limit Switch
 
-/*
+
 // Sensor
 DigitalIn S1(PC_0);
 DigitalIn S2(PC_1);
@@ -74,7 +74,7 @@
 DigitalIn S12(PA_11);
 DigitalIn S13(PA_12);
 DigitalOut calibrate(PA_15);
-*/
+
 
 //DigitalIn button(USER_BUTTON);
 
@@ -112,7 +112,169 @@
 /*********************************************************************************************/
 /**     DEKLARASI PROSEDUR DAN FUNGSI                                                        **/
 /*********************************************************************************************/     
+void init_sensor()
+{
+    if(ps2.read(PS_PAD::PAD_SQUARE)==1)
+    {
+        calibrate=0;
+    }
+    else
+    {
+            calibrate=1;
+    }
+     
+    sensor[0]=(S1.read()==1);
+    sensor[1]=(S2.read()==1);
+    sensor[2]=(S3.read()==1);
+    sensor[3]=(S4.read()==1);
+    sensor[4]=(S5.read()==1);
+    sensor[5]=(S6.read()==1);
+    sensor[6]=(S7.read()==1);
+    sensor[7]=(S8.read()==1);
+    sensor[8]=(S9.read()==1);
+    sensor[9]=(S10.read()==1);
+    sensor[10]=(S11.read()==1);
+    sensor[11]=(S12.read()==1);
+    sensor[12]=(S13.read()==1);
+}
 
+void PIDrunning()   //menjalankan perintah untuk line follower
+{  
+    int pv;
+    int over=0;
+    float speedR,speedL;
+    
+    //init_sensor();
+    //////////////////logic dari PV (present Value)/////////////////////////
+    if(sensor[0]){
+        pv = -12;
+        over=1;
+    }
+    else if(sensor[12]){
+        pv = 12;
+        over=2;
+    }
+    else if(sensor[0] && sensor[1]){
+        pv = -10;
+    }
+    else if(sensor[11] && sensor[12]){
+        pv = 10;
+    }
+    else if(sensor[1]){
+        pv = -9;
+    }
+    else if(sensor[11]){
+        pv = 9;
+    }
+    else if(sensor[1] && sensor[2]){
+        pv = -8;
+    }
+    else if(sensor[10] && sensor[11]){
+        pv = 8;
+    }
+    else if(sensor[2]){
+        pv = -7;
+    }
+    else if(sensor[10]){
+        pv = 7;
+    }
+    else if(sensor[2] && sensor[3]){
+        pv = -6;
+    }
+    else if(sensor[9] && sensor[10]){
+        pv = 6;
+    }
+    else if(sensor[3]){
+        pv = -5;
+    }
+    else if(sensor[9]){
+        pv = 5;
+    }
+    else if(sensor[3] && sensor[4]){
+        pv = -4;
+    }
+    else if(sensor[8] && sensor[9]){
+        pv = 4;  
+    }
+    else if(sensor[4]){
+        pv = -3;
+    }
+    else if(sensor[8]){
+        pv = 3;
+    }
+    else if(sensor[4] && sensor[5]){
+        pv = -2;
+    }
+    else if(sensor[7] && sensor[8]){
+        pv = 2;
+    }
+    else if(sensor[5]){
+        pv = -1;
+    }  
+     else if(sensor[7]){
+        pv = 1;
+    }
+    else if(sensor[5] && sensor[6]){
+        pv = -0.5;    
+    }
+    else if(sensor[6] && sensor[7]){
+        pv = 0.5;
+    } 
+    else if (sensor[6]){
+        pv = 0;
+    }
+    ///////////////// robot bergerak keluar dari sensor/////////////////////
+        if(over==1){
+            /*if(speed_ka > 0){
+                wait_ms(10);
+                motor2.speed(-speed_ka);
+                wait_ms(10);
+                }
+            else{
+                motor2.speed(speed_ka);
+                }
+            wait_ms(10);*/
+            
+            motor1.brake(1);
+            //wait_ms(100);
+            
+        }
+        else if(over==2){
+            /*if(speed_ki > 0){
+                wait_ms(10);
+                motor1.speed(-speed_ki);
+                wait_ms(10);
+                }
+            else{
+                wait_ms(10);
+                motor1.speed(speed_ki);
+                wait_ms(10);
+                }
+            wait_ms(10);*/
+            motor2.brake(1);
+            //wait_ms(100);
+        }
+    
+    PID.setProcessValue(pv);
+    PID.setSetPoint(0);
+    
+    // memulai perhitungan PID
+
+    speedR = gMax_speed - PID.compute();
+    if(speedR > gMax_speed){
+        speedR = gMax_speed;
+        }
+    else if(speedR < gMin_speed)
+        speedR = gMin_speed;
+    motor2.speed(speedR);
+
+    speedL = gMax_speed + PID.compute();
+    if(speedL > gMax_speed)
+        speedL = gMax_speed;
+    else if(speedL < gMin_speed)
+        speedL = gMin_speed;
+    motor1.speed(speedL);
+}
 
 /*********************************************************************************************/
 /*********************************************************************************************/
@@ -182,6 +344,14 @@
     //inisialisasi joystick
     ps2.init();
     
+    //inisialisasi PID
+    PID.setInputLimits(-15,15);
+    PID.setOutputLimits(-1.0,1.0);
+    PID.setMode(1.0);
+    PID.setBias(0.0);
+    PID.reset();
+    
+    
     //tambahan power
     //ESC edf(PB_9,20); //p wm esc pin PC_7
     Servo myservo(PB_8); //pwm servo pin PA_8
@@ -212,6 +382,16 @@
                     motor2.speed(speed);
                     pc.printf("maju \n");
         }
+        else if((ps2.read(PS_PAD::PAD_X)==1)&&(ps2.read(PS_PAD::PAD_TOP)==1)){
+                    PIDrunning();
+                    pc.printf("PID \t %f \t ",PID.compute());
+                    
+                    for(i=0;i<13;i++)
+                    {
+                        pc.printf("%i \t",sensor[i]);
+                    }
+                    pc.printf("\n");
+        }        
         else if((ps2.read(PS_PAD::PAD_BOTTOM)==1) && (ps2.read(PS_PAD::PAD_TOP)==0)){
             //MOTOR BELAKANG
             speed = gMax_speed;