No Decimals

So I'm testing my ultrasonic sensor for mmy turret and I have run across a problem. This is that there are only 27 word (w0,w1,w2) varriables. So I have to use byte variables (b0,b1,b2). The ultrasonic read the range into a word variable, so then I have to convert this big number down to the size that can fit into a byte. So I used division. b0 = w0 / 100. Then I ran into another problem. The Picaxe takes the next varriable b1 to fill it up with the deciaml place. So 19.24 would be b0=19 and b1 = 2. Now I don't want this because I need to use b2 and I need all those 50 varriables. Is there a way to get rid of the deciaml places.

Picaxes don’t do decimals

b0=w0/100 --No go

W0 is made up of b0 and b1. If you are using w0 as a variable, you can’t also use b0 or b1. Manual 1, page 10.

And the fact that picaxes don’t do floating point… Manual 1, page 20.

Yup no floating point. I

Yup no floating point. I would not know how that feels muhahah!! (rubs arduino). 

That’s nuthin’…

You should try to work without negitive numbers sometime!

 

BTW Tofu–

When I said that w0=b0 and b1, I mean that all of the word and byte variables are the same. You can have b0-b54  --or--  w0-w27 not both. Not both because they are the same thing.

Then how can I make bytes

Then how can I make bytes hold big numbers from my ultrasonic sensor. because I know it goes over 300. but it stops somewhere at 200 something.

convert.

Yes, bytes stop at 200 something. You will need to convert. I personally would avoid converting back into 1/2 of your word variable. I.e. let b0=w0/100. You can do this --you already did and got the result you wanted… b0=19 which is your answer, rounded down. However, and this just might be my personal preference but I don’t like reusing variables if I can avoid it and can’t imagine when I would reuse only one byte out of a word. I would rather use let b2=w0/100 to keep things tidy.

 

One more.

If you find out the max distance that the sonar is really going to need, you can use min max as it comes in to establish a ceiling on the word variable. Now you can convert this number to 255 (the upper limit of your byte) to keep the highest resolution you can without the fear of a byte overflow after conversion.

sample code perhaps?

readadc10 0, w0 ; the value now occupies b1:b0 so don’t use those anymore
pulsin 0, 1, w0   ; different way of filling w0 with a 16 bit value

b2 = w0 / 256 ; this gives you the most important half of the word in a single byte
b2 = w0 >> 8 ; this is a fancy way of writing w0 / 256
b2 = b1         ; this also gives you the most important half of the word in a single byte

;feel free to use b0 and b1 (or w0) for something else after this

Storage

Oddbot mentioned peek and poke, however there is a ton of places to put data. You can preload data using the table command. You can make other tables using the lookup and lookdown commands. There is put and get to read and write to the scratch pad and of course, there is internal and external eeproms. If that is not enough, you can slave a picaxe to be an external eeprom via i2c as well.