WojtekMazur Napisano Luty 23, 2020 Udostępnij Napisano Luty 23, 2020 Witaj. Jestem totalnie zielony w programowanie, nie wiem jak zakończyć wykonywanie pętli. Fragment kodu poniżej sprawdza czy przycisk jest wciśnięty, jeżeli tak to wykonuje funkcję "SMS". Chciałbym aby po ustawieniu stanu wysokiego funkcja wykonała się tylko jeden raz i później program ma czekać aż położenie przycisku znowu będzie na LOW (jest to przycisk bistabilny). Pomocy:) if (buttonState == HIGH) { SMS(); } Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Luty 24, 2020 Udostępnij Luty 24, 2020 Teoretycznie pętla jest po prostu nie w tym miejscu co trzeba. Działałoby coś takiego: if (buttonState == HIGH) { SMS(); while (buttonState == HIGH);{ buttonState = digitalRead(pin); } } ale tak się po prostu nie robi. Powinieneś zareagować nie na stan przycisku, ale na jego zmianę z niskiego na wysoki. Czyli coś w stylu: static int oldButtonState = LOW; if (buttonState == HIGH && oldButtonState == LOW) { SMS(); } oldButtonState = buttonState; Jak widzisz - nie ma tu żadnych pętli. W praktyce możesz użyć biblioteki Bounce2, która załatwi za Ciebie również potencjalne drgania styków wyłącznika, a kod będzie sprowadzał się do: button.update(); if (button.rose()) SMS(); 1 Cytuj Link do komentarza Share on other sites More sharing options...
WojtekMazur Luty 24, 2020 Autor tematu Udostępnij Luty 24, 2020 Pięknie dziękuję za odpowiedź. static int oldButtonState = LOW; if (buttonState == HIGH && oldButtonState == LOW) { SMS(); } oldButtonState = buttonState; Ten kod działa dokładnie tak jak chciałem, tylko faktycznie przy wyłączaniu następują czasami drgania styków i funkcja wykonuje się jeszcze raz. Próbowałem zaimplementować ten fragment kodu wykorzystujący bibliotekę Bounce2, ale przy kompilacji pojawia się komunikat że "button" nie jest zadeklarowany. Powinienem utworzyć jeszcze jakąś zmienną button, czy to już jest zapisane gdzieś w tej bibliotece?:) void loop(){ button.update(); if (button.rose()) SMS(); } Na samej górze jest oczywiście zadeklarowana biblioteka: #include <Bounce2.h> Cytuj Link do komentarza Share on other sites More sharing options...
Belferek Luty 24, 2020 Udostępnij Luty 24, 2020 Jeśli zainstalowałeś bibliotekę to w PLIK-PRZYKLADY znajdziesz przykłady jej użycia. Samo dołączenie pliku nagłówkowego #include Bounce2.h nie wystarczy. W swoim programie musisz utworzyć obiekt klasy Bounce np.: // Instantiate a Bounce object Bounce button = Bounce(); Teraz dopiero będziesz miał dostęp do metod tej klasy np. button.rose() Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
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!