ximot Napisano Styczeń 24, 2021 Udostępnij Napisano Styczeń 24, 2021 (edytowany) Cześć, próbuję zbudować swojego pierwszego robota. Jest to robot z kursu budowy robotów wyposażony dodatkowo w czujnik parkowania, który się obraca. Założenie jest takie, że robot jest sterowany poprzez pilot od TV i w momencie wciśnięcia przycisku "8" na pilocie (jazda do tyłu) powinno zacząć obracać się serwo w celu skanowania otoczenia. Ta część projektu wykonuje się poprawnie. Natomiast na tym serwomechnizmie umieściłem czujnik odległości HC-SR04, który w miarę zbliżania się do przeszkody ma uruchamiać Buzzer. Tutaj pojawiają się schody, ponieważ zauważyłem, że kiedy korzystam z biblioteki do obsługi pilota (RC5) i jednocześnie wywołuję funkcję do obsługi czujnika odległości zaczerpniętą z kursu "Kurs Arduino – #9 – Czujnik odległości HC-SR04, funkcje" program przestaje reagować na wciskane przyciski z pilota. Głowię się nad tym i próbuję to jakoś obejść już od kilku dobrych wieczorów.... Czy zmagał się już ktoś z podobnym problemem? Proszę o pomoc. Edytowano Styczeń 24, 2021 przez ximot Cytuj Link do komentarza Share on other sites More sharing options...
ximot Styczeń 24, 2021 Autor tematu Udostępnij Styczeń 24, 2021 // funkcja do obsługi czujnika odległości zwracająca odległość do przeszkody int DistanceSensor () { digitalWrite (TRIG, LOW); // zmiana stanu sygnału z wysokiego na niski na wyjściu TRIG powoduje wyzowlenie pomiaru delayMicroseconds (5); digitalWrite (TRIG, HIGH); delayMicroseconds (15); digitalWrite (TRIG, LOW); measured_time = pulseIn(ECHO, HIGH); // dokonanie pomiaru czasu na wyjściu ECHO measured_distance = measured_time / 58 ; // zmierzony czas podzielony przez 58 daje odległość w centymetrach (wynika z prędkości dźwięku) return measured_distance; } // funkcja do wyzwolenia alarmu w zależności od odległości od przeszkody void Buzzer() { if (DistanceSensor() < 15) { digitalWrite (BZR, HIGH); } if ((DistanceSensor() > 15) && (DistanceSensor() < 35)) { digitalWrite (BZR, HIGH); delay (200); digitalWrite (BZR, LOW); } if (DistanceSensor() > 35) { digitalWrite (BZR, LOW); } } void ScanningSurrounding () { if (command_for_device == 8) { ServoMechanism.write(10); ServoMechanism.write(80); } } void Pilot () { // dokonuje odcztu z pilota po wciśnięciu przycisku RC5.read(&toggle, &adress_device, &command_for_device); { switch (command_for_device) { // jazda do prozdu po wciśnięciu przycisku "2" case 2: LeftMotor (80); RightMotor (80); break; // jazda do tyłu po wciśnięciu przycisku "8" case 8: LeftMotor (-80); RightMotor (-80); break; // jazda w prawo po wciśnięciu przycisku "6" case 6: LeftMotor (80); RightMotor (-80); break; // jazda w lewo po wciśnięciu przycisku "4" case 4: LeftMotor (-80); RightMotor (80); break; // zatrzymanie silników po wciśnięciu przycisku "5" case 5: StopLeftMotor(); StopRightMotor(); break; } } } void loop() { Pilot (); ScanningSurrounding (); Buzzer (); } Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!