[syntax=vbnet] Zmienna = Ileśtam Gosub Sub_przycisku Do .. Debounce Przycisk, 0, Sub_przycisku, Sub Loop End Sub_przycisku: Select Case Zmienna Case Ileśtam : Zrób to End Select Return[/syntax]
Wiatm mam mały problem. Może krótko. Chcę napisać program na at90s2313 który wyświetli mi jakis napis na lcd przy naciśniętym przycisku (pind.0 = 0) i wyświetli inny napis na lcd kiedy puszczę ten sam przycisk (pin.0 = 1) oczywiscie chcialbym wyelimionować drgania może za pomocą funkcji DEBOUNCE... ponieważ później w układzie chcę zastosować przekaźniki....
Proponuje to co zawsze. Pokaż nam listing a powiemy Ci co w nim nie gra (przynajmniej się postaramy). Co do LCD to możesz go dość często czyścić (sam zrobiłem to przez błąd w programie 10 razy na sek. fakt że się nie wyrabiał to już inna bajka). Na pewno nie ma to wpływu na wieszanie procka, tylko będziesz widział migaący chaotycznie wyświetlacz ewentualnie...
Poczytaj sobie w helpie o "debounce".
Jak napisać menu (np. 4 poziomy x 4 funkcje) Np: możesz zrobić tak że 4x4 to jest 16 stanów (lub w zależności jak to prezentujesz więcej). Więc piszesz funkcje która jest wywoływana gdy wciśnie się to MENU, a w funkcji pętle gdzie masz 16 warunków oraz jedna zmienna która wskazuje który stan jest obsługiwany. Zamiast warunków można użyć switch ale...
Jak zacząć pisanie programu obsługującego przyciski, wyjaśnia przykład "Button" albo "Debounce" w środowisku Arduino IDE.
Możesz spróbować takiej protezy: [syntax=basic4gl]If Przycisk1 = aktywny AND Przycisk2 = aktywny Then Else Debounce ... Debounce ... End If[/syntax] Przed wejściem do Debounce sprawdzi przyciski i jeśli będą oba wciśnięte pominie Debounce.
przykład : Config Debounce = 30 Config Portd.1 = Output 'tx do vfd Config Portd.6 = Input 'enkoder Config Portd.7 = Input Set Portd.6 Set Portd.7 Config Portd.0 = Input 'przyciski po koleji : -v , +v , +/-a , wyświetlacz Config Portd.2 = Input Config Portd.3 = Input Config Portd.4 = Input Set Portd.0 Set Portd.2 Set Portd.3 Set Portd.4
W bascomie jest specjalna instrukcje do obsługi przycisku DEBOUNCE Proponuje z niej skorzystać
Ja nie używam debounce. Zazwyczaj stosuje konstrukcję: If PINX.x = 0 then waitms 20 if PINX.x = 0 then 'obsługa przycisku end if end if Zajmuje mniej.
Mówisz masz na timerze. $regfile = "m16def.dat" $crystal = 1000000 $hwstack = 32 $swstack = 8 $framesize = 16 Config Timer1 = Timer , Prescale = 1024 Enable Interrupts Enable Timer1 Start Timer1 On Timer1 Odmierz_czas Const T = 6942 Config Portb.1 = Output : Portb.1 = 1 : Led Alias Portb.1 Config Portb.2 = Input : Portb.2 = 1 :...
Przyciski - DEBOUNCE Odliczanie - CONFIG TIMER i przerwania.
Witam. Wypróbuj to: [syntax=basic4gl]Ddrb = &B11111111 : Portb = &B00000000 Ddrd = &B1100000 : Portd = &B0011000 Dim Pomoc As Byte 'zmienna zliczająca wciśnięcia przycisku Do Debounce Pind.4 , 0 , Wlacz , Sub Debounce Pind.3 , 0 , Wylacz , Sub If Pomoc = 1 Then Portb.0 = 1 'w zależności od stanu zmiennej pomoc If Pomoc = 2 Then Portb.1...
Takie wykrywanie najczęściej się robi robiąc przy okazji debouncing inaczej. To znaczy co jakiś określony czas robisz polling portu (co np 50ms) co załatwia debouncing i umożliwia jednoczesne wykrycie wszystkich przycisków na portach IO.
Może problem jest w wibracji przycisku, spróbuj komendy Debounce.
If...Then to nie pętla... tylko warunek. Jeśli chodzi o przyciski to proponuje debounce który na pewno wyeliminuje drgania styków. Poczytaj tabelkę i zrób sobie podprogramy w których będziesz zwiększał głośność itd. Przykład: Debounce PINB.0 , 0, VOLUP, SUB .... .... .... VOLUP: I2CSEND ..... 'jakieś tam bity Return Dodano po 8 ... Powtórzone usunąłem....
Nie ma to jak odpowiadac samemu sobie ;) Ale być może ktoś z tego skorzysta, więc podam przykałd: config portd = &B00000000 'wszystkie piny jako wejście na porcie D portd = &B11111111 'wymuszamy stan wysoki na wszytskich wejściach (podciagamy - port ma wudowane rezystory podciagajace) config debounce = 30 'zwiększamy opóźnienie eliminacji drgań styków...
W celu eliminacji drgań styków należy użyć przerwania licznika, by odczytywać stan przycisku tylko raz na około 10 ms . Nie używamy funkcji Debounce i delay_ms ! Czy przycisk został naciśnięty sprawdzamy w zmiennej globalnej dostępnej w programie głównym.
Taki kod od biedy napiszesz nawet z użyciem chatGPT. W skrócie: - PWM generujesz przy użyciu timera, wyjście z timera podajesz na driver LEDów (tą część kodu wygenerujesz np. na stronie Microchipa, na której jest klikalny generator kodu). - reakcja na przycisk - poszukaj na elektrodzie np. super debounce, ale to też dobrze generuje chatGPT. Kolejne...
No to ja spróbuję przerobić Twoją opcję- przewaga jest taka że można mieć prawie dowolną ilość serw. A wada- dwa timery. No i te przyciski- debounce da się zrobić- ale ile razy masz wcisnąć przycisk żeby 5 serw wykonało 5x22 położenia? Albo część chociaż z ADC trzeba zrobić albo po jednorazowym wciśnięciu- otwórz chwytak a po drugim- zamknij. Da się...
seja4321 Napisałem kilka linii kodu ,jest to jedno z możliwych rozwiązań twojego problemu z przyciskiem . program przetestowałem. Moja rada to testuj program na kilku kilkunastu sekundach. powodzenia. Dodano po 46 Nie rozumiem dlaczego seja4321 został skarcony przez LordBlick, przecież pisze w dziale początkujący? Co do kodu, to jest dziwny, Piszesz...
No właśnie jest to prawie ten sam kod co z książki. Else jednego z Ifów jest w niewłaściwym miejscu i wystąpi ten błąd o którym wspomniałem. A tak z ciekawości: dlaczego nie zastosujesz klasycznego Debounce?
Gdybyś dokładnie spojrzał na przykłady dołaczone do biblioteki Bounce2 wiedział byś czego zapomniałeś ;) [syntax=c]#include <Bounce2.h> #define BUTTON_PIN 2 Bounce debouncer = Bounce(); byte digitBuffer[4]; int zmienna = 0; void setup() { pinMode(BUTTON_PIN, INPUT_PULLUP); debouncer.attach(BUTTON_PIN); debouncer.interval(100); // interwał w ms...
...czlowiek wciska przycisk i wykonuje sie intrukcja. Jednak mam pewne obawy. Jesli przycisk bedzie wcisniety zbyt dlugo, to intrukcja wykona sie iles tam razy. Jak to zlikwidowac? Użyj - stworzonej do tego - instrukcji Debounce . Piotrek
Spróbuj tak: do Debounce Pind.0 , 0 , algorytmy ' Twój s1=pind.0 loop algorytmy: toggle A ' zmienna A jako bit If A=0 then Algorytm 1 sterowania wyników na LCD else Algorytm 2 sterowania wyników na LCD end if return Użycie debounce eliminuje drgania styków. Pozdrawiam.
Kolego do przycisku użyj funkcji debounce i nie będziesz miał problemu z drganiem styków przycisku. Może napisz jak ma działać to urządzenie bo według mnie masz dziwny ten kod
Aby wykonać taki generator na Atmedze możesz posłużyć się sprzętowym PWM'em. Prawdopodobnie obsługa przycisków nie działa Ci prawidłowo ponieważ na linii występują zakłócenia, a także drgania styków. Nie wiem jak wygląda schemat, ale dobrą praktyką jest podciągniecie linii do plusa wewnętrznie lub zewnętrznie w przypadku, gdy oczekujesz stanu niskiego....
Witam kolegów! Kolego Chrobek .Zmieniłbym pomiar prądu na silniku.Powinieneś zastosować wzmacniacz operacyjny w typowym układzie pomiaru prądu +12V przed silnikiem(rezystor szeregowy).Diody LED z rezystorem ok.1k umieściłbym równolegle z cewkami przekażników -pokazuje stan właczenia PK jak i również stan tranzystora(czy jest dobry). Żadne układy gasikowe...
Kodzik jest przykładowy. Musisz myśleć :P Zwiększ te Waitms 10 pod Loop Until bo nawet mrugniecie oka trwa dłużej... Zwykłe "debounce" najczęściej ustawia się na 25ms a Ty masz 10...
Po nazwach zmiennych strzelam, że jest to maszyna stanów do debounce przycisku.
Zobacz to: Dim Przycisk As Word , Czas As Integer , Czas_zamka As Integer Czas_zamka = 0 Czas = 0 Do Debounce Pinb.1 , 0 , Licz , Sub If Przycisk > 0 Then Incr Czas If Czas = 300 Then Przycisk = 0 Czas = 0 End If If Przycisk = 3 Then Portb.2 = 1 If Portb.2 = 1 Then Incr Czas_zamka If Czas_zamka = 300 Then Portb.2 = 0 Czas_zamka = 0 End If Waitms...
Hallotron :) Jeżeli chodzi o drgania styków to tak samo występują jak przy przycisku. Programowy debounce albo filtr RC wystarczą Hallotron potrzebuje prądu do działania.
Przechowuj typ wyświetlanych danych w zmiennej. Wartość zmiennej zmieniaj po naciśnięciu przycisku (pamiętaj o debounce). Ekran odśwież po zmianie zmiennej. Rodzaj danych wyświetlaj warunkowo zależnie od wartości zmiennej typu wyświetlanych danych. Gotowe.
Ad.1. W linku, który wskazałem odczytujesz stan pinu: [syntax=c] val = digitalRead(inPin);[/syntax] przypisując zmiennej val stan pinu. Stan pinu może być HIGH lub LOW wiec sprawdzasz zmienną na przykład tak: [syntax=c]if (val == LOW) { // gdy przycisk wciśnięty }else{ //gdy przycisk nie jest wciśnięty. }[/syntax] Kod dla przycisku zwierającego do GND...
Hmm... w końcu używasz WAITKEY, więc zmienna Czekanie nie ma sensu. Dodatkowo: Czekanie = Ischarwaiting() wykonujesz przed obsługą przycisku i jakąś procedurą MAIN. Teraz jeśli w trakcie obsługi przycisku i wykonywania procedury MAIN wyślesz dane to nie zostaną one zapisane w EEPROMie Ja jednak przerobiłbym program i użyłbym INKEY. Sama obsługa...
Witam. Proszę o pomoc w zmianie sterowania z tych paru przycisków na jeden. Dokładnie chodzi o to, żeby można było zmieniać podprogramy jednym przyciskiem i żeby nie trzeba było czekać na zakończenie podprogramu lub resetować. Z góry dziękuje. [syntax=basic4gl] $regfile = "m644pdef.dat" $crystal = 16000000 Config Lcd = 16 * 2 'wyświetlacz 16*2 Config...
troche przesadzona... po co ta zmienna STAN, skoro w zasadzie nic z nia nie robisz? jak zwykle pochwale sie swoim podejsciem do sprawy, ktore uwazam za dosyc minimalistyczne: int debounce(void) { int stan; stan=PORT&MASKA_WSZYSTKICH_PRZYCISKO... delay(); if(stan!=PORT&MASKA_WSZYSTKICH_P... stan=0; return stan;...
Do obsługi przycisków w Bascomie służy "DEBOUNCE"
Złe nawyki z programowania w PLC? Spokojnie wszystko da się zrobić. Sprawdź komendę debounce - służy ona do eliminowania drgań styków ale jej druga zaletą jest w skoczenie do zdefiniowanej pętli tylko raz i można określć czy narastające czy opadające. Minus jest taki że trzeba cyklicznie wywoływać te komendy aby zadziałało - podobnie jak w PLC. Napisz...
Ale mi nie przeszkadza działanie w oparciu o każde zakłócenie w eterze bo na tej samej zasadzie co robi się debounce przycisku tak można byłoby podejść do "debounce'owania" sygnału radiowego. Przykładowo oglądając filmy pana Sakowicza - https://www.youtube.com/watch?v=m_Znp9D-... - ewidentnie widać, że nie stosuje on nic ponad microswitch lub NE555...
No to się doucz i będziesz znał. "Super" porada, ale przerwania nie sa tu konieczne. Naucz się też używać tagów. faktycznie, użyj znaczników(tagów) SYNTAX, bo czytać sie kodu nie chce. - wywal delay - wykrywaj zmianę stanu pinu a nie reakcję na określony stan, dla Arduino jest stosowna biblioteka (Debounce) ale można zrobić i bez niej, trzeba też zlikwidować...
marco47 - przepraszam, nie zauważyłem. marek19951 - proste if-then nie załatwi problemu. Jeżeli masz zapał, a widzę , że masz, zacznij od procedury obsługi klawiatury , która nie powoduje opóźnień poprzez martwe pętle ( czyli m.in wait, debounce, bitwait itp). Ja to zrobiłem na przerwaniu programowym z timer1, które odliczało mi okresy 10 ms w połączeniu...
Zlituje się nad tobą wcześniej niż pod wieczór bo ten temat na kilka stron się rozciągnie: [syntax=basic4gl] Do If Porta.0 = 0 Then Dataport = &B10000000 Else Dataport = &B11110011 End If Reset Led1 Waitms 15 Set Led1 If Porta.1 = 0 Then Dataport = &B10000000 Else Dataport = &B11110011 End If Reset Led2 Waitms 15 Set Led2 Loop [/syntax] Mimo wszystko...
K.G. pozostawie twoj kod bez komenta. Co do mojego kodu jak sa to zwykle przyciski, powinienes jeszcze dac delaye lub uzyc debounce
znaczy na wejściu bramki jest za duży prąd upływu To nie jest prąd upływu ale prąd wejściowy w stanie niskim, jest dość duży w klasycznych bramkach TTL i wynika z ich fizycznej budowy (obwodu wejściowego). U Ciebie ten prąd wejściowy płynie do masy przez R6 + R9 = 101 kΩ i wywołuje zbyt duży spadek napięcia, zmierz napięcie na wejściu tej bramki...
Podaje program z komentarzem. ............ Ps. Nie ładowałem do licznika wartości bo potrzebuje dwóch pełnych przeładowań. W programie jest zupenie nie ważne ile tych przepełnień wystpuje; istotne aby rachunek odmierzanych odcinków czasu był zgodny z zamierzonym. Skoro jesteś zmuszony zliczać przepełnienia (co jest rzeczą absolutnie normalną), więc...
Próbuję właśnie na timerze i fladze, ale nie działa tak jak chciałem. Powinno być tak, że po naciśnięciu dowolngo przycisku rusza timer i ustawia flagę B na 1. Jeżeli w czasie odliczania nacisnę drugi przycisk, to następuje start. I tak jest. Problem w tym, że gdy trzymam wciśnięty jeden przycisk i poczekam na skończenie odliczania ( B ustawia się na...
Zobacz to: $regfile = "attiny2313.dat" 'najpierw określamy typ proca $crystal = 1000000 'definiujemy z jakim taktowaniem będzie pracował config portb=input 'port b jako wejścia portb=&B11111111 'wszędzie stan spoczynkowy-1 config portd=output 'pprt d jako wyjścia portd=&B0000000 'wszędzie stan spoczynkowy-0 Do 'pętla nieskończona Debounce...
W zamieszczonym kodzie nie ma tej linijki, ale próbowałem już funkcją Debounce, Bitwait, jak i w systemie 1/0. Przy tej ostatniej przytrzymanie przycisku powodowało ciągłe resetowanie czasu a przy debounce, działało tylko przy przytrzymanym włączniku.
If Pinb.2 = 0 Then Waitms 25 If Pinb.2 = 0 Then ... Zapoznaj się z Debounce !!! Do .... Debounce Pinb.0 , 0 , Dodaj , Sub Debounce Pinb.1 , 0 , Odejmij , Sub Loop Dodaj: Incr Zmienna 'lub zmienna = zmienna + {jakaś wartość} If Zmienna > {wartość końcowa} then Zmienna = {wartość początkowa albo wartość końcowa} Lcd...
Pewnie, jak to w życiu, coś trzeba będzie poprawić, ale możesz spróbować tak. Niektóre zmienne tam nie zostały użyte bo koncepcja się zmieniła podczas pisania ;) Przesunąłem przycisk i dodałem tez pin obsługujący wymuszenie trybu AT [syntax=vbnet]$regfile = "attiny45.dat" $crystal = 8000000 $hwstack = 32 $swstack = 32 $framesize = 64 Config Portb.2...
Dziękuję, program źle działa, nie reaguje na SW, włącza na stałe LEDa. Przepraszam za niedogodność i dziękuję za cierpliwość. Zajmijmy się problemem i poprawmy kod, aby działał zgodnie z oczekiwaniami: LED powinien pozostać wyłączony po włączeniu zasilania, a także powinien wyłączać się na każde parzyste naciśnięcie przycisku. Najwyraźniej poprzednia...
Dwie ważne rzeczy! Pierwsza to pamiętanie o napięciach. Jeśli teraz mierzysz na pinach 12V i podepniesz to na wejście cyfrowe Arduino (5V), to je spalisz. Druga rzecz to konieczność stosowania mechanizmu debounce w kodzie do sprawdzania stanu przycisków :)
[url=http://www.arduino.cc/en/Tutorial/D... masz gotowy przykład wykorzystania funkcji Debounce.[/code]
A Twój program nie chce działać? Jaki jest problem. To co w programie masz nieprawidłowo to odczyt stanu przycisku. Procedura odczytu przycisku powinna przewidywać takie sytuacje jak drgania styków lub przypadkowe zakłócenia na linii przycisku. Jedną z możliwość odczytu przycisku jest: [syntax=basic4gl]If Wejscie = 0 Then Waitms 100 If Wejscie = 0 Then...
To https://www.arduino.cc/en/Tutorial/Debou... poczytaj.
Jak to zrealizowac w kodzie? dokladnie tak jak napisal mietekn - porownujesz stan portu ze stanem z poprzedniego porownania - jesli sie zmienil (XOR) - to cos sie stalo - przycisk zostal puszczony/nacisniety. inne operacje logiczne pozwola wykryc tylko wcisniecie, albo tylko puszczenie przycisku. przykladowy kod, tym razem na ARMa, pracujacy nie w...
Wszystko zależy jak rozwiązano w danym przypadku sposób liczenia interwałów taktowania zegara, ale typowo w elektronicznych układach odmierzających czas są montowane te typowe kwarce 32768 kHz w cylindrycznej oprawce. Owe kwarce znajdziesz w zegarkach czy to wskazówkowych kwarcowych z budzikiem czy też w płytach głównych PC :) Jeżeli przycisk masz na...
Dodaj zmienną pomocniczą np. Dim Ktory_temp as bit Zmienna ta może przyjmować tylko stany 0 i 1. Dodaj se procedurę która w momencie naciśniecia przycisku będzie zmieniać wyświetlany czujnik. np. Do Debounce W1 , 0 , Przycisk , Sub Tutaj procedura odczytu DSów If Ktory_temp = 1 Then Pokaż T1 Else Pokaz T2 End if Przycisk: Toggle Ktory_temp Return...
Nic z tego nie rozumiem więc powiem, że Debounce Pind.0 , 0 , procedura1 , Sub uaktywni się gdy przycisk przełączy końcówkę ze stanu wysokiego w niski i pozostanie w stanie niskim odpowiedni czas. Debounce Pind.0 , 1 , procedura1 , Sub odwrotnie Teraz zastosuj to do swoich przycisków. Jeśli po nacisnięciu przycisku wystąpi 0 zastosuj pierwszą Debounce,...
Podam w takim razie jeszcze moje rozwiązanie pozbawione błędu "repeat" przy długim wciśnięciu i posiadający bardzo skuteczny filtr antydrganiowy. Z oczywistych względów program jest w C, ale jeśli w arduino można bezpośrednio pisać do rejestrów to to nie będzie problemów z jego adaptacją :) [syntax=c] int lk, licznik; int main(void) { DDRB=0b00000000;//port...
...Dałem polecenie debounce i powinno zwiększyć zmienną o 1 i poczekać do puszczenia przycisku, ale nawet szybkie naciśnięcie zwiększa zmienną o kilkadziesiąt jednostek. Może chodzi o przerwania? Może to być "sprawka" przerywań, proponuję na początek: [syntax=basic4gl]Klik: Disable interrupts Incr Bsend If Bsend = 100 Then Bsend = 0 Enable Interrupts...
Wcześniej wspomniałem o AT89C4051 ponieważ używam go do odczytu napięć z 28 przycisków (każdy innej wartości) i DEBOUNCE tutaj nie ma zastosowania. Wszystko byłoby super, gdyby nie było konieczności stałego odczytu pozostałych wartości przycisków, a wtym przypadku procek zostaje zajety wyłącznie sprawdzaniem stanu styku. Pokombinuje wsadzić tą procedurkę...
Drgania eliminuje poprzez waitms 100 tak mi się wydaje. To kompletnie źle ci się wydaje :) Od drgań jest debounce
Strasznie kombinujesz. Zobacz przykład z blinkWithoutDelay, wywal led, wrzuć tu zmienna do odmierzania czasu, jeśli jest większa od zera to ją zmniejszaj, odliczanie gotowe. Dalej w kodzie gdy PIR wykryje ruch ustawiaj zmienną na czas działania, zawsze dopóki PIR będzie wykrywał ruch ma ustawiać tą zmienną na czas startowy - resetuje ją. Potem zajmij...
Powyższy program i tak nie będzie działał dobrze z uwagi na drgania styków. Ify w pętli Do: Loop zamień zatem na Debounce. Na pewno będzie... W tym akurat przykładzie procedura 'debounce' jest zbędna, bo wynikiem/odpowiedzią warunku "If" jest ściśle określony stan portu wyjściowego bez żadnych dodatkowych uwarunkowań (np. 'else'...) Nie jest ważne...
Odpowiedzią na twoje kłopoty jest instrukcja DEBOUNCE, gdyż: 1. Potrafi wywoływać podprogramy przy dowolnym stanie linii portu, 2. Przycisk raz naciśnięty i puszczony wywołuje podprogram tylko jednorazowo, 3. Filtruje drgania styków przycisków które potrafią narobić niełego bigosu początkującym, 4. Jest elegancka, pewna i uszyta "na miarę". PS. Atmega...
Poprawka (też pisałem z głowy :) ): Debounce Przycisk,0,Obsluga_przycisku,SUB 'przycisk zwierany do masy Loop '******** OBSLUGA PRZYCISKU Obsluga_przycisku: If Wlaczony_przekaznik=0 Then Przekaznik=1 Wlaczony_przekaznik=1 Else Przekaznik=0 Wlaczony_przekaznik=0 Endif Return
Trochę słabo u mnie z niemieckim :D Po prostu chciałbym aby przycisnięcie przycisku powodowało zmianę jakiegoś stanu nazwijmy go STANPRZYCISKU I do warunku chciałbym dopisac if STANPRZYCISKU = 1 to warunek jest spełniony i jest on sprawdzany ciągle. Próbowałem już na wiele sposobów i nic z tego nie wychodziło. Po co ci tu znac niemiecki? Przestudiuj...
wykluczyc drgania mozesz za pomoca funkcji debounce, albo tak: if s1=0 then 'przycisk jest wcisniety waitms 45 ' czekaj az mina drgania if s1=0 then ' gdy przycisk jest nadal wcisniety to zrob: end if end if Pokaz (najlepiej na schemacie) lub wyltumacz jak masz podlaczony przycisk do procesora. Poza tym wytlumacz mi, co dokladnie ma robic twoj kod...
A może DEBOUNCE?
Tylko że koledze chodzi o coś zupełnie innego. a sądzisz , że taki problem można rozwiązać tylko za pomocą przerwania? Nie, ale informuję że problemem jest co innego. On na pewno wie jak zrobić zmianę stanu pinu przy naciśnięciu przycisku. Po prostu nie wie jak zrobić "wielowątkowość". Debounce akurat jest najgorszym rozwiązaniem bo wstrzymuje działanie...
Ja też uczyłem się BASCOMa sam :) Więc witaj w Klubie. Generalnie nie odróżniasz programu głównego od podprogramów. To są zupełnie inne fragmenty całego programu. Program główny jest na ogół zapętlonym (żeby się w pewnym momencie nieskończył) zbiorem komend oraz skoków do procedur i funkcji oraz podprogramów. Generalnie interpreter zawsze musi wrócić...
https://hackaday.com/2015/12/09/embed-wi...
zmieniłem w ten sposób, ale nadal zerowa reakcja. Mam dziwne wrażenie że jeśli jest debounce to nic się nie dzieje. Jeśli jest If S1 = 0 to wtedy dział. co jest grane Do 'nieskończona pętla Do...Loop Debounce S1 , 0 , Pr1 , Sub 'jeśli naciśniety przycisk S1, 'to skok do podprogramu Pr1 Debounce S2 , 0 , Pr2 , Sub 'jeśli naciśnięty przycisk S2, 'to skok...
Znaczy się chciałem dać Load Timer1 = 58594, wtedy chyba działałoby to przepełnienie o którym mówię? Działałoby, gdybyś zastosował właściwą składnię, tzn. "LoadTimer , 58594" Do przycisków daje Debounce, więc myślę, że starczy Jak najbardziej wystarczy. Ciągłe sprawdzanie w przerwaniu jest po to aby mikrokontroler "miał czas" aby sprawdzić inne rzeczy...
Spróbuj ten kod /* Ver. 1.02 - 2020-03-29 Kod emulujący kierownicę Thrustmaster TMX Pro, umożliwiający podłączenie Arduino do bazy TMX Pro i emulację naciśnięć przycisków. */ #include <Arduino.h> byte wheelState[8]; // Stan przycisków volatile byte next_byte; volatile byte next_byte_idx; // Zmienne do debouncingu byte lastState[2] = {0xFF, 0xFF};...
Ten przykład działa, ale tylko dla jednego "przełącznika" ale gdy robie np dwa kolejne to już coś jest źle. Buduje urządzonko, które będzie załączać 3 przekaźniki: - 3 przyciski (portd.4, portd.5, portd.6) - 3 przekaźniki (portd.1, portd.2, portd.3) Jak to można zrobić w BASCOMie?? Kod dla w/w konfiguracji: Config Debounce = 30 Config Portd = Output...
Masz tu jakieś wyzwanie by nie używać bibliotek? Jak nie to zamiast robić debounce przycisków z delay użyj jakiejś: bounce2, onebutton, easybutton, itp. Gdybym miał zaświecić ledy w sekwencji 1000/500 to zrobiłbym wywołanie funkcji co 100ms, zliczał do lokalnej zmiennej static, które to wywołanie i dalej w switch case wybierał, że w 1 ma zaświecić,...
...I dalej mam takie pytanie czy da się to zrobić prościej Bascom posiada funkcję skoków do podprogramu w/g indeksu. Portc.4 = 1 'podciagam port - przycisk Dim A As Byte , B As Byte Declare Sub Temp Declare Sub Temp2 Declare Sub Nap Declare Sub Przyc Const Maxa = 2 'maksymalna ilosc podprogramow A = 0 : B = 1 Cls Do 'petla glowna Debounce Pinc.4...
Hmmm, szczerze mówiąc nie bardzo mi się chce analizować program bo troszkę go zamieszałeś i właściwie to już nie bardzo wiem jakie zrobiłeś założenia działania tego progsa. W każdym razie widzę tu badanie krótki/długi przycisk i pomieszanie bezpośredniego czytania pinu z Debounce... jak dla mnie trochę to demotywujące. Rzuć jeszcze raz okiem na moje...
Witam Aby sterować silnikiem krokowym 4-fazowym musisz załączać kolejno jego cewki. Dla trybu krokowego musisz wysyłać sekwencje: 1000 0100 0010 0001 Dla trybu półkrokowego: 1000 1100 0100 0110 0010 0011 0001 1001 Cewki silnika załączasz przez tranzystory NPN. Wysyłanie sekwencji na port proponuję zrobić w przerwaniu timera, który co jakis czas będzie...
Tak, jak już pisałem, nie tędy droga. Trzeba zrozumieć, ze Menu czyli interfejs programu z człowiekiem powinno być tylko jego nakładką graficzną. Nie może być tak, że kiedy jesteś w Menu to program zaniedbuje cały system, na przykład nie pilnuje zadanych temperatur. Pomyśl co by było gdyby termostat sterował grzałką w akwarium a Ty sobie radośnie wszedłeś...
Po jakiego czorta funkcje te zwracają liczbę pseudolosową? Kod pod PC często tak testuje i przenoszę do uC. Testowanie na mikrokontrolerze jest mało efektywne, zważywszy na brak technik typu Code Coverage czy Function Coverage. Albo ciekawsze testy jak symulacja zachowania EEPROM dla algorytmu emulowania EEPROM w Flash, jak błędy podczas kasowania,...
Witam, Problem polega na tym, że chciałbym aby zgrzewanie włączało się od razu po naciśnięciu tego przycisku, a po zgrzaniu odliczał te 3 sekundy w celu zablokowania możliwości ponownego zgrzewania przez ten czas. Nie, absolutnie nie taki algorytm potrzebujesz do obsługi załaczenia zgrzewania... Jeżeli przycisk ma powodowac załączenie zgrzewania, które...
Mam taki problem, którego rozwiązania nigdzie nie znalazłem, a sam nie potrafię zrobić. Potrzebuję zaprogramować Arduino w następujący sposób: wciskam przycisk i .............. Próbowałem, ale mi nie wychodziło. A może byś pokazał schemat jak to podłączyłeś do Arduino i chośby ten 'próbowany' 'nie wychodzący' program. Czy w tym projekcie stosujesz...
Obawiam sie ze dioda może niezaświecić na tym schemaciku albo bedzie świecic bardzo słabo - trzeba dolozyc tam rezystoro okolo 300ohm a nie jeden kilo. co do aplikacji przycisku to bym jednak proponowal instukcje DEBOUNCE Px.y , state , label [ , SUB] gdzie kolejno wskazujemy obslugiwany port czy ma reagowac na 1,0 i procedurke do wykonania
a może po prostu użyj DEBOUNCE w pętli DO...LOOP
Rozumiem, każdy robi jak chce i w czym chce. Tylko chciał bym uściślić: "gdy ktoś wciśnie klawisz i będzie go trzymał tak te 2 sekundy" Wtedy program wróci do pętli głównej i będzie realizował resztę swoich zadań, mimo wciśniętego przycisku. Dopiero puszczenie przycisku i wciśnięcie go ponownie spowoduje następny skok. O jakim blokowaniu programu przez...
Ja bym stawiał na brak debounce. Skoro sprawdzany jest stan przycisku to pewnie on do czegoś służy. Może do wyświetlenia informacji na wyświetlaczu. Jeżeli brak debounce to przerwanie to wywoła się pewnie z kilkanaście razy. Może być tez tak ze przepełnia się stos, kilkanaście razy 32 bajty.... i koniec RAM, procek sie resetuje. Ale to tylko zgadywanie...
Gdybym miał zrobić takie urządzenie to bym się zastanowił jaki wyświetlacz to raz ale w tym przypadku proponuje wyświetlacze LED bo najprościej je obsłużyć. Następnie potrzebujesz zastanowić się jakie maja to być przyciski. Zapewne będą to microswitche mechaniczne wiec przydał by ci się debouncer do nich aby nie było problemów ze zliczaniem. Polecam...
Witam Jestem poczatkujacy jezeli chodzi o programowanie w arduino dlatego prosze o wyrozumialosc. Tworze komputer pokladowy ktory bedzie pokazywal biezace parametry silnika. Przelaczam ekrany lcd za pomoca funkcji switch case. Na pierwszym ekranie chce aby wyswietlalo sie .... Potrzebujesz utworzyć procedurę zwaną „menu” , w której każdy nowy ekran...
Mała poprawka... ten kod : do portb.0=1 'zalaczasz diode waitms 500 'czekasz portb.0=0 'gasisz diode loop spowoduje że ... dioda będzie świeciła się ciągle ;-) poprawnie będzie tak: do portb.0=1 'zalaczasz diode waitms 500 'czekasz portb.0=0 'gasisz diode waitms 500 loop Acha, do sprawdzania stanu przycisków polecam komendę "debounce" - programowo niweluje...
Wydaje mi się, że to: [syntax=vbnet]if przycisk_wyzwolenia = 1 then sygnal = 0 enable int1 '<--- czyli to end if[/syntax] [syntax=vbnet]Impuls: Wyzwolenie = 1 '<--- i bezpośrednio to incr sygnal If Sygnal = Czas Then Wyzwolenie = 0 sygnal = 0 disable int1 end if Return[/syntax] niezależnie kiedy odczyta powinno wyzwolić w jednym i tym samym momencie...
Proszę, gotowy przyklad rozwiązania. Napisałem przy kawie i potestowałem w symulatorku czy się nie pomyliłem gdzieś ;) [syntax=basic4gl]$regfile = "m8def.dat" '$sim 'dla symulatora Config Portd.5 = Input : Set Portd.5 : Czuj_1 Alias Pind.5 Config Portd.6 = Input : Set Portd.6 : Czuj_2 Alias Pind.6 Config Portd.7 = Input : Set Portd.7 : Czuj_3 Alias...
Do obsługi przycisków w Bascom-ie istnieje funkcja "Debounce". Config Debounce = 45 ... Debounce Pind.1 , 0 , Ustawienia , Sub ... Ustawienia: Debounce Pind.1 , 0 , Ustawienia2 , Sub ... Return Ustawienia2: ... Return Tak "brzmi" lepiej :wink: Pozdrawiam Piotrek Sz.
Nie masz ustawionych pinów w ekspanderze, zrób np. pcf8574.pinMode(3, INPUT_PULLUP); Po drugie na starcie ekspander ustawia wszystkie piny jako HIGH. Jeśli masz podłączony przycisk pod ekspander to poczytaj na google tutoriale o debounce.
Czyli pierwszy warunek jest spełniony zawsze i ewentualnie drugi. A chciałbym osiągnąć stan albo jeden, albo drugi. musiałbyś zaczekać az do puszczenia przycisku, tj if(digitalRead(przycisk)==HI... , i dopiero wówczas podejmować decyzje if(ileRazy<20) {} else {} Czyli dłużej trzymam przycisk, to wartość...
Proszę o pomoc. Jak opracować obsługę przycisku bez zatrzymywania programu głównego? Chodziłoby mi o coś w rodzaju debounce w bascomie. bardzo proszę o pomoc z góry dziękuje
Bardzo dziękuję, to bardzo cenne uwagi jak dla mnie ;) Obecnie walczę z próbą pozbycia się przycisków menu i exit i pozostanie przy samym enkoderze. Jeśli mam włączone drganie styków (debounce) to w jaki sposób mogę sprawdzić jak długo jest wciśnięty przycisk?
debounce przycisk debounce debounce przerwania debounce
laczenie rownolegle brother gruby papier dziecka akumulator
Ford S-MAX CAN bus 0x160 – dekodowanie ramki PCM, parametry silnika, HS-CAN Vangotech SD612 HexWriter v3.4 software download, safe sources, installer hash, alternatives