[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]
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 :...
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...
Poczytaj sobie w helpie o "debounce".
Jak zacząć pisanie programu obsługującego przyciski, wyjaśnia przykład "Button" albo "Debounce" w środowisku Arduino IDE.
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...
Po nazwach zmiennych strzelam, że jest to maszyna stanów do debounce przycisku.
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...
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
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...
Witam, mam mały problem mam ograniczoną możliwość dodania przycisków więc pomyślałem ,że np. naciskając dwa jednocześnie uzyskał bym trzeci ale nie wiem jak mam napisać tych parę linijek kodu do obecnych używam instrukcji Debounce
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.
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.
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...
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...
Może problem jest w wibracji przycisku, spróbuj komendy 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...
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...
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....
Witam.. Mam nastepujacy problem.... Napisalem program w BASCOM do obslugi 3 przyciskow podlaczonych do kolejno p3.0,p3.1,p3.5... przyciski obsluguje za pomoca komendy DEBOUNCE reagujacej na stan niski... Po kazdym nacisnieciu przycisku program czysci wyswietlacz LCD i ustawia zdefiniowany symbol w innym miejscu(odpowiedzio dla dwoch skrajnych przyciskow,...
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
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.
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....
W bascomie jest specjalna instrukcje do obsługi przycisku DEBOUNCE Proponuje z niej skorzystać
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...
Przyciski - DEBOUNCE Odliczanie - CONFIG TIMER i przerwania.
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?
...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
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...
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...
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.
Nie wiem jakiej wersji używasz. Poniższy kompiluje się na pewno w 2075 - specjalnie sprawdziłem :D [syntax=vbnet]$regfile = "m8def.dat" $crystal = 1000000 $hwstack = 40 $swstack = 16 $framesize = 32 '********* TUTAJ SOBIE USTAW JAK CI PASUJE ********** Pin_wyjsciowy Alias Portc.5 Przycisk Alias Pind.2 : Set Portd.2 Const 1_ilosc_minut_do_odliczenia...
[url=http://www.arduino.cc/en/Tutorial/D... masz gotowy przykład wykorzystania funkcji Debounce.[/code]
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...
To https://www.arduino.cc/en/Tutorial/Debou... poczytaj.
K.G. pozostawie twoj kod bez komenta. Co do mojego kodu jak sa to zwykle przyciski, powinienes jeszcze dac delaye lub uzyc debounce
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...
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
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...
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...
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ć...
Cześć. https://obrazki.elektroda.pl/1280991700_... Kuzyn poprosił mnie o zbudowanie tego ustrojstwa, bo posiada jedno wolne wejście we wzmacniaczu, a do podłączenia jeszcze trzy źródła dźwięku. Projekt powstał w dwa dni. Czterokanałowy selektor wejść do wzmacniacza. Nic szczególnego... Płytka - termotransfer. Program - BASCOM. https://obrazki.elektroda.pl/9048297700_...
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...
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...
OK, napisałem coś swojego, ale napotkałem jeden problem. Chciałem zrobić, aby dana funkcja zadziałała po przyciśnięciu i puszczeniu przycisku, więc napisałem coś takiego: (...) Debounce Przycisk , 1 , Subprzycisk (...) Subprzycisk: If Przycisk <> 1 Then Call Przycisk1 (...) Sub Przycisk1 (...) i dalej juz jest...
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...
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ę...
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...
Drgania eliminuje poprzez waitms 100 tak mi się wydaje. To kompletnie źle ci się wydaje :) Od drgań jest 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.
Witam. Mam coś trudniejszego i przydałaby się mała pomoc. Chce podłączyć 3 przyciski do arduino i napisać kod żeby każdy sterował wszystkimi 3 servomechnizmami. Z tym ze: 1 przycisk : Servo 1, 2, 3 obraca się o 90 stopni 2 przycisk: Servo 1obraza się o 90 stopni Servo 2 o 0 Servo 3 o 90 3 przycisk : Servo 1,2,3 obracają się o 90 stopni. Z góry dziękuje...
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...
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...
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 :)
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.
Do obsługi przycisków w Bascomie służy "DEBOUNCE"
...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...
panowie mi chodzi o prosty program, który będzie obsługiwał krótkie i długie naciśnięcie przycisku. Napisałem nowy kod, wydaj mi się że powinien być ok ale bascom sypie błędy z end if i nie mam pojęcia dlaczego? 'ustawienie nazw Przycisk Alias Pind.0 Dioda Alias Pinb.7 Dioda1 Alias Pinb.6 'ustawienie zmiennych Dim A As Byte A = 0 Przycisk = 1 Dioda...
Spróbuj kodu ze zwiększonym opóźnieniem Dodano po 2 Czy za każdym razem jak postoi jakiś czas i uruchomisz to urządzenie to godzinę chodzi Dobrze a później się dalej pojawia ten problem?
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;...
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...
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...
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ć,...
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.
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...
Witam No to edekk mnie pocieszyłeś :-) muszę jutro do elektronika podjechać i zakupić kilka części. Co za kobieta, miała na kartce napisane jaki kwarc ma być ( właśnie sprawdziłem tą kartkę i jak byk jest wartość 32.768kHz ) to ponad w 3.2MHz. Mam jeszcze takie pytanko. Zrobiłem sobie menu do ustawiania poszczególnych parametrów ( nastaw) poruszam się...
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...
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...
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...
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...
https://obrazki.elektroda.pl/2540869000_... Cześć. Dawno nic nie dłubałam, a ostatnio z roboty przytargałam kilkanaście płytek od jakiś TV, czy monitorów z odbiornikami IR i dwukolorową diodą R/B, aż żal było czegoś z tego nie zrobić. Niedziela upłynęła na projektowaniu i montażu tego urządzonka. Odbiornik nie reaguje na żaden konkretny...
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...
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,...
Poczytaj w helpie polecenie " Debounce "
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,...
A może DEBOUNCE?
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...
Proszę. Twój programik ponad 20% chudszy ;) Pewnie jeszcze by się coś znalazło :D [syntax=vbnet]$regfile = "attiny2313.dat" $crystal = 1000000 $hwstack = 32 $swstack = 4 $framesize = 38 '* Konfiguracja wyświetlacza * Config Lcdpin = Pin , Rs = Portd.6 , E = Portd.4 , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 Config Lcd = 16 * 2 Deflcdchar...
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...
Przetestuj ten. Tak go poopisywałem, że aż mi się nie podoba :D [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 8000000 $hwstack = 40 $swstack = 16 $framesize = 32 '# wyświetlacz Config Lcd = 16 * 2 Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5 Cls '# timer ' 8000000Hz(8MHz)/256(Prescaler)=...
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...
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...
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...
a może po prostu użyj DEBOUNCE w pętli DO...LOOP
sylwunia35: kondensatory przy microswitchach - dobry pomysł, zaraz spróbuję. Debounce - zły pomysł: debounce odkłóca przyciski ale nie w sensie zakłóceń z sieci tylko niweluje mikrodrgania styków. Zresztą i tak piszę w C gdzie mam napisane własne procedury debounce działające analogicznie. sp3ots: Czemu dać podciąganie programowe? Czy podciąganie zewnętrznym...
Witam! udało się! dodałem do programu debounce i blokady czasowe które defacto wyeliminowały wszystkie błędne impulsy! teraz działa poprawnie oto zmodyfikowany kod, może komuś się przyda:) // Definiowanie pinów dla wejść i wyjść #define A0_PIN A0 #define A4_PIN A4 // Zmieniono z A1 na A4 #define A2_PIN A2 #define A3_PIN A3 #define OUTPUT_2 3 #define...
Mały przykład, ale bez wykorzystania funkcji Debounce. Przed odczytaniem stanu przycisku, zapamiętywany jest stan portu. Odpowiednie Piny są ustawione jako wejścia, następnie sprawdzane jest czy przyciski są wciśnięte. Stan przycisku jest zapamiętywany w zmiennej Tempkey, zostają przywrócone stare ustawienia portu. [syntax=basic4gl]$regfile = "m8def.dat"...
Proszę kolego. Wolę się pobawić niż spierać o to kto jest mądrzejszy. To mój pomysł i metodę losująca można zastosować każdą inną. Miało być krótko. [syntax=basic4gl]$regfile = "m8def.dat" $crystal = 8000000 Config Portb = Output Config Pinc.1 = Input : Portc.1 = 1 : Przycisk Alias Pinc.1 Dim X As Byte Dim Miliseconds As Word , Powtorz As Byte 'na starcie...
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....
To jeszcze masz rotate, Left. I zapoznaj się z debounce do obsługi przycisków. A dopiero po zapoznaniu się z przerwaniami i sub-ami będziemy myśleć o 3-krotnym naciśnięciu przycisku. Jeszcze jedno- w szereg z wyjściami procesora na ULN daj jakieś oporniki- 200om do 1kom- dla bezpieczeństwa procesora. A sterowanie szybkością obrotów sprawdź zmieniając...
poczytaj o debounce i o chwili kiedy naciskasz przycisk. Dodano po 48 jak przyciski dasz do massy i wlaczysz pull upy to nie musisz uzywac zew. rezystorow
...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...
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?
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...
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...
A liczy cały czas tak w ogóle, czy chwilę po tym jak puścisz przycik? Poczytaj o funkcji debounce - usuwanie drgań z przycisku...Może to tego wina... I poczemu w tym ifie masz pom?? Nie wystarczy if impuls=o then incr... ;lcd...? Dodano po 2 No i co to robi w tym dziale (vhdl pla etc...?)
Przy użyciu jakiego polecenia?? If czy debounce?? bo to ma znaczenie, wrzuć najlepiej cały kod
Witam Czy ktoś może mi powiedzieć gdzie jest błąd w kodzie zamieszczonym poniżej? W tym projekcie atmega ma sterować obrotami wentylatora (wolniej/szybciej) po naciśnięciu przycisku. Tu konfigurujesz Timer1 do pracy w trybie (1) 'Phase Correct PWM, 8-bit'. mniej/więcej jak na poniższej ilustracji: http://obrazki.elektroda.pl/3601105700_1...
Łap. Naciskając przycisk enkodera wybierasz czy ustawiasz sekundy czy minuty. Mikrokontroler przykładowy żeby tylko kompilator błedy sprawdził. Podstaw swój i swoje wyprowadzenia. [syntax=basic4gl]$regfile = "m328pdef.dat" ' config for encoder_switch Config Portd.4 = Input : Przycisk Alias Pind.4 : Portd.4 = 1 ' config for encoder Config Portd.2 = Input...
niestety w obu kodach brakuje czegoś co by dodawało cokolwiek do zmiennej A, więc nie przyjmie ona nigdy wartości 1 lub 2 skoro na początku się ją zeruje. Jesli chodzi o podciągnięcie programowe to nie działa (dałem rezystor zewnętrzny). Próbowałem tak i działa: config debounce = 50 ' 50ms dla przycisku dim a as byte ' deklaracja zmiennej a=0 ' zerowanie...
debounce debounce przerwania debounce debounce przerwa
sterownik sciezek karta zabezpieczona zapisem zasilać lampa solarny
Zakup zaprogramowanej pamięci 24Q64 do Manta LED 3201 Jak odświeżyć Smart TV: Samsung, LG, Sony