totot3 Napisano Maj 26, 2016 Udostępnij Napisano Maj 26, 2016 Witam,Próbuję sterować ruchami silnika serwo przy wykorzystaniu czujnika przeszkód do sterowania drzwiami. Napisałem krótki program w tym celu: gdy czujnik nie wykrywa przeszkody serwo wykonuje ruch, natomiast jeżeli na czujniku pojawia się przeszkoda to serwo powinno się zatrzymać. Program działa poprawnie, ale niestety nie tak jak chciałbym 😋. Nie działa on gdy przeszkoda zostaje wykryta w trakcie ruchu - wtedy serwo powinno zatrzymać się w pewnym punkcie - jak najszybciej, ale w moim przypadku zatrzymuje się ono dopiero na końcu zakresu swojego ruchu. #include <Servo.h> Servo myservo; int PrzeszkodaPin = 8; int przeszkoda = HIGH; int pos = 0; void setup() { pinMode(2,OUTPUT); myservo.attach(3); pinMode(PrzeszkodaPin, INPUT_PULLUP); Serial.begin(9600); } void loop() { przeszkoda = digitalRead(PrzeszkodaPin); if (przeszkoda== LOW) { Serial.println("obecny"); } else { Serial.println("nieobecny"); myservo.write(0); delay(1000); myservo.write(90); delay(1000); } } Mógłbym liczyć na jakieś wskazówki z waszej strony? Chciałbym, aby nastąpiła reakcja serwa w czasie rzeczywistym i gdy przeszkoda znika z pola czujnika, to serwo ruszałoby dalej. Cytuj Link do komentarza Share on other sites More sharing options...
Gelten Maj 26, 2016 Udostępnij Maj 26, 2016 Bez zagłębiania się w bibliotekę "Servo.h": kiedy masz stan "nieobecny", dwa razy używasz "delay(1000);", czyli łącznie upływa czas 2s zanim ponownie zostanie sprawdzony czujnik i warunek. 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!