Teraz spłodziłem coś na chacie w bascomie ;-) Może w końcu ta koncepcja ruszy.... uwzględnia drgania styków, działa na innej zasadzie... powinna byc odporna na wszelkiego rodzaju czasy między puszczeniami wciśnięciami itp... w przerwaniu co 10ms sprawdzamy stan przycisku zadziałanie przycisku następuje najwcześniej po 10 jego sprawdzeniach (po 100ms) Krótka, szybka pętla główna sprawdzająca jedynie zmienne, a nie przycisk... Jak to nie zadizała to ja się poddaję :-P przynajmniej do czasu odpalenia płytki testowej z megą... $regfile = "m8def.dat" $crystal = 8000000 'kwarc lub oscylator wewnetrzny 8MHz Enable Interrupts Enable Timer1 Config Timer1 = Timer , Prescale = 64 On Timer1 Przerwanie '''''jesli timer1 doliczy do 65535 wykonaj Przerwanie Counter1 = 64285 '''''=65535-1250 -> pprzepelnienie timera co 10ms Start Timer1 Config Pind.0 = Output Config Pind.1 = Output Config Pinb.0 = Input Config Pinb.1 = Input Dim Licznikzaplonu As Word '''''max policzy do 65535*10ms=655s Dim Licznikprzycisku As Word Dim Licznikprzycisku2 As Word Dim Puszczenie As Bit Dim Flaga1 As Bit Dim Flaga2 As Bit Zaplon Alias Portd.0 Rozrusznik Alias Portd.1 Przycisk Alias Pinb.0 Pompa Alias Pinb.1 Reset Portb.0 Reset Portb.1 Reset Zaplon Reset Rozrusznik Do If Zaplon = 0 And Licznikprzycisku = 10 Then '''''Jesli zaplon wylaczony i przycisk wcisniety minimum 0,1 sekundy to Flaga1 = 1 '''''ustaw flage wlaczenia zaplonu i Licznikzaplonu = 0 '''''wyzeruj licznik 300 sekund i Set Zaplon '''''wlacz zaplon End If If Zaplon = 1 And Licznikprzycisku2 > 10 And Licznikprzycisku2 < 100 And Puszczenie = 1 Then '''''Jesli zaplon wlaczony i przycisk trzymany minimum 0,1 sekundy, maksimum sekunde i flaga puszcenia przycisku ustawiona to Reset Zaplon '''''wylacz zaplon i Puszczenie = 0 '''''zresetuj flage puszczenia End If If Zaplon = 1 And Licznikprzycisku = 100 And Flaga1 = 0 Then '''''jesli zaplon wlaczony i przycisk tryzmany ponad sekunde to Set Rozrusznik '''''wlacz rozrusznik End If If Pompa = 1 Then '''''zresetuj licnzik 300 sekund jesli silnik pracuje Licznikzaplonu = 0 End If If Licznikzaplonu = 30000 Then '''''wylaczenie zaplonu po 300 sekundach, jesli silnik nie pracuje Reset Zaplon End If Loop Przerwanie: '''''co 10ms wykonaj: Counter1 = Counter1 + 64286 '''''ustaw stan poczatkowy timera Incr Licznikzaplonu '''''zwieksz licznik zaplonu o 1 If Przycisk = 0 Then '''''jesli przycisk jest wcisniety to Incr Licznikprzycisku '''''zwieksz licznik wcisniecia przycisku o 1 i Flaga2 = 1 '''''ustaw flage wcisniecia przycisku Elseif Przycisk = 1 Then '''''jesli przycisk jest puszczony to If Flaga2 = 1 Then ''''''''''jesli przed 10ms byl wcisniety to: Puszczenie = 1 ''''''''''ustaw flage puszczenia przycisku i Licznikprzycisku2 = 0 Licznikprzycisku2 = Licznikprzycisku ''''''''''podstaw czas wcisniecia przycisku i Flaga2 = 0 ''''''''''zresetuj flage wcisniecia przycisku i End If Licznikprzycisku = 0 '''''zresetuj licznik wcisniecia przycisku co 10ms i Reset Rozrusznik '''''puszczony przycisk uniemozliwia prace rozrusznika Flaga1 = 0 '''''zresetuj flage wlaczenia zaplonu End If Return End 'flaga1 - blokada rozruchu w sytuacji, jak zaplon jest wylaczony i trzymamy przycisk => zaplon wlaczy sie ale rozrusznik nie 'dopiero po puszczeniu przycisku flaga sie wyzeruje i nastepne tryzmanie pozwoli odpalic rozrusznik ' 'flaga2, puszczenie, licznikprzycisku2 - umozliwiaja wykrycie momentu puszczenia przycisku, wykrycie czasu jego wcisniecia '=> potrzebne, przy probie rozruchu zaplon nie wylaczyl sie Dla rozjasnienia kodu wrzucam plik bascoma - tam jest bardziej przejrzyście