Buforuj otrzymane znaki i przetwarzaj w procedurze pętli głównej programu. Oczywiście wiąże się to z wywaleniem wszelkiej maści form kodu blokującego procesor i oparciem odliczania czasu o Timer.
select-case akceptuje również grupy i zakresy. Fakt, można napisać: switch (wartosc & xxx) ale zasadniczo, case to jedna wartość. BASCOM: select-case, przykład: [syntax=vbnet] Select Case I Case 1 : Print "1" Case 2 : Print "2" Case 3 To 5 : Print "3-5" Case Is >= 10 : Print ">= 10" Case Else : Print "Not in Case statement" End Select [/syntax]
Już znalazłem błąd... Aa - liczba (temperatura z DS18B20) I na starcie wynosi ona 85 *C Więc zgodnie z programem: Select Case Aa Case 48 To 100 : Portc = &B00111111 Set Portd.1 Set Portd.2 Set Stan STAN = 1 więc spełnia się: If Stan = 1 Then Do Set Portd.3 Waitms 100 Reset Portd.3 Loop Else Reset Portd.3 End If Pętla nie skończona w pętli głównej...
Dla każdego ekranu flaga określająca czy powinien być wyświetlany i sprawdzanie tej flagi zanim się procesorowi wyda polecenie wyświetlenia go.
[syntax=vbnet]Config Portd.2 = Input[/syntax] zamiast tego, powinno być: [syntax=vbnet]Config Pind.2 = Input[/syntax]
W procedurze/podprogramie obsługi przycisku wciśniętego zwiększaj zmienną o 1 a w programie głównym, czy też tam gdzie to jest potrzebne, wykonuj program w zależności od tej zmiennej, np. wykorzystując SELECT CASE.
[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]
W sumie można, lecz autor chciał mieć format byte, domyślam się że potrzebne to mu było do wyświetlania liczby na wyświetlaczach siedmiosegmentowych. Jeżeli tak, to Ciekawy jestem czy autor korzysta z lini Data i instrukcji lookup(), czy może z select case?
Select Case w Bascom to to samo co Switch w C, a Incr Stan to w C Stan +=1. Analogicznie Decr Czas to Czas -=1 Możesz sobie przepisać :D
Można strzelać? Bo nie znam BASCOMa :) Różnią się znaki na końcu linii (CR, LF) i dlatego Select Case nie rozpoznaje komendy.
Z tego co pamiętam z Bascom Select Case jest czymś podobnym do IF Else. Ty zamykasz Select Case po każdym porównaniu. Zagnieździłeś dwa SELECT CASE i zbyt wcześnie wychodzisz z wewnętrznego warunku. Z Select Case Com1_str powinieneś wyjść tylko raz na końcu porównania. Tak mi się wydaje.
Jeśli spełniony jest warunek, że ADC > 140 to i spełniony jest automatycznie ten że ADC > 130 itd.. ahahahaha no i sobie mikrokontroler rysuje jak mu kazałeś :D Widzę tu błąd w logice :P Napisałbym to zupełnie inaczej z automatu , ale możesz spróbować napisać to w odwrotnej kolejności albo na Select Case.
Zamiast dawać tyle ifów możesz dać jeden Select case - zobacz w Helpie jak on działa.
Ja mam coś takiego u siebie, tylko to nie wszystkie kombinacje bo będzie ich 36, z 6 wejść. Dim Stan_portu As Byte Stan_portu = Portd Do If Stan_portu <> Portd Then Stan_portu = Portd Select Case Portd Case 128: instrukcje... Case 192: instrukcje... Case 224: instrukcje... Case 240: instrukcje... Case 248: instrukcje... End...
To wiele wyjaśnia. Spróbuj tak ;) [syntax=vbnet]$regfile = "m8def.dat" $crystal = 8000000 $hwstack = 64 $swstack = 16 $framesize = 64 $baud = 9600 Config Lcd = 16x2 Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.6 , Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5 Cursor Off : Cls Dim K1 As Byte Dim K2 As String * 20 Dim Id As String *...
Widziałem gdzieś już kod z którego wycięto ten kawałek. Były w nim dwie zmienne typu Bit (Lock1 i Lock2). To są tylko dwa bity a Bascom i tak musi zarezerwować na nie cały bajt. Masz więc do dyspozycji jeszcze sześć wolnych bitów. Możesz dodać jeden Bit i teraz zakładasz zworkę na K2 do masy po czym włączasz urządzenie. Jeśli K2 na masie to Status =...
Aby ci nie mrygał wyświetlacz nie robisz cls tylko możesz nadpisywać teksty np. [syntax=vb] lcd "Slowo1" lcd "slowo "[/syntax] zamiast [syntax=vb]cls lcd "Slowo1" cls lcd "Slowo"[/syntax] a tu masz fragment z trybami menu [syntax=vb]If Trybprzycisk = 0 And Trybpomocnicza1 = 1 Then Incr Tryb Trybpomocnicza1 = 0 End If If Trybprzycisk = 1 Then Trybpomocnicza1...
Tego nie da się łatwo zrobić. Do tego będzie musiał być Select Case.
W pierwszym if zmieniasz na Pozycja =2 a za chwilę w drugim sprawdzasz If Pozycja = 2 i wracasz do Pozycja =1. Nie znam Bascom ale odpowiedniejszym w tym przypadku sprawdzeniem będzie instrukcja Select Case
f S1 = 0 Then Stop Timer0 Call L_stop Call P_stop Do Loop End If No i tu program zakończy swoje działanie po spełnieniu warunku S1=0. Nie wyjdzie z pętli Do...Loop do pętli głównej. Aha... i jeszcze Case deklaruje się z dwukropkiem Select Case Stan Case 1: Gosub Pucieczka Case 2: Gosub Tucieczka Case 0: If Namierzony_sharp1 = 1 Then Gosub...
W tym przykładowym kodzie jest chyba błąd logiczny ;) W Select Case biorąc pod uwagę Channel a nie Pomiar zawsze będziesz brał pod uwagę tylko Channel z którym wywołujesz funkcję czyli 0 :D
Dobre podejście do Select Case pewnie załatwiłoby sprawę ;) [syntax=basic4gl] Select Case Wartosc_napiecia Case 1000 To 1200 ' <- każda z tych wartości może być zmienną ... case 1201 To 1400 ... End Select [/syntax]
To możesz zrobić tak: [syntax=basic4gl] Odczytaj_sprzetowy_uart: Dane = "" Do 'Odbierz znak po znaku Kod = Inkey() Dane = Dane + Chr(kod) 'Zapisz w Dane If Dane = "Obroty1" Then Obroty = 1 If Dane = "Obroty2" Then Obroty = 2 If Dane = "Obroty3" Then Obroty = 3 Bufor = Ischarwaiting() 'Zakoncz jeśli brak znaku Loop Until Bufor = 0 Return [/syntax] i...
Zobacz sobie jaki jest największy rezystor w tabelce (czyli wbudowany w ten czujnik) - 65k Nie chcesz przekroczyć 1,1V bo po prostu wyjdziesz poza skalę ADC... Możesz poszukac jakiegoś kalkulatora do dzielników. Jest ich wiele. Jeden wbudowany jest w znany kalkulator fusów :P http://obrazki.elektroda.pl/8234017300_1... Jak widać by nie...
Czyli jak rozumiem, wprost czytać z tablicy bufora ? Gdzie znajduje się ten bufor z którego odczytuje INPUT ? Jak wtedy w Bascomie z 4 bajtowej tablicy wyjąć pierwsze 2 bajty, które potem porównuje Select Case ?
Do pętli głównej przenieś w takim razie fragment struktury Select Case a zmienną niech będzie cas.Wartości jedynie od 0 do 4. Dlatego, że pozostałe wartości będą wyświetlane z instrukcji If then (alarmy). Do każdego jednak warunku case musisz wstawic Wait 1. Inaczej informacja wyświetli się na czas tak mały, że jej nie zauważysz. Ta strukturę Select...
aaaa no sorry, obydwie części kodu były opisane oddzielnie a teraz już rozumiem o co ci chodziło: (nie zauważyłem słówka POTEM - moja wina) Portc=PortC or 0B00001111 case 0: Portc=Portc and 0B11110100 'to kasuje bit 0,1,3 a ustawia 2 case 1: Portc=Portc and 0B11110101 case 2: Portc=Portc and 0B11110111 case 3: Portc=Portc and 0B11110010...
Jak to było?.. "Programy się kompiluje, a nie komplikuje." :) [syntax=basic4gl]select case z case 1:restore e1 case 2:restore e2 case 3:restore e3 end select[/syntax]
mam jedno pytanie: Co oznacza ten zapis?? Kierunek = Pind And &H0F nie rozumiem tej części po = to znaczy wiem co znaczą osobno ale nie wiem jak to interpretować razem...:) Ktoś jeszcze jakieś pomysły?? Ten zapis to tzw maska. Liczba z indeksem &H to liczba szesnastkowa (Hex). Liczba &H0F to inaczej 00001111. Zapis Kierunek = Pind And &H0F daje w wyniku...
Zapoznaj sie z poleceniem case, Select Case
Dodaj sobie takie cos na poczatku: Open "comd.1:19200,8,n,1" For Input As #2 Aha i instrukcja case.. zapisz ja raczej tak: Select Case _rsstr1 Case "1":Print #2 , 1 ... itd end select nie uzywaj srednikow i pisz w jedej lini dajac po warunku " :" Pozdrawiam
Procesorowi wszystko jedno ile to jest Volt bo to sprawa względna (np. wynikająca z zastosowanego dzielnika). Łatwiej jest podjąć decyzje bezpośrednio z odczytu ADC. Napisz sobie programik który pokaże Tobie wskazania/odczyty z ADC przy żądanych napięciach i to wpisz do Select Case. [syntax=vbnet]Dim Rezu As Word , Wynik As Single , Prev_adc As Word...
Dla sprawdzania jednego klawisza: do ... ... ... gosub sprawdzanie_klawiszy if flaga = 1 then instrukcje gdy wciśnięty klawisz end if ... ... ... loop sprawdzanie_klawiszy: flaga = 0 if Ok = 0 then waitms 50 if Ok = 0 then flaga = 1 end if end if return mniej więcej tak to ma wyglądać. Jeśli chcesz sprawdzać kilka klawiszy robisz bardzo podobnie....
LED5W dzięki! Instrukcję "select case" właśnie przećwiczyłem. Pzdr
Wygląda jakby ktoś zakończył Instrukcję IF THEN poprzez END SELECT zamiast END IF.
Zabrakło ci 1 bitu bo wpisałeś tylko 7, a nie 8: Portd = &B1111111 Tak się nie reguluje szybkości: Timer0 = 200 lub 0 Wywal to, preskaler 1024 to i tak bardzo szybko jak na silnik krokowy, no chyba że procesor działa na 1MHz (ale to też szybko) Nie może być wartości 0: If Kropy = 5 Then Kropy = 0 Popraw na 1 bo twój Select Case nie uwzględnia cyfry...
Jak mogę zrobić aliasy: komenda 10 to przycisk1 = 1, komenda 20 to przycisk2 = 1, komenda 255 to przycisk1 = 0, przycisk2 = 0? Nie możesz. :P Aliasy to tylko dodatkowa nazwa, a ty chcesz bajtem ustawiać odpowiedni bit. Mógłbyś tak zrobić gdyby był ustawiany konkretny bit w bajcie, np. Command.0 Alias przycisk1 Moja propozycja jest taka: W przerwaniu...
A drugi test jaki dał rezultat ? Select Case Nr_wysw Case 0 : Portd = ... [...] Case 3 : Portd = ... End Select
Chyba chodzi o procedure "Do" "Loop"
może spróbuj inną metodą, może coś z tego rozbudujesz: Dim Mem_wiert As Byte Dim Powtorzenie As Integer Declare Sub Obrot1 Declare Sub Obrot2 Mem_wiert = 1 'wstepna wartosc numeru cewki '---------------------------------------... Do Debounce Pind.0 , 0 , Obrot1 , Sub Debounce Pind.1 , 0 , Obrot2 , Sub Loop End '---------------------------------------...
Może coś takiego : Dim Str1 As String * 10 Dim Koniec As Byte Dim Key As Byte Str1 = "" Koniec = 0 Do Key = Waitkey() 'pobieranie znaku, tu z terminala Select Case Key Case 13 : Koniec = 1 ' np. kod ENTER = 13 Case Else : Str1 = Str1 + Chr(key) ' inne znaki dodaje do str1 End Select If Len(str1) = 10 Then Koniec...
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...
Witam mam pytanie jak mogę skrucić ten program ?? By nie miał tyle lini a działał poprawnie. uC pobiera dane przez RS232C odpowiednio ustawia expandery PCF8574 chcę mieć tych kości 6 a program robi się kosmiczny moją metodą Może ma ktoś inny pomysł. Uwaga litera A w kodznie określa adres expandera a cyfry od 0-255 kod wyjściowy z układów. Cls I2csend...
Wycięte z większego programu ale widać cała pętle i ideę menu, obsługi ekranu głównego i nawet kolejnych poziomów (podmenu). Skok do odczytu klawiszy jest raz na pętle niezależnie w której części menu znajdujemy się. Zmienna Marker jest znacznikiem określający położenie aktualnie wyświetlanej zawartości ekranu. Menu to zamienna odpowiadająca ilości...
Z całym szacunkiem to jest to po prostu wioska. Nie zadałeś sobie trudu sprawdzenie biblioteki o której pisałem. Powinienem to tak zostawić , ale nie mogę na to patrzeć. Nie dość, że nie możesz używać standardowych instrukcji Bascom takich jak Lcddat, Showpic itd to jeszcze potrzebujesz 512 Bajtów na bufor.. Dyskwalifikuje to ten kod dla mniejszych...
select case xxx (oznacza podaj wartość XXX) case 0 (jeżeli wartość = 0 to) ... tu może być wiele linii kodu który zostanie wykonany aż do kolejnej lini z case ... case 1 (jeżeli wartość = 1 to) .... itd itd... end select (zakańcza select case) ok do odczytu temperatury z DSa potrzeba dwóch zmiennych typu byte (jak się mają nazywać) u mnie są Ds_1 Ds_2...
Może na select Case zajmowało by to mniej Select Case X 'wartości temperatury od ADC Case 895 To 889 X = 16 Case 890 To 884 X = 17 .. ... ... ... end select
Tak dla sprostowania na początek: zasadniczo to co ja napisałem jest bardzo podobne do pomysłu kolegi "hunterhouse"- napisaliśmy odpowiedź prawie w jednym czasie :-) Nie żebym się tu powtarzał czy coś w tym rodzaju. Powiedzmy dla przykładu, że masz 1 na Pinach 2 i 3 a na pozostałych 0, wtedy zmienna "Stan" wyniesie 2+4=6 (dla każdej konfoguracji jest...
$crystal = 8000000 Config Lcd = 16 * 1a Config Int0 = Falling Config Timer0 = Timer , Prescale = 256 Config Watchdog = 2048 Config Pind.0 = Input Config Pind.1 = Input Config Pind.3 = Output Config Pind.4 = Output Config Pind.5 = Output Dim Regulation_counter As Byte Dim On_off_flag As Bit Dim Regulation_type_flag As Byte Dim Int_counter As Byte Dim...
Już sobie odpowiem: Przy Stringach znak odebrany zaopatrzony jest w zero na końcu. Wystarczy teraz dodać do zapisu: select case znak case "ON01 0 " Set Portc.5 end select i wszystko śmiga :)
w petli DO LOOP użyj polecenia SELECT CASE i bedziesz miał menu
aleś nawalił if-ów , zamiast pisać sto razy lcd chr ... może zrób sobie tak : Zero: Lcd Chr(0) Return Jeden: Lcd Chr(1) Return Dwa: Lcd Chr(2) Return Trzy: Lcd Chr(3) Return Cztery: Lcd Chr(4) Return w odpowiednich miejscach powstawiaj gosub i już masz zaoszczędzone 100 bajtów , a najlepiej...
Ale po co tak kombinować? Po prostu niech każdy bit oznacza konkretną czynność. Np: 0 Przód 1 Tył 2 Prawo 3 Lewo Komendę robisz z tych bitów. Czyli na przykład 0101 to jazda do przodu i w prawo. Tyle że niektóre czynności będą zabronione. Na przykład jazda do przodu i do tyłu. W sumie wyjdzie z tego coś takiego co zaproponował jacekk232 , ale będzie...
W bascomnie ciężko zrobić LED + Ds18b20 wszytko psuje Waitms 750. Zwiększ do 8 a jak możesz do 16MHz kwarc. A od kiedy to musimy czekać 750ms nie robiąc nic innego? Od czego mamy timery? Przepraszam najmocniej Kolegę, ale jeśli Kolega tego zrobić nie potrafi to: 1. Nie oznacza że się tego zrobić nie da - ja nie potrafię zbudować komputera klasy PC...
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...
Najpierw ustaw dane końcówki jako we/wy a następnie skorzystaj z debounce. Następnie inkrementuj jakąś zmienną a potem skorzystaj z select case.
Koledzy dobrze radzą, ale jest jeszcze funkcja Select Case: Select Case Licz Case 1 : Print "1" Case 2 : Print "2" Case 3 To 5 : Print "3-5" Case Is >= 10 : Print ">= 10" Case Else : Print "Liczba spoza zasiegu" End Select
Jak masz podłączone bez jakiejś logiki sensownej to jedynie IF lub jakiś select case (chyba był taki w bascomie).
jak podczas symulacji zmniejszyć prędkość? za szybko się wszystko dzieje i nie jestem w stanie wyłapać to co się dzieje:P Poza tym jest jakiś może inny sprawdzony sposób zrobienia biegnącego światła na np 12 diodek i więcej. Zabawę z funkcją select case zostawie na weekend :)
Hmmm ni ewiem jak Ci to napisać bo nie wszystko da się zrozumieć od razu..ale pomysl.. nadajesz telefonem "Zapal" to jest raptem pięć znaków i tam NULL o którym nie koniecznie musisz wiedzieć ..ale... idąc dalej piczesz że "Tekst = Inkey()" procesor wciaga te kilka nadanych znaków..a załóżmy że teraz nadałeś "Zgaś" w pierwszej procedurze "If" sprawdził...
Zapewne dlatego że wykorzystujesz sprzętowe SPI (Config Spi = Hard), a przy sprzętowym SPI sygnał SS (Slave Select input) masz właśnie na pinie PB4.
Poczytaj w pomocy o instrukcjach: DATA , RESTORE, READ. Kiedyś robiąc skomplikowane menu używałem tego do przechowywania stałych tekstów/opisów. Wszystkie były tej samej długości. Aby nie używać SELECT CASE zrobiłem wstawkę asemblerową. O ile dobrze pamiętam rejestry R8 i R9 są używane jako wskaźnik dla funkcji READ. Możesz też wszystkie swoje dane...
Okazuje się, że w Bascomie 8051 nie można zdefiniować własnej funkcji, ta możliwość istnieje dopiero w Bascomie AVR - ciekawostka .. http://avrhelp.mcselec.com/changes_compa... Spróbuj czegos takiego może zadziała ... Declare Sub Klawiatura Dim przycisk As Byte Dim kol1 as Byte Dim kol2 as Byte Przycisk=0 Do Call Klawiatura ' Tu...
Kod taki zdawkowy, ale domyślam się, że chodzi o brak histerezy. Dodaj histerezę. Zamiast jednego progu decyzyjnego na 3.35 robisz dwa. Jeśli mniej niż 3, 3 5 to Flaga = 1, ale drugi robisz trochę wyżej. Jeśli więcej niż 3, 4 5 to Flaga = 0 [syntax=vbnet] Select Case Wynik Case Is < 3.35 : Flaga = 1 Case Is > 3.45 : Flaga = 0 End Select[/syntax]...
Witam To nie jest skomplikowana sprawa. Deklarujesz zmienne kontrolne które beda zmieniału swoją wartość po wykryciu 0 na pinie. dim kontrolka1 as byte dim kontrolka2 as byte kontolka1 = 0 ' najpierw je zeruje kontrolka2 = 0 ' / Teraz musisz dodać jakies warunki które bedą powodować zmiane ich wartości If pind.0 = 0 then kontrolka1 = 1 then wywołaj...
Witam. Mam w zmiennej bitowej jakąś liczbę z zakresu 0-60, np. 34. Czy można tą liczbę rozbić na 2 cyfry - przypisując do pierwszej zmiennej bajtowej cyfrę 3, a do drugiej 4? Czy są jakieś instrukcje w Bascomie, czy muszę to robić za pomocą SELECT CASE: Select case liczba ... case 34 Cyfra1=3 Cyfra2=4 .... End select
Spróbuj If ... Then Deflcdchar ..., albo Select Case. Nie próbowałem ale powinno zadziałać
...Zawsze mogę zrobić coś w stylu if x=1 then set P1, ale myślałem, że może jest jakiś "ładniejszy" sposób :) A Select Case X lub On X Gosub , będzie "ładniejszy" :?: :D Piotrek Masz racje Select Case bedzie najlepszy.
W funkcji: Timer_1_sub: Decr Count_time If Count_time > 0 Then Goto No_1sek Count_time = 16 Tcnt1h = Fuse_hi Tcnt1l = Fuse_lo Toggle Clock Incr Sekundy Odwołujesz się do nieistniejącej zmiennej, "Count_time" to funkcja a zmienna to "Coun_time". Poza tym zgubiłeś gdzieś End Select
Czy robiłeś coś z Select case Select Case Menu Case 0: 'Zmien temp zadaną 'Coś do wykonania Case 1: 'Zmien czas pracy podajnika 'Coś do wykonania Case 2: 'Zmien czas przerwy podajnika 'Coś do wykonania Case 3: 'Zmien czas pracy wentylatora 'Coś do wykonania Case 4: 'Zmien czas przerwy wentylatora 'Coś do wykonania Case 5: 'Zmien...
Witaj. Delphi nie znam, wiem że jest to program bardzo podobny do VB. Ma wiećej możliwości oczywiście, myślę że jednak nie o to chodzi. DO RZECZY Chodzi Ci o to by np. po naciśnięciu przycisku program wysłał kod (jaki to teraz nie ma znaczenia) , a BasCom ma go odebrać. Poczym uC ma wykonać określoną czynność. Jeśli chodzi co o to ?? , sprawa jest prosta....
Dla odbioru danych z tego pcfa potrzebny jest nieco inny algorytm niż przy zapisie. Nigdy nie używałem i2creceive, zamiast tego: (fragment jakiegos programu w bascomie) " I2cstart 'generate start I2cwbyte 160 'write addres of PCF8583 I2cwbyte 2 'select register I2cstart 'generate repeated start I2cwbyte 161 'write address for reading info I2crbyte Timedata(1)...
No dobra. Wywal wszystko na linii Tx telefonu do Rx procesora. Ma być połączenie bezpośrednie. Na drugim kierunku zostaw tak jak masz. Poniżej kod do testów. Powinien działać. [syntax=basic4gl]$regfile = "m32def.dat" $crystal = 16000000 $baud = 19200 Config Lcd = 16 * 2 Config Serialin = Buffered , Size = 100 Enable Interrupts 'Declare Sub Oproznij_bufor...
ok, tylko najpierw uporam się z przyciskami i nastawami :P Dodano po 28 $regfile = "m8def.dat" $crystal = 8000000 Config Portd = Output 'podłaczony wyświetlacz 'Config Pinb.0 = Output ' anoda 1 źle! nazwa pin służy do odczytu wartości 'Config Pinb.1 = Output 'anoda 2 źle! aby ustawić należy się posłużyć nazwą Portb.x 'Config Pinb.2 = Input...
Są Święta więc łap :D https://filmy.elektroda.pl/56_1450976796... Tylko trochę poprawiłem co tam napisałeś bo można by więcej... Możesz tez zerknąć [url=http://bart-projects.cba.pl/bargraf... tę kolekcję - Link. Napisałem w międzyczasie kilka innych i "szybszych" ale nie było czasu wrzucić. [syntax=vbnet]$regfile = "m16def.dat" $crystal = 1000000...
Temat uważam za zamknięty Pomogło przerwanie Urxr w którym pobieram prze inputbin do zmiennej. a potem na końcu pętli głownej ją zeruję, bo wywoływała mi się ciągle jedna z opcji SELECT CASE. Kliknąłem wam "KCIUKI" :) Pozdrawiam
Ustawiaj żądaną wartość i jak się nie będzie zgadzała z aktualna to samo się doreguluje ;) [syntax=vbnet]Dim Zadane_pwm As Byte, Aktualne_pwm As Byte On Timer0 Co_jakis_czas Do 'w celach prezentacji Zadane_pwm = 255 Wait 5 ' (przerwania przerywają Wait więc nie ma strachu) Zadane_pwm = 0 Wait 5 Loop Co_jakis_czas: Select case Aktualne_pwm Case Is <...
Podprogramy niepotrzebne. Select Case Cmd Case "1" Portb.0 = 1 Case "2" ....... End Select ale działać będą.
Ten program nie ma prawa działać. Zle zbudowany Select...Case. Nigdy nie będzie przeskoku dla I=2 oraz I=3. Reszty nawet nie analizuję.
Nie widziałem wcześniej, że już na to wpadłaś. Twój się kalibrował tylko w jedną stronę a ten powinien w obydwie (ale nie testowałem) ;) [syntax=vbnet]$regfile = "attiny13.dat" $crystal = 9600000 $hwstack = 2 $swstack = 0 $framesize = 22 Config Adc = Single , Prescaler = Auto , Reference = Avcc Dim Mem_adc As Word , New_adc As Word Dim Krok As Byte...
Może ten Twój jakiś dziki jest :P więc spróbuj jeszcze przenieść Sub pod pętlę główną jak ja poniżej. U mnie kompilują się wszystkie wersje wiec w załączniku masz skompilowane Hex i Bin do wyboru. Sprawdź też prywatną wiadomość ;) [syntax=vbnet]$regfile = "m8def.dat" $crystal = 1000000 $hwstack = 40 $swstack = 16 $framesize = 32 '********* TUTAJ SOBIE...
Po mojemu to mogło by być tak. '*********************** Podprogram ustawiania godzin ,minut, dni i miesięcy Sub Menu: Start_menu = 0 Do If Menu_ustaw = 0 Then Waitms 25 If Menu_ustaw = 0 Then Incr Start_menu If Start_menu >= 6 Then Start_menu = 0 End If End If End If Select Case Start_menu Case 0 : Case 1 : Locate 1 , 1 Lcd "Ustaw...
Do Autora wątku: Proszę. Nie taki diabeł straszny. Nie napisałeś jaki to procesor więc napisałem przykład dla Mega8. Funkcja odczytuje ADC(0-5) z włączony ADLAR czyli tylko osiem bitów. Wynik od 0 do 255. Zapewne działa nawet w symulatorze. To taki podstawowy. Można nie czekać a ustawić przerwanie, ale to pewnie jeszcze nie dla Ciebie :D Wpisz w Google...
Miałem kiedyś jakąś potrzebę na taki 8-o przyciskowy program dla attiny2313. Zamieszczam go w całości z komentarzami, może Ci się przyda: [syntax=basic4gl]$regfile "attiny2313.dat" $crystal = 1000000 '-- Config Portb = Input Portb = &B11111111 Config Portd = Output Portd = &B00000000 Config Porta.0 = Output Porta.0 = 0 Dim Nr As Byte 'licznik...
popatrz jak to wygląda u mnie : odczyt : I1 = 1wread(2) 'przeliczanie na C I1 = I1 * 10 I1 = I1 / 16 więc wynikiem jest np 200 dla 20.0C jako regulacje zastosuj select ponieważ nie musisz robic wielu warunków : 'temperatury i regulacja obrotów Select Case I1 Case 0 To 300 : pwm1a = 0 'dla 30.0C Case 300 To 350 : Pwm1a = 120 ' dla 30.0...
Kolego patrzę na ten kod ze zgrozą, ale załadowałem do swojego Bascoma i trochę więcej zrozumiałem bo mozna sprawdzać referencje i skakać po kodzie. W przerwaniu co osiem taktów (nierealne) timer ma zliczać te twoje "niby" OCR. (Incr Licz_timera1 : If Licz_timera1 >= Ooo Then) Te OCR jest ładowane z tabeli gdzie najmniejsza wartość to 127 a najwieksza...
Musisz dobrać taki kwarc, który da się podzielić tak by uzyskać częstotliwość pracy UART = 31250 Hz +/- 1% Komunikat MIDI składa się z 2 lub 3 bajtów. Jeżeli bajt ma ustawiony najstarszy bit to jest on (ten bajt) traktowany jako rozkaz a jezeli nie to są to dane do rozkazu (ogólnie dane są przesyłane w porcjach 7 bitowych). Dekodowanie jest dość złożone,...
Declare Sub Gettime Declare Sub Settime Dim S As Byte Dim M As Byte Dim H As Byte Dim Yd As Byte Dim Wm As Byte Podprogram odczytu pcf8583: Sub Gettime I2cstart 'generate start I2cwbyte &HA2 'write addres of PCF8583 (a0 do plusa) I2cwbyte 2 'select second register I2cstart 'generate repeated start I2cwbyte &HA3 'write address for reading info I2crbyte...
No i dobrze. Zrobiłem gafę w programie. Wyświetlacz ma 32, a nie 16 pół, dlatego tyko jedna linia się wyświetla. Zmień to tak: Sub Txt_edit Cls I2cstart I2cwbyte In_eep I2cwbyte Adr_hi I2cwbyte Adr_low I2cstart I2cwbyte Out_eep For I = 1 To 32 I2crbyte Bufor , Ack If I > 16 Then Lowerline End If Lcd Chr(bufor) Next I I2crbyte Bufor , Nack...
Witam. W petli glownej programu musisz sobie napiac jakas procedurke wyboru podprogramow. Np mozesz uzyc do tego 3 przyciskow - jeden do zwiekszana zmiennej np wybor , drugi do jej zmniejszania atrzeci przycisk do potwierdzenia "enter" . Nie pamietam juz dokaldnie skladni w Bascomie ale moze to byc np tak: DDRB=&b11111000 // - piny 0 1 i 2 portu...
Nie chce mi się zagłębiać dalej w pisanie. Tych trybów możesz sobie dopisać ile chcesz. I jak Przewijajac menu naciśniesz Set to zmień tryb na, na przykład, "Ustawiam_temp" i w tym trybie znów przyciski Plus i Minus bedą działać dla zmiennej ustawianej. Potem naciskasz ESC i wracasz do trybu jakiego chcesz.. to proste i pewne. [syntax=basic4gl]$regfile...
Błąd w logice. Twój kod czytam tak -> Dopóki zmienna nie ma 5 to cały czas resetujemy pomiar i startujemy nowy (już Select Case byłoby lepsze). Potem próbujemy to czytać jak zmienna ma powyżej 100. No daj spokój. Są tu tego tony jak to obsługiwać. Mój/nie mój sposób to dwa suby. Jeden Startuje konwersję a drugi Czyta. Sprawa polega na tym by odwrócić...
Czy pomiędzy tym ... Select Case Tchr ... , a tym ... Select Case Asc(Tchr) ...widzisz jakąś różnice :?: Ja widzę ;) Piotrek
A może by tak skrócić te endify i zrobić Select Case Odczyt i dalej Case wynik itp. bo tyle endifów to aż razi ;)
Czyli jeśli dobrze zrozumiałem wystarczy jedna pętla select-case a w niej zawierały by się wszystkie możliwe przypadki z menu i podmenu oraz zakładki głębszych podmenu ?
PortD.0 do 4 - przez tranzystory podłączone anody lub katody wyświetlaczy. Podprogram obsługi przerwania może wyglądać tak: Portd = portd or &B1111 Select Case Seg Case 0: Portb = Lookup(jednosci , Tabela) Portd.0 = 0 seg=1 Case 1: Portb = Lookup(dziesiatki , Tabela) Portd.1 = 0 seg=2 Case 2: Portb = Lookup(setki , Tabela)...
Ja też mam odbiór bufora na przerwaniu, wywoływanym co około 1 sek, śmieci się zdarzają, ale bardzo rzadko, nie zauważyłem natomiast gubienia odpowiedzi modemu Odebrane = "" Do Ch = Inkey() Select Case Ch Case 0 : Exit Do 'nie ma nic to kończ pętlę Case 13 : Call Wysw 'jeśli enter to wyświetla linię Case 10 : 'jeśli LF...
Troszkę się nie zrozumieliśmy, miałem na myśli wyświetlanie napisu dopiero na końcu tak aby nie powielać tego polecenia print. Wtedy zamiast print przepisywałbym do zmiennej jedynie numerek a na końcu (po całym select case) sklejał w jednym poleceniu print całość, czyli przedrostek ze stałej i numerek ze zmiennej. Sytuacja wygląda tak że mam 6 przedrostków...
$hwstack = 64 $swstack = 64 $framesize = 128 Dim Dane As String * 1 Dim Parametr As Byte Dim Bufor As String * 16 Dim Naglowek As String * 16 Dim Latitude As String * 16 Dim Longitude As String * 16 Dim Flaga As Byte [...] Urxc_irq: Dane = Chr(udr) Select Case Dane Case "{010}" : Case "{013}"...
Nie wiem, czy dobrze rozumiem, pewnie coś namieszałem. Jeśli jednak tak, to wystarczy jeszcze dorobić lepsze zabezpieczenie przed zwiększaniem więcej niż o jeden. czyli w moim przypadku powinno być: [syntax=vbnet] Dim Command As Byte ' komenda z odebrana z pilota Dim Piloty as Byte Zeruj_piloty alias 0 Pilot_1 Alias 34 Pilot_2 Alias 194 Pilot_3 Alias...
oblicz select select tytuł select revision
panasonic tes824 brumienie potencjometr czyszczenie lodówki
ue32h4000 wyłącza wodny kolektor słoneczny budowa
Uszkodzenie zamrażalnika w lodówce - wyciek gazu Powerbank do zasilania kamery IP WiFi - Anker, RAVPower