stander 0 Napisano Sierpień 5, 2019 Udostępnij Napisano Sierpień 5, 2019 Cześć! Mam taki problem: próbuje podłączyć duży przycisk tact switch(12x12mm) do Arduino i sprawdzić czy jest naciśnięty. Wykorzystuję do tego taki kod: void setup() { pinMode(2, INPUT_PULLUP); } void loop() { if(digitalRead(2) == LOW) { Serial.println("CLICKED!"); } } i tak podłączyłem układ Wydaję mi się, że wszystko jest dobrze. Jednak, gdy podłączam płytkę do komputera, monitor portu szeregowego sugeruje, że cały czas naciskam przycisk. Problem znika po zmianie przycisku na mały (tact switch 6x6mm). Cytuj Link to post Share on other sites
Treker 2531 Sierpień 5, 2019 Udostępnij Sierpień 5, 2019 @stander możliwe, że coś nie styka lub wyprowadzenia w dużym przycisku są inne. Obróć go dla testu o 90 stopni i sprawdź wtedy 1 Cytuj Link to post Share on other sites
stander 0 Sierpień 5, 2019 Założyciel tematu Udostępnij Sierpień 5, 2019 (edytowany) 4 minuty temu, Treker napisał: @stander możliwe, że coś nie styka lub wyprowadzenia w dużym przycisku są inne. Obróć go dla testu o 90 stopni i sprawdź wtedy Obróciłem i rzeczywiście działa. Dzięki! Edytowano Sierpień 5, 2019 przez stander Cytuj Link to post Share on other sites
hazi18 2 Październik 14, 2019 Udostępnij Październik 14, 2019 Witam serdecznie, mam mały problem z zaimplementowaniem przycisku. Otóż chciałbym aby program wykonywał się do momentu osiągnięcia jakiegoś celu, a potem się wyłączył, taki STOP. Program można ponownie uruchomić po naciśnięciu przycisku. Narazie program działa tak, że po osiągnięciu celu nie zatrzymuje się, a ja nie potrafię znaleźć odpowiedniej to tego funkcji. Podaje kod. int przekaznik=7; #include "DHT.h" #include <TM1637Display.h> #define DHTPIN 2 // what pin we're connected to #define DHTTYPE DHT22 // DHT 22 (AM2302) DHT dht(DHTPIN, DHTTYPE); const int przycisk = 3; // Definicja pinu do którego podłączony jest przycisk const int dioda = 8; // Definicja pinu do którego podłączona jest dioda void setup(void) { pinMode(dioda, OUTPUT); pinMode(przycisk, INPUT); pinMode(przekaznik,OUTPUT); // ustawienie pinu jako wyjście digitalWrite(przekaznik,LOW); // ustawienie na nim stanu niskiego Serial.begin(9600); //Begin serial communication dht.begin(); } void loop(void) { float h = dht.readHumidity(); float t = dht.readTemperature(); if (dht.readTemperature()>=26) // wywołanie funkcji warunkowej { digitalWrite(przekaznik,HIGH); // włączenie przekaźnika } if (dht.readTemperature()<=27) { digitalWrite(przekaznik,LOW); } Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.println(" *C"); delay(1000); } Cytuj Link to post Share on other sites
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Szukasz producenta PCB? Sprawdź firmę JLCPCB. Dlaczego warto? • Prototypy PCB 2-warstwowe za 2$ (gotowe w 24 godziny) • Prototypy PCB 4-warstwowe za 5$ • Montaż SMT od 7$ • Produkcja w profesjonalnej fabryce (zobacz film) Sprawdź też » Jak powstaje PCB? Wycieczka po fabryce
RFM 47 Październik 14, 2019 Udostępnij Październik 14, 2019 1 godzinę temu, hazi18 napisał: Otóż chciałbym aby program wykonywał się do momentu osiągnięcia jakiegoś celu Jakiego celu bo szklana kula mi się zepsuła i nie moge odgadnąć. 1 godzinę temu, hazi18 napisał: a potem się wyłączył, taki STOP Zrób wieczna pętlę. 1 godzinę temu, hazi18 napisał: Program można ponownie uruchomić po naciśnięciu przycisku W pętli badaj stan przycisku. Cytuj Link to post Share on other sites
BananWszyscy 6 Październik 15, 2019 Udostępnij Październik 15, 2019 (edytowany) Sposobów na takie coś możesz mieć kilka - jeśli chcesz czekać na ten przycisk i olewać cały świat to "pusta" pętla while do momentu wciśnięcia przycisku - wtedy będzie reagował właściwie tylko na przerwania. Bardziej elegancką metodą będzie maszyna stanów - wtedy też możesz "zastopować" program, ale nadal masz możliwość komunikacji/odczytu wejść/wyjść czy też używania adc, żeby mieć aktualne dane, ale czekać na jakieś zdarzenie. W 1 metodzie miałbyś tak: twój kod while (wcisniety przycisk){} -i w tej klamerce będzie latał w kółko do przycisku dalszy kod w 2 metodzie coś tak jakby: stan 1 - wykonywanie twojego kodu// tylko, kiedy stan jest stanem 1, po wykonaniu zmienię stan na stan 2 stan 2 - czekanie na przycisk// ale nie stoję w 1 linijce kodu, tylko wykonuję się dalej, po wciśnięciu dopiero zmienię stan na 3 stan 3 - dalej kod// ale dopiero, jak stan 2 zmieni się stan na 3 Edytowano Październik 15, 2019 przez BananWszyscy Cytuj Link to post Share on other sites
hazi18 2 Październik 15, 2019 Udostępnij Październik 15, 2019 hej, dzięki za odpowiedź, myślałem coś tez o funkcji goto ale nie wychodziło mi to tak jak bym chciał. 2 metoda to case z tego co się orientuję tak? czy w tym 3 case jak wcisnę przycisk i dzięki funkcji goto przeskoczę do 1 case? jest to możliwe w case? Cytuj Link to post Share on other sites
BananWszyscy 6 Październik 15, 2019 Udostępnij Październik 15, 2019 (edytowany) Ogólnie łatwo implementować maszynę stanów właśnie przez switch case - po prostu wewnątrz bloków sterujesz zmienną od switcha i tyle. W każdym momencie możesz tam ją zmieniać i przy kolejnym obiegu pętli wejdzie w określona przez ciebie część kodu a skoki takie to już w przypadkach, gdzie naprawdę opłaca się to zastosować, jak już wyjście z kodu będzie mocno problematyczne Edytowano Październik 15, 2019 przez BananWszyscy Cytuj Link to post Share on other sites
hazi18 2 Październik 15, 2019 Udostępnij Październik 15, 2019 (edytowany) @RFM podałem przykładowy kod który mam napisany pod inkubator a chcę napisać program do czujnika przepływu wody. Czyli program liczy przepływ wody, jednak jeśli ten przepływ będzie ciągły i wynosił 30l. wtedy przepływomierz ma zamknąć zawór. Wtedy właśnie program ma "przestać działać". Po usunięciu usterki przyciskiem uruchamiam program i przepływ wody jest od nowa. zbytnio nie umiem rozkminić jak mam mój kodzik przerobić na case? Chodzi o to, że z tego co widziałem case ma to do siebie, że trzeba mu dać bodziec w postaci przycisku (1, 2, 3) i wtedy dany blok się wykonuje. Ja chcę aby tutaj po osiągnięciu temp powyżej 26 stopni program ma wyłączyć przekaźnik ( najlepiej jakby jeszcze wyłączyć działanie programu aby po spadku poniżej 26 stopni znowu się nie włączył). if (dht.readTemperature()>=26) // wywołanie funkcji warunkowej { digitalWrite(przekaznik,HIGH); // włączenie przekaźnika } else { digitalWrite(przekaznik,LOW); } Edytowano Październik 16, 2019 przez hazi18 Cytuj Link to post Share on other sites
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!