Zabawę z mikrokontrolerami dopiero zaczynam dla tego potrzebuję pomocy
Zasada działania
Pkt1. Przytrzymaj 2 sekundy przycisk (Bez przerw jeśli przerwiesz instrukcje dalsze nie zostaną wykonane)
Pkt2. Jeśli przycisk był przytrzymany 2 sekundy wykonaj następujące kroki
Pkt3. Rozjaśnij Led do 100% Jasności powoli (Jeśli przycisk nie zostanie zwolniony od początku to świeć do momentu gdy zostanie zwolniony)
Pkt4. Przycisk został zwolniony ( Po zwolnieniu przycisku świeci jeszcze przez 10sek)
Pkt5. Płynnie przyciemniaj Led do 0% Jasności (Jeśli w trakcie wykonywanych instrukcji znowu przytrzymamy przycisk przez 2 sek nie spowoduje to przerwania operacji lecz program będzie to traktował że musi dokończyć pierwszą operacje po wygaszeniu znowu ma wykonać pkt.2 i tak w koło macieja)
Problem mam przy Pkt1. nie mogę sobie poradzić z tym przyciskiem zrobiłem coś w stylu że nalicza np. co 5ms po 1 pkt do zmiennej X gdy zmienna X osiągnie 254 wtedy wykonaj operacje. Ale to mnie nie zadowala bo jak klikam i klikam w przycisk to on sumuje każde wciśniecie ze za którymś razem to wystarczy pacnąć w przycisk a instrukcje dalej zostaną wykonane.
Do czego mi to ???
No potrzebuje żeby wyeliminować drgania przycisku i wpadłem na taki pomysł.
Z góry proszę o wyrozumiałość jak dla początkującego który chce na swoim kodzie zobaczyć jak powinno to wyglądać i w zaciszu sobie to przeanalizować.
- 'Procek
- $regfile = "attiny2313.dat"
- 'Czestotliwosc
- $crystal = 8000000
- 'Zmienne typu Word
- Dim R As Word
- Dim L As Word
- Dim T As Word
- Dim Flaga As Bit
- 'Start PWM'a
- Config Timer1 = Pwm , Pwm = 8 , Prescale = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
- 'Deklaracja Portów
- Config Pinb.3 = Output 'Port Orc1a
- Config Pinb.4 = Output 'Port Orc1b
- Config Pinb.1 = Input 'Port PB1 przycisk
- Portb.1 = 1 'Stan poczatkowy
- 'Wyzerowany PWM
- Pwm1a = 255
- Pwm1b = 255
- 'Pętla
- Do
- '**************** ????
- '**************** ????
- 'Warunek
- If Pinb.1 = 0 Then
- Waitms 50
- 'Rozjasnianie
- For L = 0 To 254
- Pwm1a = Pwm1a - 1
- Pwm1b = Pwm1b - 1
- Waitms 3
- Next L
- 'Powtarzaj jesli przycisk wcisniety
- While Pinb.1 = 0
- Pwm1a = 0
- Pwm1b = 255
- Wend
- Waitms 1000
- 'Przycienianie
- For R = 0 To 254
- Pwm1a = Pwm1a + 1
- Pwm1b = Pwm1b + 1
- Waitms 3
- Next R
- 'Przerwa 2 sek
- Waitms 100
- 'Koniec Warunku
- End If
- 'Koniec Pętli powtórz od nowa
- Loop
- 'Koniec Programu
- End