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
main.cpp
- Committer:
- Najib_irvani
- Date:
- 2016-02-19
- Revision:
- 5:34be90fa6d27
- Parent:
- 4:65d65a108b68
- Child:
- 6:0e159860e5c6
File content as of revision 5:34be90fa6d27:
/*********************************************************************************************/ /** FILE HEADER **/ /*********************************************************************************************/ #include "mbed.h" #include "Motor.h" #include "NewTextLCD.h" #include "PS_PAD.h" #include "PID.h" #include "millis.h" #include "esc.h" #include "Servo.h" /*********************************************************************************************/ /** DEKLARASI INPUT OUTPUT **/ /*********************************************************************************************/ // serial pc Serial pc(USBTX,USBRX); // LCD 20x4 //TextLCD lcd(PC_5, PB_1, PA_7, PC_4, PA_5, PA_6, TextLCD::LCD20x4); //(rs,e,d4,d5,d6,d7) // joystick PS2 PS_PAD ps2(PB_15,PB_14,PB_13, PB_12); //(mosi, miso, sck, ss) // tambahan power // inisialisasi pwm awal servo float pwm = 0.00; // inisialisasi sudut awal int sudut = 0; //membatasi nilai brushless pada edf float min=0; float max=0.50; // PID sensor garis //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 //Motor motor1(PA_15, PA_14, PA_13); //motor3 //Motor gripper(PB_5, PA_11, PA_12); //Motor motor2(PA_3, PC_15, PC_14); //kanan //Motor motor1(PA_1, PH_0, PH_1); //kiri Motor gripper(PA_10, PB_4, PB_5); // pwm, fwd, rev Motor motor2(PA_0, PA_6, PA_7); // pwm, fwd, rev //Motor motor3(PA_1, PH_1, PH_0); // pwm, fwd, rev Motor motor1(PA_1, PC_9, PC_8); // pwm, fwd, rev DigitalOut pnuematik_lengan(PC_10); DigitalOut pnuematik_gripper(PC_11); DigitalOut pnuematik_atas(PD_2); DigitalOut pnuematik_bawah(PC_12); Servo servo_gripper(PB_9); //Deklarasi Input Limit Switch /* // Sensor DigitalIn S1(PC_0); DigitalIn S2(PC_1); DigitalIn S3(PC_2); DigitalIn S4(PC_3); DigitalIn S5(PA_0); DigitalIn S6(PA_1); DigitalIn S7(PA_4); DigitalIn S8(PB_0); DigitalIn S9(PB_2); DigitalIn S10(PB_10); DigitalIn S11(PA_10); DigitalIn S12(PA_11); DigitalIn S13(PA_12); DigitalOut calibrate(PA_15); */ //DigitalIn button(USER_BUTTON); //bool sensor[13]; //DigitalIn limit_switch1(A0); //DigitalIn limit_switch2(A1); // Multitasker //Ticker timer; /*********************************************************************************************/ /** DEKLARASI VARIABEL GLOBAL **/ /*********************************************************************************************/ float gMax_speed=0.7; //nilai maksimum kecepatan motor float gMin_speed=-0.05; //nilai minimum kecepatan motor float gTuning = 0.16; float gripper_up = 1; float gripper_down = 0.2; unsigned char gMode=0; //variabel mode driving (manual = 0 otomatis = 1) unsigned char gCase=0; //variabel keadaan proses unsigned char i; // variabel iterasi int over=0; int lapangan = 1; bool state_atas = 0; bool state_bawah = 0; /*********************************************************************************************/ /** DEKLARASI PROSEDUR DAN FUNGSI **/ /*********************************************************************************************/ /*********************************************************************************************/ /*********************************************************************************************/ /** PROGRAM UTAMA **/ /*********************************************************************************************/ /*********************************************************************************************/ void ambil(int c){ switch (c) { case 1: servo_gripper.position(170); pc.printf("grip lost"); wait_ms(25); pnuematik_lengan=0; wait_ms(500); break; case 2: pnuematik_gripper=0; wait_ms(600); servo_gripper.position(50); pc.printf("grip get"); wait_ms(25); wait_ms(1000); pnuematik_gripper=1; wait_ms(800); pnuematik_lengan=1; wait_ms(200); break; } } void init_servo(int i){ if (i){ if (sudut>90){ sudut=90; } if (sudut<0){ sudut=0; } } else { if (sudut>0){ sudut=0; } if (sudut<-90){ sudut=-90; } } } void init_pwm (){ if (pwm>max){ pwm = max; } if (pwm<min){ pwm = min; } } int count=1; int main(void){ //inisialisasi joystick ps2.init(); //tambahan power //ESC edf(PB_9,20); //p wm esc pin PC_7 Servo myservo(PB_8); //pwm servo pin PA_8 //set inisialisasi servo pada posisi 0 myservo.position(sudut); //set edf pada posisi bukan kalibrasi, yaitu set edf 0 //edf.setThrottle(pwm); //edf.pulse(); pc.baud(115200); float speed; servo_gripper.position(140); pnuematik_lengan=1; pnuematik_gripper=1; pnuematik_atas = state_atas; pnuematik_bawah = state_bawah; while(1) { ps2.poll(); if((ps2.read(PS_PAD::PAD_TOP)==1) && (ps2.read(PS_PAD::PAD_BOTTOM)==0)){ //MOTOR DEPAN speed = gMax_speed; motor1.speed(speed-gTuning); motor2.speed(speed); pc.printf("maju \n"); } else if((ps2.read(PS_PAD::PAD_BOTTOM)==1) && (ps2.read(PS_PAD::PAD_TOP)==0)){ //MOTOR BELAKANG speed = gMax_speed; motor1.speed(-speed); motor2.speed(-speed); pc.printf("mundur \n"); } else if((ps2.read(PS_PAD::PAD_L1)==1) && (ps2.read(PS_PAD::PAD_R1)==0)){ //pivot kiri speed = gMax_speed; motor1.speed(-(speed*0.9-gTuning)); motor2.speed(speed*0.9); pc.printf("kiri \n"); } else if((ps2.read(PS_PAD::PAD_R1)==1) && (ps2.read(PS_PAD::PAD_L1)==0)){ //pivot kanan speed = gMax_speed; motor1.speed(speed*0.9-gTuning); motor2.speed(-speed*0.9 ); pc.printf("kanan \n"); } else if ((ps2.read(PS_PAD::PAD_CIRCLE)==1)) { //mekanisme ambil gripper pc.printf("mekanisme gripper"); if (count==1){ pc.printf("ambil 1"); ambil(1); count=2; wait_ms(400); } else { ambil(2); count=1; pc.printf("ambil 2"); wait_ms(400); } } else { motor1.brake(1); motor2.brake(1); } if(ps2.read(PS_PAD::ANALOG_LX)<=-100){ //SLIDER KIRI pc.printf("slide kiri \n"); } else if(ps2.read(PS_PAD::ANALOG_LX)>=100){ //SLIDER KANAN pc.printf("slide kanan \n"); } else { pc.printf("slide diam \n"); } if(ps2.read(PS_PAD::ANALOG_LY)<=-100){ //POWER WINDOW ATAS gripper.speed(gripper_up); pc.printf("up \n"); } else if(ps2.read(PS_PAD::ANALOG_LY)>=100){ //POWER WINDOW BAWAH if ((state_atas==1) || (state_bawah==1)) { gripper_down = 1; } else { gripper_down = 0.2; } gripper.speed(-gripper_down); pc.printf("down \n"); } else { gripper.brake(1); pc.printf("power diam \n"); } if(ps2.read(PS_PAD::ANALOG_RY)<=-100){ //PWM ++ pwm += 0.01; pc.printf("gaspol \n"); } if(ps2.read(PS_PAD::ANALOG_RY)>=100){ //PWM-- pwm -= 0.01; pc.printf("rem ndeng \n"); } if(ps2.read(PS_PAD::ANALOG_RX)<=-100){ //SERVO -- sudut -= 3; pc.printf("servo min \n"); } if(ps2.read(PS_PAD::ANALOG_RX)>=100){ //SERVO ++ sudut += 3; pc.printf("servo max \n"); } //gripper pole if ((ps2.read(PS_PAD::PAD_L2)==1)) { state_atas = !state_atas; pnuematik_atas= state_atas; wait_ms(300); } else if ((ps2.read(PS_PAD::PAD_R2)==1)) { state_bawah = !state_bawah; pnuematik_bawah = state_bawah; wait_ms(300); } init_servo(lapangan); init_pwm(); myservo.position(sudut); wait_ms(25); //edf.setThrottle(pwm); //edf.pulse(); //wait_ms(25); } }