Eléggé kezdő vagyok, és megakadtam egy problémánál. Adott egy program ami soros porton fogadja az adatokat egy GPS vevőtől, és némi szűrés után LCD-re írja. Ezzel eddig semmi probléma nincs, nagyon szépen működik, de a GPS a sebesség adatot csomó/órában küldi. Tudom hogy létezik olyan gps szentencia ami tartalmazza km/h-ban is, de az adott modul nem küld ilyet. A GPS által küldött adatot stringben tárolom, kényelmes megoldás. Ebből kellene a sebességadatot kiszedni, és megszorozni 1.852-vel. Ugye a string-szám átalakításra van a VAL parancs. De ha a VAL-t úgy használom, hogy single típusú a cél ( hogy meglegyenek a tizedesjegyek is ), akkor valami elképesztően sok flash-t használna fel, egyszerűen nem fér bele a 2313-ba. Eddig a programmal 70%-on van, de ha csak beillesztem azt az egy val parancsot akkor rögtön kb. 126% lesz. Hogyan lehetne megkerülni, hogyan lehetne máshogy csinálni ? Bonyolítja a dolgot, hogy abban a 5 karakteres stringben amiben a sebesség van, az értéktől függően a tizedespont 3 helyen is lehet. ( Tehát pl. 0.000, 10.20, vagy 100.1 ) Van valakinek ötlete ? Nem szeretnék emiatt nagyobb kontrollert, már csak azért sem mert ez elsősorban csak egy teszt. Kinek van ötlete ami belefér a 30%-ba ?
Stringből szám.
Stringből szám.
Halihó !
Eléggé kezdő vagyok, és megakadtam egy problémánál. Adott egy program ami soros porton fogadja az adatokat egy GPS vevőtől, és némi szűrés után LCD-re írja. Ezzel eddig semmi probléma nincs, nagyon szépen működik, de a GPS a sebesség adatot csomó/órában küldi. Tudom hogy létezik olyan gps szentencia ami tartalmazza km/h-ban is, de az adott modul nem küld ilyet. A GPS által küldött adatot stringben tárolom, kényelmes megoldás. Ebből kellene a sebességadatot kiszedni, és megszorozni 1.852-vel. Ugye a string-szám átalakításra van a VAL parancs. De ha a VAL-t úgy használom, hogy single típusú a cél ( hogy meglegyenek a tizedesjegyek is ), akkor valami elképesztően sok flash-t használna fel, egyszerűen nem fér bele a 2313-ba. Eddig a programmal 70%-on van, de ha csak beillesztem azt az egy val parancsot akkor rögtön kb. 126% lesz. Hogyan lehetne megkerülni, hogyan lehetne máshogy csinálni ? Bonyolítja a dolgot, hogy abban a 5 karakteres stringben amiben a sebesség van, az értéktől függően a tizedespont 3 helyen is lehet. ( Tehát pl. 0.000, 10.20, vagy 100.1 ) Van valakinek ötlete ? Nem szeretnék emiatt nagyobb kontrollert, már csak azért sem mert ez elsősorban csak egy teszt. Kinek van ötlete ami belefér a 30%-ba ?
Eléggé kezdő vagyok, és megakadtam egy problémánál. Adott egy program ami soros porton fogadja az adatokat egy GPS vevőtől, és némi szűrés után LCD-re írja. Ezzel eddig semmi probléma nincs, nagyon szépen működik, de a GPS a sebesség adatot csomó/órában küldi. Tudom hogy létezik olyan gps szentencia ami tartalmazza km/h-ban is, de az adott modul nem küld ilyet. A GPS által küldött adatot stringben tárolom, kényelmes megoldás. Ebből kellene a sebességadatot kiszedni, és megszorozni 1.852-vel. Ugye a string-szám átalakításra van a VAL parancs. De ha a VAL-t úgy használom, hogy single típusú a cél ( hogy meglegyenek a tizedesjegyek is ), akkor valami elképesztően sok flash-t használna fel, egyszerűen nem fér bele a 2313-ba. Eddig a programmal 70%-on van, de ha csak beillesztem azt az egy val parancsot akkor rögtön kb. 126% lesz. Hogyan lehetne megkerülni, hogyan lehetne máshogy csinálni ? Bonyolítja a dolgot, hogy abban a 5 karakteres stringben amiben a sebesség van, az értéktől függően a tizedespont 3 helyen is lehet. ( Tehát pl. 0.000, 10.20, vagy 100.1 ) Van valakinek ötlete ? Nem szeretnék emiatt nagyobb kontrollert, már csak azért sem mert ez elsősorban csak egy teszt. Kinek van ötlete ami belefér a 30%-ba ?
Nem tudom, hogy kevesebb memóriát eszik-e meg, de próbáld meg a következőt:
Kerekítsd a számot! Ezt eltárolod LONG-ként, megszorzod 1852-vel, visszaalakítod string-e, és úgy formázod, hogy visszafele a 3. karakter elé rakod a tizedes pontot! Szerintem valami ilyesmiben kellene gondolkodnod! Még azzal is spórolhatsz (persze a pontosság rovására), hogy csak 1,85-nek veszed a szorzót! Így még 1km/órán belül lesz az eltérés! Ekkor elfér WORD-ben is a változó, amivel további memóriát spórolsz meg!
Tegyük fel, hogy a kapott sebesség 60.5 mp/h amit kerekítesz a számoláshoz 61-re! A szorzót meg csak 1,85-nek veszed! Ekkor a kiszámolt sebesség 112,85 km/h a tényleges pedig 112,046 km/h! Szerintem ennyi tévedést megér, hogy beleférjen a csip-be! Vagy nem?
Kerekítsd a számot! Ezt eltárolod LONG-ként, megszorzod 1852-vel, visszaalakítod string-e, és úgy formázod, hogy visszafele a 3. karakter elé rakod a tizedes pontot! Szerintem valami ilyesmiben kellene gondolkodnod! Még azzal is spórolhatsz (persze a pontosság rovására), hogy csak 1,85-nek veszed a szorzót! Így még 1km/órán belül lesz az eltérés! Ekkor elfér WORD-ben is a változó, amivel további memóriát spórolsz meg!
Tegyük fel, hogy a kapott sebesség 60.5 mp/h amit kerekítesz a számoláshoz 61-re! A szorzót meg csak 1,85-nek veszed! Ekkor a kiszámolt sebesség 112,85 km/h a tényleges pedig 112,046 km/h! Szerintem ennyi tévedést megér, hogy beleférjen a csip-be! Vagy nem?
Kód: Egész kijelölése
Dim A As String * 8
Dim B As Long
Dim Bcount As Byte
Dim Szam(2) As String * 5
Dim Nagyertek As Long
Dim Kisertek As Long
Dim Temp1long As Long
'A = "1.345"
Bcount = Split(a , Szam(1) , ".") 'ponttal szetszabom
'szam(1)-egesz
'szam(2)-tizedes
Nagyertek = Val(szam(1)) 'egeszresz
'Select Case Len(szam(2))
' Case 1
Bcount = Len(szam(2)) 'tizedesertekek szamjegye
'mert: 1 tizedes, akkor a tizedesresz:0,10000
'mert: 2 tizedes, akkor a tizedesresz:0,12000
'mert: 3 tizedes, akkot a tizedesresz:0,12300
Bcount = 5 - Bcount 'hany nulla kell utana
Szam(2) = Szam(1) + String(bcount , 48) 'nullak utanairasa
Kisertek = Val(szam(2)) 'Ez a tizedek, nullaval kiegeszitve a vegen
Nagyertek = Nagyertek * 10000
Nagyertek = Nagyertek + Kisertek
Nagyertek = Nagyertek * 1385
'kiirnagy=nagyertek/10000 ->egeszek
'temp=nagyerek*1000
'kiirkicsi=nagyertek-temp->tizedek
'lcd kiir;".";kiirtemp
Valahogy így lehetne bűvölni. De ez is eléggé necces....
Köszönöm az ötleteket !
Az adatokat a lehető legpontosabban akarom kezelni, nem nagyon akarok sokat kerekíteni, fontos a pontosság. De alapvetően az egész programot csak gyakorlásképpen írtam, hogy a soros port, lcd és a stringek kezelésével bíbelődjek, így nem probléma ha nem tudom szépen megoldani.
Ha végül mégis építek belőle készüléket akkor max. áttérek valami megára.
Sajnos Róbert megoldása nem fér el, ennyi változó már nem fér el az sram-ban, az szinte csurig van.
Mindenesetre köszi az ötleteket, még agyalok én is.
Az adatokat a lehető legpontosabban akarom kezelni, nem nagyon akarok sokat kerekíteni, fontos a pontosság. De alapvetően az egész programot csak gyakorlásképpen írtam, hogy a soros port, lcd és a stringek kezelésével bíbelődjek, így nem probléma ha nem tudom szépen megoldani.
Sajnos Róbert megoldása nem fér el, ennyi változó már nem fér el az sram-ban, az szinte csurig van.
Mindenesetre köszi az ötleteket, még agyalok én is.