#define Fwdleft() \ T_path=3;T_wait=(timervl_selflngth/3);turn(); \ T_path=1;T_wait=(timervl_360dg/4); turn(); #define Fwdright() \ T_path=3;T_wait=(timervl_selflngth/3);turn(); \ T_path=2;T_wait=(timervl_360dg/4); turn(); #define MotorsOff() Off(OUT_A+OUT_C); #define MotorsOn() OnFwd(OUT_A+OUT_C); #define LSENSOR SENSOR_1 #define TSENSOR SENSOR_2 #define RSENSOR SENSOR_3 #define WaitTsens() while(!(SENSOR==1)); /* TABLE OF GLOBAL VARIABLES, SUBSTITUE FOR FUNCTION ARGUMENT INEPTABILITY */ //Sensor values int Lwhite, Rwhite, Lwgrey, Rwgrey, Lgrey, Rgrey, Lblack, Rblack; // turn arguments int T_wait, T_path; // linje_till_grind arguments int Lthr, Rthr, LEthr, REthr, mode; // gettimervalues retvals int timervl_360dg, timervl_selflngth; task main() { SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); SetSensor(SENSOR_2, SENSOR_TOUCH); //GetTimerValues(); //49, 51 Rwgrey=49; Lwgrey=51; lab2(); lab3(); /* hitta(); //hittar forsta linjen och sänker gaffeln till grinden Lthr=43;Rthr=43;LEthr=45;REthr=48;mode=1; linje_till_grind(); oppnagrind(); //öpnar grind linje_till_grind(); linje_till_grind(); OnFwd(OUT_A); Wait(4); Off(OUT_A); fortsatt(); lab_hh(); Lthr=50;Rthr=47;LEthr=45;REthr=48;mode=2; linje_till_grind(); SetPower(OUT_A+OUT_C, 2); Lthr=43;Rthr=43;LEthr=45;REthr=48;mode=3; linje_till_grind(); pickball(); lab_vv(); Lthr=43;Rthr=43;LEthr=45;REthr=48;mode=4; linje_till_grind(); bak(); SetPower(OUT_A+OUT_C,2); Lthr=50;Rthr=0;mode=5; linje_till_grind(); labyrint(); */ // lab står för laburint, och v för vänster, b för bak, och h för höger } sub turn() { Off(OUT_A+OUT_C); switch(T_path) { case 1: OnFwd(OUT_C); OnRev(OUT_A); break; case 2: OnFwd(OUT_A); OnRev(OUT_C); break; case 3: OnFwd(OUT_A+OUT_C); break; case 4: OnRev(OUT_A+OUT_C); break; } /* Stäng av motor efter N/100 sekunder */ if (T_wait!=0) { Wait(T_wait); Off(OUT_A+OUT_C); } } void bak() { OnRev(OUT_A+OUT_C); Wait(60); OnFwd(OUT_A); Wait(50); Off(OUT_A+OUT_C); /* while( (SENSOR_1>45+2) ) { OnRev(OUT_A+OUT_C); } Off(OUT_A); Wait(40); Off(OUT_C); */ } void pickball() { SetPower(OUT_B,1); OnFwd(OUT_B); Wait(10); OnRev(OUT_B); Wait(30); Off(OUT_B); } void dropball() { SetPower(OUT_B,1); OnRev(OUT_B); Wait(10); OnFwd(OUT_B); Wait(30); Off(OUT_B); } void lab_vv() { OnRev(OUT_A+OUT_C); Wait(20); OnRev(OUT_A); OnFwd(OUT_C); Wait(70); OnFwd(OUT_A+OUT_C); Wait(40); SetPower(OUT_A,3); SetPower(OUT_C,2); } void lab_hh() { OnRev(OUT_A+OUT_C); Wait(20); Off(OUT_A+OUT_C); OnFwd(OUT_A); Wait(110); Off(OUT_A+OUT_C); } void fortsatt() { SetPower(OUT_A +OUT_C, OUT_FULL); while(SENSOR_3>43) { OnFwd(OUT_A+OUT_C); } Off(OUT_A+OUT_C); } void hitta () { int x; int z; int go=1; while(go==1) { SetPower(OUT_C,3); SetPower(OUT_A,3); SetSensor(SENSOR_1, SENSOR_LIGHT); SetSensor(SENSOR_3, SENSOR_LIGHT); z=SENSOR_1; x=SENSOR_3; OnFwd(OUT_A+OUT_C); Wait(1); if (x<43) { // då är svart linje hittad OnRev(OUT_A+OUT_C); Wait(40); Off(OUT_A+OUT_C); OnFwd(OUT_C); Wait(140); Off(OUT_A+OUT_C); OnFwd(OUT_B); Wait(30); Off(OUT_B); go=0; } } } void hitta2 () { /* Positionera robot inför linje: Kör framåt medans svart linje inte är hittad*/ T_path=3;T_wait=0;turn(); until (LSENSORLEthr-2 && SENSOR_1REthr-2 && SENSOR_3LEthr-2 && SENSOR_150) ) { SetPower(OUT_A+OUT_C,2); OnFwd(OUT_A); OnRev(OUT_C); Wait(5); OnRev(OUT_A+OUT_C); Wait(20); Off(OUT_A+OUT_C); } if ( (SENSOR_3>REthr-2 && SENSOR_350) ) { SetPower(OUT_A+OUT_C,2); OnRev(OUT_A); OnFwd(OUT_C); Wait(5); OnRev(OUT_A+OUT_C); Wait(20); Off(OUT_A+OUT_C); } if ( (SENSOR_1>LEthr-2 && SENSOR_1REthr-2 && SENSOR_3LEthr-2 && SENSOR_1REthr-2 && SENSOR_3LEthr-2 && SENSOR_150) ) { SetPower(OUT_A+OUT_C,2); OnFwd(OUT_A); OnRev(OUT_C); Wait(5); OnRev(OUT_A+OUT_C); Wait(20); Off(OUT_A+OUT_C); } if ( (SENSOR_3>REthr-2 && SENSOR_350) ) { SetPower(OUT_A+OUT_C,2); OnRev(OUT_A); OnFwd(OUT_C); Wait(5); OnRev(OUT_A+OUT_C); Wait(20); Off(OUT_A+OUT_C); } if ( (SENSOR_1>LEthr-2 && SENSOR_1REthr-2 && SENSOR_3Lblack+2); //Vanta tills sensorer traffar svart utgångslinje medans timer:0 inkrementeras until( (RSENSORLblack+2); //Vanta tills sensorer traffar svart utgångslinje medans timer:0 inkrementeras until( (RSENSORLblack+2); //Vanta tills sensorer traffar svart utgångslinje medans timer:0 inkrementeras until( (RSENSOR