///// Autor - Arkadiusz Kalecinski ///// //////////////////////////////////////// int wlaczone_dmuchanie, predkosc_dmuchania, predkosc_obrotow, kierunek_obrotow; void dzwiek () { PlaySound(SOUND_DOUBLE_BEEP); } /////////////////////////////////////////////// ////// funkcja odpowiedzialna za ////////////// ////// regulacje obrotow silnika C //////////// /////////////////////////////////////////////// void predkosc_silnika (int czas_pracy, int czas_spoczynku, int moc_silnika) { SetPower(OUT_C, moc_silnika); On(OUT_C); Wait(czas_pracy); Float(OUT_C); Wait(czas_spoczynku); } /////////////////////////////////////////////// ////// glowny watek /////////////////////////// /////////////////////////////////////////////// task main() { wlaczone_dmuchanie = 0; // przyjmuje wartosc 0 lub 1 i oznacza wlaczony/wylaczony predkosc_dmuchania = 0; // przyjmuje wartosc 0, 1 i 2 oznacza predkosc obrotow smigla predkosc_obrotow = 0; // przyjmuje wartosc 0, 1 i 2 oznacza predkosc ruchow wahadlowych wiezy, 0 oznacza wylaczony kierunek_obrotow = 0; // obroty w lewo 0, obroty w prawo 1 SetSensorType(SENSOR_1, SENSOR_TYPE_TOUCH); // wlacznik, gniazdo 1 SetSensorType(SENSOR_2, SENSOR_TYPE_TOUCH); // zmienia predkosc obrotow smigla, gniazdo 2 SetSensorType(SENSOR_3, SENSOR_TYPE_TOUCH); // zmienia predkosc ruchow wahadlowych wiezy, gniazdo 3 start obsluga_przycisu_start_stop; start obsluga_dmuchania; start obsluga_przycisu_predkosci_dmuchania; start obsluga_przycisu_predkosci_obrotow; start obsluga_obrotow; start zmiana_kierunku_obrotow; } /////////////////////////////////////////////// ///////// przycisk 1 ////////////////////////// //////// wlaczanie/wylaczanie////////////////// /////////////////////////////////////////////// task obsluga_przycisu_start_stop () { while (true) { if ((SENSOR_1==1) && (wlaczone_dmuchanie==0)) { wlaczone_dmuchanie=1; dzwiek (); Wait(50); // przytrzymanie klawisza start/stop wlaczaloby i wylaczalo natychmiast, czas potrzebny na odsuniecie palca od guzika } else if ((SENSOR_1==1) && (wlaczone_dmuchanie==1)) { wlaczone_dmuchanie=0; dzwiek (); Wait(50); // przytrzymanie klawisza start/stop wlaczaloby i wylaczalo natychmiast, czas potrzebny na odsuniecie palca od guzika } } } /////////////////////////////////////////////// ///////// przycisk 2 ////////////////////////// //////// predkosc wirowania smigla //////////// /////////////////////////////////////////////// task obsluga_przycisu_predkosci_dmuchania () { while (true) { if (wlaczone_dmuchanie==1) { if ((SENSOR_2==1) && (predkosc_dmuchania==0)) { predkosc_dmuchania=1; dzwiek (); Wait(50); } else if ((SENSOR_2==1) && (predkosc_dmuchania==1)) { predkosc_dmuchania=2; dzwiek (); Wait(50); } else if ((SENSOR_2==1) && (predkosc_dmuchania==2)) { predkosc_dmuchania=0; dzwiek (); Wait(50); } } } } /////////////////////////////////////////////// ///////// przycisk 3 ////////////////////////// //////// predkosc obrotow wiezy ////////////// /////////////////////////////////////////////// task obsluga_przycisu_predkosci_obrotow () { while (true) { if (wlaczone_dmuchanie==1) { if ((SENSOR_3==1) && (predkosc_obrotow==0)) { predkosc_obrotow=1; dzwiek (); Wait(50); } else if ((SENSOR_3==1) && (predkosc_obrotow==1)) { predkosc_obrotow=2; dzwiek (); Wait(50); } else if ((SENSOR_3==1) && (predkosc_obrotow==2)) { predkosc_obrotow=0; dzwiek (); Wait(50); } } } } /////////////////////////////////////////////// ///////// silnik A //////////////////////////// //////// wirowanie smigla ///////////////////// /////////////////////////////////////////////// task obsluga_dmuchania () { while (true) { if (wlaczone_dmuchanie==1) { if (predkosc_dmuchania==0) { SetPower(OUT_A, 1); OnFwd(OUT_A); } else if (predkosc_dmuchania==1) { SetPower(OUT_A, 4); OnFwd(OUT_A); } else if (predkosc_dmuchania==2) { SetPower(OUT_A, 7); OnFwd(OUT_A); } } else if (wlaczone_dmuchanie==0) { Float(OUT_A); } } } /////////////////////////////////////////////// ///////// silnik C //////////////////////////// //////// obroty wiezy //////////////////////// /////////////////////////////////////////////// task obsluga_obrotow () { while (true) { if (wlaczone_dmuchanie==1) { if (predkosc_obrotow==0) { Off(OUT_C); //pozwala natycmiast zatrzymac wieze w czasie obrotow } else if (predkosc_obrotow==1) { if (kierunek_obrotow==0) { OnFwd(OUT_C); predkosc_silnika(3, 4, 0); } else if (kierunek_obrotow==1) { OnRev(OUT_C); predkosc_silnika(3, 4, 0); } } else if (predkosc_obrotow==2) { if (kierunek_obrotow==0) { OnFwd(OUT_C); predkosc_silnika(2, 5, 1); } else if (kierunek_obrotow==1) { OnRev(OUT_C); predkosc_silnika(2, 5, 1); } } } else if (wlaczone_dmuchanie==0) { Off(OUT_C); } } } /////////////////////////////////////////////// /// cykliczna zmiana kierunku obrotow wiezy//// /////////////////////////////////////////////// task zmiana_kierunku_obrotow () { while (true) { if ((kierunek_obrotow == 0) && (predkosc_obrotow == 1)) { Wait(550); kierunek_obrotow=1; } else if ((kierunek_obrotow == 1) && (predkosc_obrotow == 1)) { Wait(550); kierunek_obrotow=0; } else if ((kierunek_obrotow == 0) && (predkosc_obrotow == 2)) { Wait(180); kierunek_obrotow=1; } else if ((kierunek_obrotow == 1) && (predkosc_obrotow == 2)) { Wait(180); kierunek_obrotow=0; } } }