Hallo,
nog een vraagje: hoe kan ik een variabele in picbasic casten van float naar byte? Als ik een float waarde (bijv. 3.25) in een variable van het type byte kopieer, dan krijg ik niet de gewenste 3, maar een heel andere waarde.
EdwinNadorp
Koop hier uw kristallen bol - in 2008 ga ik m'n projecten afmaken, echt waar ....... nouja in 2009 dan ..... ehh 2010 ....
Volgens mij gaat dat niet.
Ik zag toevallig vandaag wel een cursus stukje staan over de decimaal punt op picbasic.nl
Misschien heb je daar wat aan.
http://www.picbasic.nl/frameload_nl.htm?http://www.picbasic.nl/beginne…
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Moest C zoiets niet hebben, zou ik dit doen:
unsigned char cast(float x)
{
unsigned char y = 0;
while (x > 1.0) {
y++;
x -= 1.0;
}
return (y);
}
// ...
unsigned char a = cast(3.25);
Dat moet toch te vertalen zijn naar die rare picbasic?
timmie
niet met me uitspraken(of opmerkingen) eens mail me.K8048 guide
Probleemloos ondanks het ontbreken van lokale variabelen.
Maar ik lees net in de manual dat FP's automagisch naar integer gecast wordt:
DIM Test as FLOAT
DIM Test2 as BYTE
Test=3.14
Test2=Test
' Test2=3
Print DEC Test2
Foutje van de TS of een bug?
Op 2 april 2007 22:38:25 schreef Henry S.:
Probleemloos ondanks het ontbreken van lokale variabelen.Maar ik lees net in de manual dat FP's automagisch naar integer gecast wordt:
DIM Test as FLOAT DIM Test2 as BYTE Test=3.14 Test2=Test ' Test2=3 Print DEC Test2Foutje van de TS of een bug?
Foutje van de programmeur dus: Float wordt idd prima gecast naar byte, maar ik had voor het afdrukken op de LCD het scherm niet op de juiste plaats schoongemaakt, zodat een deel van de vorige waarde bleef staan.
Ik vraag me overigens wel af hoe ik in mijn code het gebruik van floats kan vermijden. Ik wil de analoge spanning (0..5v) die ik met een 16F877 meet, omgezet hebben naar een byte met waarde 0..250. Nu doe ik dat zo (en het werkt goed nu):
CLS
PRINT AT 1, 1, "Spanning:"
PRINT AT 2, 1, "Als byte: "
Again:
Waarde = ADIN 0
Waarde = (waarde * 5) / 1023
DELAYMS 200
PRINT AT 1, 11," "
PRINT AT 1, 11, DEC2 Waarde, " V"
Index = Waarde * 50
PRINT AT 2, 11," "
PRINT AT 2, 11, DEC Index
GOTO Again
Waarde is hier een float, en Index een byte. Kun je ditzelfde doen zonder een float variabele?
Bedankt voor jullie reacties, en vrolijk Pasen !!!
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Als dat een 10-bits ADC is, met een referentiespanning van 5V, komt 1023 overeen met 5000mV. Maar als je met een 16-bits integer werkt, kan je daar 50000 van maken. een ADC-waarde van 1 komt dan overeen met (50000 / 1023) = 48.875 = 49.
Al wat je dus moet doen, is je ADC-waarde vermenigvuldigen met 49 en vervolgens delen door 10 om de spanning in mV te bekomen. De afwijking bedraagt dan 0.25%. Geen floats vandoen...