Zelim da napisem program koji bi pamtio odnosno ucio pokrete koje bi zadavao preko tastera. Radi se o robot ruci, koja ima cetiri motora. Program imam u QBasic-u koji omogucava pamcenje duzine pritisnutog tastera za odredjeni motor. Nakon zadavanja putanje za sva cetiri motora, program omogucava da robot samostalno ponovi zapamcenu putanju. Kako to odraditi u VBasic-u. Da li neko ima ideju.
Upravljanje DC motorima
Zaključano
Zakačeno
Moguće je i imam ideju, tačnije znam i kako. 
Počni da radiš pa gde zapne, pomoćićemo...
Počni da radiš pa gde zapne, pomoćićemo...
Verzije basica(Microsoft) idu ovako: gwbasic, qbasic, visual basic, vb.net. Prema tome bez problema mozes ucitati taj tvoj program u visual basic vb6 i uz sitne korekcije program ce odmah raditi.
Potpis
rgdrajko
Rajko ne slažem se sa tobom.
Visual Basic 6 je object oriented, event driven, programski jezik za windows platformu (osim verzije 1.0), dok je QBasic proceduralno orijentisan i sasvim drugačije koncipiran (OS: DOS).
Program, koji pod QBasic-om može da očitava pritisnute tastere:
kod Visual Basic-a, imamo event Object_KeyDown ili Object_KeyPress na čije se dešavanje izvršava određeni podprogram:
VB nema ugrađenu GFX biblioteku kao QBasic, tako da bi se i deo programa koji daje bilo kakav grafički prikaz morao prepraviti.
Sama komunikacija sa uređajem bi verovatno morala biti odrađena drugačije u Visual Basic-u.
U QBasicu može da se koristi:
ali je to pod Visual Basic-om jako ne preporučljivo, iz prostog razloga što je teško kontrolisati komunikaciju, i "vrebati" trenutak kada se očekuje da stignu podaci. Alternativa je MSComm ili API pozivi, koji ne postoje u QBasicu, što znači još puno ispravki u ovom delu.
Ovo što sam naveo samo samo neki od razloga zašto bi program morao "malo više" da se prepravi da bi bio uspešno izvršen pod Visual Basic Runtime-om. Ukoliko sam nešto propustio i zabrljao ne zamerite, pišem posle malo alkohola i bančenja, tako da je ovo skoro sve što mi je palo na pamet, a siguran sam da sam još 10 stvari zaboravio...
Ukoliko je potrebno da se program uz što manje prepravki "natera" da radi kao Windows ili Linux aplikacija toplo preporučujem FreeBASIC.
Visual Basic 6 je object oriented, event driven, programski jezik za windows platformu (osim verzije 1.0), dok je QBasic proceduralno orijentisan i sasvim drugačije koncipiran (OS: DOS).
Program, koji pod QBasic-om može da očitava pritisnute tastere:
Code:
Do While Not [uslov]
key = Inkey$
...
Loop
Do While Not [uslov]
key = Inkey$
...
Loop
kod Visual Basic-a, imamo event Object_KeyDown ili Object_KeyPress na čije se dešavanje izvršava određeni podprogram:
Code:
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
...
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
...
End Sub
VB nema ugrađenu GFX biblioteku kao QBasic, tako da bi se i deo programa koji daje bilo kakav grafički prikaz morao prepraviti.
Sama komunikacija sa uređajem bi verovatno morala biti odrađena drugačije u Visual Basic-u.
U QBasicu može da se koristi:
Code:
Open "Com1" For xxxx as xx
...
Close
Open "Com1" For xxxx as xx
...
Close
ali je to pod Visual Basic-om jako ne preporučljivo, iz prostog razloga što je teško kontrolisati komunikaciju, i "vrebati" trenutak kada se očekuje da stignu podaci. Alternativa je MSComm ili API pozivi, koji ne postoje u QBasicu, što znači još puno ispravki u ovom delu.
Ovo što sam naveo samo samo neki od razloga zašto bi program morao "malo više" da se prepravi da bi bio uspešno izvršen pod Visual Basic Runtime-om. Ukoliko sam nešto propustio i zabrljao ne zamerite, pišem posle malo alkohola i bančenja, tako da je ovo skoro sve što mi je palo na pamet, a siguran sam da sam još 10 stvari zaboravio...
Ukoliko je potrebno da se program uz što manje prepravki "natera" da radi kao Windows ili Linux aplikacija toplo preporučujem FreeBASIC.
Nisi u pravu, Qbasic je nizi od VB6 ali potpuno kompatibilan jer je vb6 nastao iz Qbasica i uz odredjene sitne logicke ispravke svaki Qbasic program ce raditi u VB6.
Probaj ako poznajes dobro oba jezika da Qbasc izvrsis na VB6, pri tome ces morati da prilagodis staru logiku Qbasica logici VB6 za neke komande. To prilagodjavanje je lako i brzo ako dobro poznajes oba ta jezika.
Nakon toga kada program proradi onda bi trebalo taj isti program napisati kao objektni program ispocetka na osnovu iskustava u vezi te problematike koje si stekao u Qbasic programu.
Mozda je ova ispravka teska za one koji slabo poznaju oba jezika.
Probaj ako poznajes dobro oba jezika da Qbasc izvrsis na VB6, pri tome ces morati da prilagodis staru logiku Qbasica logici VB6 za neke komande. To prilagodjavanje je lako i brzo ako dobro poznajes oba ta jezika.
Nakon toga kada program proradi onda bi trebalo taj isti program napisati kao objektni program ispocetka na osnovu iskustava u vezi te problematike koje si stekao u Qbasic programu.
Mozda je ova ispravka teska za one koji slabo poznaju oba jezika.
Potpis
rgdrajko
izmenjeno 1 put, poslednji put stefanpn 04.03.2009. u 20:17
Izmene poruke
- stefanpn04.03.2009. u 20:17zapis iz teksta poruke
Kojim slučajem poznajem oba programska jezika i to vrlo, vrlo dobro. Uzmi iole komplikovaniji QBasic program i probaj da ga nateras da se izvrši kao VB program videćeš šta ti govorim.
Visual Basic je nastao pod uticajem QBasic-a, ne i iz njega... Možda je ta kompatibilnost bila veća u verziji Visual Basic 1.0 ali se to sa novijim verzijama promenilo.
Nibbles.bas
Pošto je to tako lako, zašto ne bi prepravio ovo za nas, kao mali sam mnogo voleo da igram ovu igricu, čak sam je i prepravljao malo kad mi originalna verzija dosadi.
Uvidećeš da je prevođenje ovog koda u VB6 kod zahtevno i shvatićeš o čemu ti pričam.
BTW. Prevođenje je sasvim moguće! Ali ćeš to brže prevesti u C nego u Visual Basic.
Edit: izbrisan program i smešten u attachment.
Visual Basic je nastao pod uticajem QBasic-a, ne i iz njega... Možda je ta kompatibilnost bila veća u verziji Visual Basic 1.0 ali se to sa novijim verzijama promenilo.
Nibbles.bas
Pošto je to tako lako, zašto ne bi prepravio ovo za nas, kao mali sam mnogo voleo da igram ovu igricu, čak sam je i prepravljao malo kad mi originalna verzija dosadi.
Uvidećeš da je prevođenje ovog koda u VB6 kod zahtevno i shvatićeš o čemu ti pričam.
BTW. Prevođenje je sasvim moguće! Ali ćeš to brže prevesti u C nego u Visual Basic.
Edit: izbrisan program i smešten u attachment.
Mislim da bi bilo najlakse da se ovo prevede u FreeBasic ... a i inace u vezi ove teme , mozda bi taj QBasic program bilo bolje prevesti u FreeBasic nego u VB6, ako FreeBasic ima neku ugradjenu podrsku za comm portove.
Potpis
HomePage http://www.eurora3d.com
Citat:
Ma nije problem da to uradim, samo trenutno nemam vremena. Mozda bi bilo najbolje kada bih uradio konvertor fajlova iz Qbasica u VB6.
Potpis
rgdrajko
Ne bih da budem nepristojan i započinjem raspravku.
Ali nisam ja ni rekao da je problem da se to uradi već da nije tako jednostavno kao što si ti misliš.
Ovo je potpuno netačna izjava.
QBasic je jezik "viskokog nivoa" kao i Visual Basic. Ako misliš na to da je QBasic niži samo zato što je stariji onda nisi u pravu.
Pogledaj o čemu ti govorim: ovde.
QBasic i Visual Basic NISU KOMPATIBILNI!!!
Visual Basic 6 je object oriented, event driven, programski jezik za windows platformu (osim verzije 1.0), dok je QBasic proceduralno orijentisan, ne struktuiran programski jezik za DOS platformu.
Super, uradi to! Proslavićeš se.
Ali nisam ja ni rekao da je problem da se to uradi već da nije tako jednostavno kao što si ti misliš.
Citat:
rgdrajko: ...Qbasic je nizi od VB6 ali potpuno kompatibilan jer je vb6 nastao iz Qbasica...
Ovo je potpuno netačna izjava.
QBasic je jezik "viskokog nivoa" kao i Visual Basic. Ako misliš na to da je QBasic niži samo zato što je stariji onda nisi u pravu.
Pogledaj o čemu ti govorim: ovde.
QBasic i Visual Basic NISU KOMPATIBILNI!!!
Visual Basic 6 je object oriented, event driven, programski jezik za windows platformu (osim verzije 1.0), dok je QBasic proceduralno orijentisan, ne struktuiran programski jezik za DOS platformu.
Citat:
rgdrajko: Mozda bi bilo najbolje kada bih uradio konvertor fajlova iz Qbasica u VB6.
Super, uradi to! Proslavićeš se.
Nemoj da se nerviras 
Pogotovo ne zbog Rajka
Pogotovo ne zbog Rajka
Ja bih, takodje, jako voleo da vidim QBasic -> VB6 konvertor, a znajuci Rajka i njegovo 50-godisnje iskustvo u programiranju (ukljucujuci tu i verzije qbasica koje su postojale pre nastanka majkrosofta) ja verujem da je on jedini covek kome bi to poslo za rukom.
Zato, Rajko imas od mene punu (nazalost, samo moralnu) podrsku za taj poduhvat.
@stefanpn: ako te ne mrzi, molim te sacuvaj onaj qbasic kod kao fajl i uploaduj ga uz poruku a onaj kod izbaci iz poruke. ovako je tema bespotrebno teska za citanje...
Zato, Rajko imas od mene punu (nazalost, samo moralnu) podrsku za taj poduhvat.
@stefanpn: ako te ne mrzi, molim te sacuvaj onaj qbasic kod kao fajl i uploaduj ga uz poruku a onaj kod izbaci iz poruke. ovako je tema bespotrebno teska za citanje...
Zanimljivo, moderatori su se konacno pojavili, mada ih danima nisam video ni u jednoj temi. Hvala bogu, zivi ste.
Potpis
rgdrajko
Citat:
Aleksandar Ružičić: ... a znajuci Rajka i njegovo 50-godisnje iskustvo u programiranju
Zbog ovakvih uvreda sam vec jednom otisao sa foruma pa zbog njih idem i sada.
Smatram da moderatori ne bi trebalo da vredjaju i ponizavaju clanove ovog foruma.
Leci se covece, leci te svoje komplekse i nacuci se da budes lepo vaspitan.
Potpis
rgdrajko
Rajko, ja nisam moderator ali ti stvarno nisi u pravu sto se tice ovoga. Kad si uvideo da si pogresio mogao si lepo da priznas a ne da odmah menjas temu na to kako te moderatori maltretiraju.
BTW: Mogao bi sav ovaj off-topic da se obrise...
BTW: Mogao bi sav ovaj off-topic da se obrise...
haha... e dugo si i traj'o ovaj put.
I da, bice da si vec dva puta odlazio, ovo je treci :)
I da, bice da si vec dva puta odlazio, ovo je treci :)
Potpis
SELECT * FROM หน่วยงานหลัก WHERE ยสันติ LIKE 'โดย%'
ih Rajko, pa sto si se uvredio? Ako sam omasio za koju godinu ja ti se evo iskreno izvinjavam, nisam namerno. A ako nije istina da imas visedecenijsko iskustvo onda si sam kriv, jer si se istim dicio ovde nebrojeno puta.
izmenjeno 1 put, poslednji put Aleksandar Ružičić 08.03.2009. u 23:40
Izmene poruke
- Aleksandar Ružičić08.03.2009. u 23:40zapis iz teksta poruke
O cemu ovde vi pricate. Nemojte se prepucavati ovde nego pomazite svojim idejama. Normalno je da neke stvari iz QBasic-a mogu da rade i da ima slicnosti sa VBasic-om, ali iole ozbiljniji kod zahteva kompletnu promenu. Evo kod u QBasic-u:
Mene zanima kako da resim u VB da pamti koliko sam drzao pritisnut taster za odredjenu kretnju.
Code:
Dim a(1000, 2)
Do
Cls
izlaz = 888: ' ili 956
x = 1
l = 19
GoSub okvir
GoSub okvir2
x = 25
l = 21
GoSub okvir
GoSub okvir2
x = 50
l = 21
GoSub okvir
GoSub okvir2
GoSub legenda
x = 25
GoSub radi
x = 50
GoSub ponavlja
Loop
End
' ---------------------------------------------------------------
legenda:
y = 6
LOCATE 3, 5: Print "R O B O T"
LOCATE y + 3, 3: Print "2 = natrag"
LOCATE y + 5, 3: Print "8 = napred"
LOCATE y + 7, 3: Print "6 = okret levo"
LOCATE y + 9, 3: Print "4 = okret desno"
LOCATE y + 11, 3: Print "5 = stoj"
LOCATE y + 13, 3: Print "0 = prekid ucenja"
LOCATE y + 15, 5: Print "ESC = izlaz"
LOCATE 3, 35: Print "UCI"
LOCATE 3, 58: Print "PONAVLJA"
LOCATE y + 7, 27: Print "Korak :"
LOCATE y + 9, 27: Print "Izlaz:"
LOCATE y + 11, 27: Print "Vreme:"
LOCATE y + 13, 27: Print "Trajanje:"
LOCATE y + 7, 52: Print "Korak :"
LOCATE y + 9, 52: Print "Izlaz:"
LOCATE y + 11, 52: Print "Vreme:"
LOCATE y + 13, 52: Print "Trajanje:"
Return
' --------------------------------------------------------------
okvir:
y = 7
lin$ = "": raz$ = ""
For i = 1 To l
lin$ = lin$ + Chr$(205)
raz$ = raz$ + Chr$(32)
Next i
up$ = Chr$(201) + lin$ + Chr$(187)
dn$ = Chr$(200) + lin$ + Chr$(188)
vt$ = Chr$(186)
LOCATE y, x: Print up$
For i = 1 To 15
LOCATE y + i, x: Print vt$ + raz$ + vt$
Next i
LOCATE y + 16, x: Print dn$
Return
' ---------------------------------------------------------------
okvir2:
y = 1
lin$ = "": raz$ = ""
For i = 1 To l
lin$ = lin$ + Chr$(205)
raz$ = raz$ + Chr$(32)
Next i
up$ = Chr$(201) + lin$ + Chr$(187)
dn$ = Chr$(200) + lin$ + Chr$(188)
vt$ = Chr$(186)
LOCATE y, x: Print up$
For i = 1 To j + 3
LOCATE y + i, x: Print vt$ + raz$ + vt$
Next i
LOCATE y + 4, x: Print dn$
Return
' ---------------------------------------------------------------
radi:
LOCATE 9, 27: Print "START"
LOCATE 11, 27: Print "Bilo koja tipka."
q$ = INPUT$(1)
y = 7
a(0, 1) = 0
a(0, 2) = 0
OUT izlaz, 0
t0 = Timer
i = 1
Do
q$ = INPUT$(1)
If q$ = "8" Then w = 10
If q$ = "2" Then w = 5
If q$ = "6" Then w = 6
If q$ = "4" Then w = 9
If q$ = "5" Then w = 0
If q$ = "0" Then Exit Do
If Asc(q$) = 27 Then End
a(i, 1) = w
a(i, 2) = Timer - t0
OUT izlaz, w
LOCATE 6 + y, x + 15: Print USING; "###"; i
LOCATE 8 + y, x + 15: Print USING; "###"; a(i, 1)
LOCATE 10 + y, x + 15: Print USING; "###.##"; a(i, 2)
LOCATE 12 + y, x + 15: Print USING; "###.##"; a(i, 2) - a(i - 1, 2)
i = i + 1
Loop
OUT izlaz, 0
a(i, 1) = 0
a(i, 2) = Timer - t0
n = i - 1
Return
' --------------------------------------------------------------
ponavlja:
LOCATE 9, 52: Print "START"
LOCATE 11, 52: Print "Bilo koja tipka."
q$ = INPUT$(1)
y = 7
t0 = Timer
For i = 0 To n
t1 = Timer
LOCATE 6 + y, x + 15: Print USING; "###"; i
LOCATE 8 + y, x + 15: Print USING; "###"; a(i, 1)
LOCATE 10 + y, x + 15: Print USING; "###.##"; a(i, 2)
Do
OUT izlaz, a(i, 1)
If Timer - t0 >= a(i + 1, 2) Then Exit Do
Loop
LOCATE 12 + y, x + 15: Print USING; "###.##"; Timer - t1
Next i
OUT izlaz, 0
Return
Dim a(1000, 2)
Do
Cls
izlaz = 888: ' ili 956
x = 1
l = 19
GoSub okvir
GoSub okvir2
x = 25
l = 21
GoSub okvir
GoSub okvir2
x = 50
l = 21
GoSub okvir
GoSub okvir2
GoSub legenda
x = 25
GoSub radi
x = 50
GoSub ponavlja
Loop
End
' ---------------------------------------------------------------
legenda:
y = 6
LOCATE 3, 5: Print "R O B O T"
LOCATE y + 3, 3: Print "2 = natrag"
LOCATE y + 5, 3: Print "8 = napred"
LOCATE y + 7, 3: Print "6 = okret levo"
LOCATE y + 9, 3: Print "4 = okret desno"
LOCATE y + 11, 3: Print "5 = stoj"
LOCATE y + 13, 3: Print "0 = prekid ucenja"
LOCATE y + 15, 5: Print "ESC = izlaz"
LOCATE 3, 35: Print "UCI"
LOCATE 3, 58: Print "PONAVLJA"
LOCATE y + 7, 27: Print "Korak :"
LOCATE y + 9, 27: Print "Izlaz:"
LOCATE y + 11, 27: Print "Vreme:"
LOCATE y + 13, 27: Print "Trajanje:"
LOCATE y + 7, 52: Print "Korak :"
LOCATE y + 9, 52: Print "Izlaz:"
LOCATE y + 11, 52: Print "Vreme:"
LOCATE y + 13, 52: Print "Trajanje:"
Return
' --------------------------------------------------------------
okvir:
y = 7
lin$ = "": raz$ = ""
For i = 1 To l
lin$ = lin$ + Chr$(205)
raz$ = raz$ + Chr$(32)
Next i
up$ = Chr$(201) + lin$ + Chr$(187)
dn$ = Chr$(200) + lin$ + Chr$(188)
vt$ = Chr$(186)
LOCATE y, x: Print up$
For i = 1 To 15
LOCATE y + i, x: Print vt$ + raz$ + vt$
Next i
LOCATE y + 16, x: Print dn$
Return
' ---------------------------------------------------------------
okvir2:
y = 1
lin$ = "": raz$ = ""
For i = 1 To l
lin$ = lin$ + Chr$(205)
raz$ = raz$ + Chr$(32)
Next i
up$ = Chr$(201) + lin$ + Chr$(187)
dn$ = Chr$(200) + lin$ + Chr$(188)
vt$ = Chr$(186)
LOCATE y, x: Print up$
For i = 1 To j + 3
LOCATE y + i, x: Print vt$ + raz$ + vt$
Next i
LOCATE y + 4, x: Print dn$
Return
' ---------------------------------------------------------------
radi:
LOCATE 9, 27: Print "START"
LOCATE 11, 27: Print "Bilo koja tipka."
q$ = INPUT$(1)
y = 7
a(0, 1) = 0
a(0, 2) = 0
OUT izlaz, 0
t0 = Timer
i = 1
Do
q$ = INPUT$(1)
If q$ = "8" Then w = 10
If q$ = "2" Then w = 5
If q$ = "6" Then w = 6
If q$ = "4" Then w = 9
If q$ = "5" Then w = 0
If q$ = "0" Then Exit Do
If Asc(q$) = 27 Then End
a(i, 1) = w
a(i, 2) = Timer - t0
OUT izlaz, w
LOCATE 6 + y, x + 15: Print USING; "###"; i
LOCATE 8 + y, x + 15: Print USING; "###"; a(i, 1)
LOCATE 10 + y, x + 15: Print USING; "###.##"; a(i, 2)
LOCATE 12 + y, x + 15: Print USING; "###.##"; a(i, 2) - a(i - 1, 2)
i = i + 1
Loop
OUT izlaz, 0
a(i, 1) = 0
a(i, 2) = Timer - t0
n = i - 1
Return
' --------------------------------------------------------------
ponavlja:
LOCATE 9, 52: Print "START"
LOCATE 11, 52: Print "Bilo koja tipka."
q$ = INPUT$(1)
y = 7
t0 = Timer
For i = 0 To n
t1 = Timer
LOCATE 6 + y, x + 15: Print USING; "###"; i
LOCATE 8 + y, x + 15: Print USING; "###"; a(i, 1)
LOCATE 10 + y, x + 15: Print USING; "###.##"; a(i, 2)
Do
OUT izlaz, a(i, 1)
If Timer - t0 >= a(i + 1, 2) Then Exit Do
Loop
LOCATE 12 + y, x + 15: Print USING; "###.##"; Timer - t1
Next i
OUT izlaz, 0
Return
Mene zanima kako da resim u VB da pamti koliko sam drzao pritisnut taster za odredjenu kretnju.
1. na KeyDown zapamtis trenutno vreme (u milisekundama ti je najbolje) u neku globalnu promenljivu
2. na KeyUp od trenutnog vremena oduzmes vreme koje ti se nalazi u globalnoj promenljivoj i ta razlika ti je mera koliko dugo je taster bio pritisnut
2. na KeyUp od trenutnog vremena oduzmes vreme koje ti se nalazi u globalnoj promenljivoj i ta razlika ti je mera koliko dugo je taster bio pritisnut
Video sam na internetu i skino sam fajl koji omogucava kodu pisanom u QBasic-u, na racunaru koji radi pod XP-om, da pristupa paralelnom portu, ali vezija koju sam ubacio na racunar je ogranicena tako da radi otprilike samo desetak minuta, pa onda opet mora racunar da se restartuje. Verzija mora da se plati. Da li zna neko nesto slicno i gde moze da se skine. Mislim da se zove DOSLpt ili tako nesto.