Tip varijable za preciznost 0,1
Moderators: pedja089, stojke369, trax, InTheStillOfTheNight
Tip varijable za preciznost 0,1
Poštovani,
zanima me da li mi može tko reći kako deklarirati varijablu , čiji se iznos na svaki pritisak tipke povećava za jedan. Naprimjer, pritisnem tipkalo vriejdnst varijable X se poveća sa 10 na 10,1, e sad kako dekalrirati varijablu X, a da se pritom prikazuje samo iznos 10,1, a ne jos mnogo decimala poslije..
Hvala.
zanima me da li mi može tko reći kako deklarirati varijablu , čiji se iznos na svaki pritisak tipke povećava za jedan. Naprimjer, pritisnem tipkalo vriejdnst varijable X se poveća sa 10 na 10,1, e sad kako dekalrirati varijablu X, a da se pritom prikazuje samo iznos 10,1, a ne jos mnogo decimala poslije..
Hvala.
Re: Tip varijable za preciznost 0,1
Varijabla koju deklariras trebala bi biti tipa float, a pri ispisu koristit %.1f . Tako je barem u C-u.
Re: Tip varijable za preciznost 0,1
Može se riješiti i na sledeći način (naravno nije i jedini) tako da:
varijablu povećaš za 0.5 zatim vrijednost množiš sa 10 "odrežeš decimalni dio ( varijabla integer) a potom podijeliš sa 10. Na taj način dobije se vrijednost sa jednom decimalom. Ovo je ako se radi o nekekvom mjerenju. Ipak trebao bi dati više podataka o čemu se zapravo radi i konkretno šta se programira, gdje se vidi vrijednost varijable, na šta utiče itd.
varijablu povećaš za 0.5 zatim vrijednost množiš sa 10 "odrežeš decimalni dio ( varijabla integer) a potom podijeliš sa 10. Na taj način dobije se vrijednost sa jednom decimalom. Ovo je ako se radi o nekekvom mjerenju. Ipak trebao bi dati više podataka o čemu se zapravo radi i konkretno šta se programira, gdje se vidi vrijednost varijable, na šta utiče itd.
Re: Tip varijable za preciznost 0,1
Radi se o slijedećem:
- program je u BASCOM AVR-u
- čitam stanje tipkpovnice, i pritisak na tipku povećava vrijednsot varijable za 0,1. Npr. Radi se o zadavanju "sati" regulatoru temperature. Zadam sate i konačnu vrijednost temperature, i na osnovu te dvije vrijednosti raguliram temp.
- program je u BASCOM AVR-u
- čitam stanje tipkpovnice, i pritisak na tipku povećava vrijednsot varijable za 0,1. Npr. Radi se o zadavanju "sati" regulatoru temperature. Zadam sate i konačnu vrijednost temperature, i na osnovu te dvije vrijednosti raguliram temp.
Re: Tip varijable za preciznost 0,1
To je već jednostavnije. Možete je deklarisati kao "single", i nemojte zaboraviti da odradite "debounce" funkciju za tastere (ne znam koliko imate iskustva u programiranju pošto je to obično sledeće pitanje ).
Pozdrav.
Pozdrav.
Re: Tip varijable za preciznost 0,1
Deklariram ju kao single, i sad npr. iznos varijable bi trebao biti 10.1, a prikaz bude 10.198547...
Re: Tip varijable za preciznost 0,1
Zašto bi bio ako vrijednost povećavaš tasterom, nisu to nekakve mjerene vrijednosti da treba zaokruživati?! Ne razumijem pa sam definišeš promjenu u npr. if bloku, npr:
Obično ti treba i drugi taster za smanjenje pa se definiše na sličan način.
Sretno
Code: Select all
...
dim A as single
A=10
Config Debounce = 20
Do
Debounce Pind.4 , 0 , promjena , Sub
...
...
loop
promjena:
If pind.4=1 then A=A+0.1
Return
Sretno
Re: Tip varijable za preciznost 0,1
Tako sam i napravio. I sad kad napišem Lcd A, ispiše mi se vrijednost 10.10000379. Potrebno mi je da bude 10.1, jer tu vrijednost dijelim sa razlikom između dvije temperature, A ta vrijednost "A" mi predstavljaju sate koje korisnik unosi preko tipkala.
Re: Tip varijable za preciznost 0,1
U tom slučaju postupak ide kako sam opisao u ranijim postovima. pomnoži sa 10. uzmi varijablu integer a potom podijeli sa 10 i to bi trebalo da šljaka. Meni je to radilo OK.
Re: Tip varijable za preciznost 0,1
Sa naredbom Config Single = Scientific , Digits = 2 konfiguriraš koliko decimala želiš iza točke. Ovom slučaju 2, maks. broj je 7.
Sad isprobano u BascomAVR-u.
Naravno to se primjenjuje na sve varijable tipa single
Sad isprobano u BascomAVR-u.
Naravno to se primjenjuje na sve varijable tipa single
Re: Tip varijable za preciznost 0,1
I što je najbitnije ima ga i u Bascom help-u, samo treba pročitati
Robovanje navikama je jako zeznuta stvar
Robovanje navikama je jako zeznuta stvar
Re: Tip varijable za preciznost 0,1
Razmisli o računanju u desetinama sati (1,2h = 12), pa možeš koristit cjelobrojnu varijablu, i onda samo kod ispisa stavit točku na pravo mjesto.
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
Re: Tip varijable za preciznost 0,1
Hvala na savjetu, probat cu i tako izvesti da se uvjerim da "šljaka".niho wrote:U tom slučaju postupak ide kako sam opisao u ranijim postovima. pomnoži sa 10. uzmi varijablu integer a potom podijeli sa 10 i to bi trebalo da šljaka. Meni je to radilo OK.
E, too, to sam tražio, to me zanimalo. Hvala velika.Maki wrote:Sa naredbom Config Single = Scientific , Digits = 2 konfiguriraš koliko decimala želiš iza točke. Ovom slučaju 2, maks. broj je 7.
Sad isprobano u BascomAVR-u.
Naravno to se primjenjuje na sve varijable tipa single
Isprika, znam da sve postoji u helpu, al da se on cita detaljno i pretražuje, foruma ne bi ni postojao za ovakve stvariniho wrote:I što je najbitnije ima ga i u Bascom help-u, samo treba pročitati
Robovanje navikama je jako zeznuta stvar
Re: Tip varijable za preciznost 0,1
Poštovani, radim umjeravanje termometra DS18B20. I sad za to postoji jedan mod, "mod umejeravanje". U tom modu pomoću dva tipkala T1 i T2, vršim kalibraciju senzora, tj. da pokazuje manje ili više...
E sad, programski kod mi daje cijeli i decimalni dio temperature, i to izgleda ovako:
Sad bih ja u petlji prije ispisa temperature provjeravao stanje dva tipkala, i u ovisnosti o njima povećavao/smanjivao decimalni dio (B1) temperature. U toj petlji imam pomoćnu varijablu za cijeli i decimalni dio temperature, onda bi na kraju prilikom ispisa zbrojio i ispisao „novu“ vrijednost temperature.
Izveo sam kod za povećanje iznosa B1 tj. kad je B1>10, B1=0 a W=W+1, a imam problem s smanjenjem, pogotovo kad treba ići korekcija u minus..
E sad, programski kod mi daje cijeli i decimalni dio temperature, i to izgleda ovako:
Code: Select all
W = Temp / 10
B1 = Temp Mod 10
Izveo sam kod za povećanje iznosa B1 tj. kad je B1>10, B1=0 a W=W+1, a imam problem s smanjenjem, pogotovo kad treba ići korekcija u minus..
Re: Tip varijable za preciznost 0,1
Ne bih se želio ponavljat, ali zaista razmisli o računanju u desetinama stupnja, dakle ako je temp. 10,3 neka varijabla temperature bude 103. Onda ti nije teško povećavat ili smanjivat vrijednost za 1 ili 10 (0,1 ili 1). Rezulatat za prikaz samo podijeli s 10, a koristiš cjelobrojnu varijablu!
Cezare, star sam i nemoćan, ali poslušaj moj savjet ....
Re: Tip varijable za preciznost 0,1
Poz. kukinjos, to sam mu i ja predložio na početku iako nisam znao za šta mu treba.
Stipa, razmisli i o upotrebi naredbe "fusing" za prikaz na LCD-u. Koristio sam je u svom radu digitalnog panel metra sa Atmega8 a post je objavljen ovdje. Ovdje možeš vidjeti i kako izgleda prikaz, a ako te zanima daću ti i taj dio koda koji služi za prikaz onog što se vidi na displeju. Pozz.
Stipa, razmisli i o upotrebi naredbe "fusing" za prikaz na LCD-u. Koristio sam je u svom radu digitalnog panel metra sa Atmega8 a post je objavljen ovdje. Ovdje možeš vidjeti i kako izgleda prikaz, a ako te zanima daću ti i taj dio koda koji služi za prikaz onog što se vidi na displeju. Pozz.
Re: Tip varijable za preciznost 0,1
Evo, ovako sam jednostavno izveo:
Ali ne šljaka,ne znam što je. Kad sam radio povećanje W i B1 posebno, radilo
Code: Select all
Sub Disp_temp1(cnt As Byte , Offset As Byte)
Call Meas_to_cel(offset)
Call Temp_to_decicel
Gosub Keyboard_sub
If Y = 3 Then 'tipkalo za povećanje
Incr Temp
G=G+0.1
End If
If Y = 4 Then 'tipkalo za smanjenje
Decr Temp
G = G - 0.1
End If
W = Temp / 10
B1 = Temp Mod 10
Locate 1 , 1
Lcd " Temp= " ; W ; "." ; B1 ; ; " " ; Chr(3) ; " "
Locate 2 , 1
Lcd " Korekcija= " ; G ; Chr(3) ; " "
Re: Tip varijable za preciznost 0,1
Ne radi ako se direktno želi povećati vriejdnsot varijable "Temp", već se to mora učiniti preko pomoćne. Evo i kako:
Ali mi ne radi slijedeće, tj. ne prikazuje mi se 0 kad je G=0, već neki brij -7.5E-9, ne znam zašto? G mi je iznos korekcije temperature, i njega kasnije spremam u EEPROM
Code: Select all
Dim G As Single
Config Single = Scientific , Digits = 1
Dim F As Integer
If Y = 3 Then 'tipkalo za povećanje
Incr F
G = G + 0.1
End If
If Y = 4 Then 'tipkalo za smanjenje
If G = 0.1 Then
G = 0
F = 0
Elseif G <> 0.0 Then
Decr F
G = G - 0.1
End If
End If
Temp = Temp + F
W = Temp / 10
B1 = Temp Mod 10
Locate 1 , 1
Lcd " Temp= " ; W ; "." ; B1 ; ; " " ; Chr(3) ; " "
Locate 2 , 1
Lcd " Korek= " ; G ; Chr(3) ; "
Re: Tip varijable za preciznost 0,1
Ovo je dio koda pa je teško pratiti sva zbivanja (ne znam šta ti je cnt). Prva greška je u upotrebi incr ona povećava vrijednost za 1. Šta ti radi ova sledeća linija G= G+0.1
Za ispis na lcd koristi naredbu, kako sam već rekao Lcd fusing, sintaksa bi bila sledeća:
umjesto:
ubaci:
Taster kao ulaznu vrijednost bih koristio na sledeći način:
Nadam se da ćeš se snaći. Poz.
Za ispis na lcd koristi naredbu, kako sam već rekao Lcd fusing, sintaksa bi bila sledeća:
umjesto:
Code: Select all
Lcd " Temp= " ; W ; "." ; B1 ; ; " " ; Chr(3) ; " "
Code: Select all
Lcd Fusing(W , "##.#") ; " C"
Code: Select all
Config Debounce = 20
Debounce Pind.0 , 0 , Up , Sub ' taster je na pind.0, kada je pritisnut (na logičkoj 0) idi na proceduru Up
...
Up:
incr Temp
Return
Re: Tip varijable za preciznost 0,1
Recimo samo ovako, imamo varijablu N koja se povećava/smanjuje na pritisak tipkala spojenih na pinove npr. d.0 i d.1.
I sad imamo
Debounce Pind.0 , 0 , Up , Sub
...
Up:
incr n
Return
i tako imamo i za taster priključen na pin d.1.
N dekalriram kao integer, i imam slijedeće.
kad mi je N=0, i pritisnem taster za smanjivanje, N mi iznosi 255 ????????, a treba mi -1
I sad imamo
Debounce Pind.0 , 0 , Up , Sub
...
Up:
incr n
Return
i tako imamo i za taster priključen na pin d.1.
N dekalriram kao integer, i imam slijedeće.
kad mi je N=0, i pritisnem taster za smanjivanje, N mi iznosi 255 ????????, a treba mi -1