Negative value for accelerometer
*Sorry if i post at the wrong section, i can't delete this post so I reused it to not double post.*
Hi i'm working with the MXD2125 acc and I trying to program it to drive the motor's PWM.
Anyway, take a look at my codes. I found this code as a base and editted it to suit my goal.
As you can see, I am now focusing on the X axis of the acc. I'll put Y axis at a later stage.
What i am trying to achieve is to set the backward axis to a negative value.
The reason for wanting that is because I can set the if..else command to control the motor.
Any kind of codes would be greatly appreciated.
P.S Can somebody try the code above to see if the scaling is right? Mines reading 28+- degrees when placed on the table.
Post Edited (SteelHeart) : 5/31/2010 4:55:08 PM GMT
Hi i'm working with the MXD2125 acc and I trying to program it to drive the motor's PWM.
Anyway, take a look at my codes. I found this code as a base and editted it to suit my goal.
CON ''General Constants for Propeller Setup
_CLKMODE = XTAL1 + PLL16X
_XINFREQ = 5_000_000
xin = 17
yin = 16
period = 16665 ' number of microseconds for 60Hz frequency of pulses
apin = 13 ' output pin for motor a - left motor
bpin = 14 ' output pin for motor b - right motor
memsic_mid = 400_000 ' middle of memsic range
memsic_range = 300 ' range reading divided by 100 to produce percentage
angle_set = 0
maxmemsic = 255 ' maximum possible reading from memsic
OBJ ''Setup Object references that make this demo work
pst : "Parallax Serial Terminal"
MM2125 : "memsic2125"
PWM : "PWM_32_v2"
PUB Main_Program | dir_a,dir_b,i,forward, forward1,forward2, backward, backward1, backward2
pst.Start(115200) '' Initialize serial communication to the PC
MM2125.Start(17, 16) '' Initialize Mx2125
PWM.Start '' Initialize PWM cog
repeat
''set up robot direction and speed using memsic X value
'' get x and y readings from memsic
forward := MM2125.Mx ''get memsic x reading
backward := MM2125.Mx
'' subtract mid range value from memsic readings
forward1:= forward - memsic_mid ''subtract mid range from reading to get a value from -100,000 to +100,000
backward1:= backward - memsic_mid
'' Convert memsic readings to a number between 0 > 100
forward2 := forward1 / memsic_range ''now have a value from -100 to +100
backward2 := backward1 / memsic_range
pst.Str(String (pst#CE, pst#HM, "Forward Axis= "))
pst.dec(forward2)
pst.Str(String (pst#CE, pst#NL, "Backward Axis= "))
pst.dec(backward2)
As you can see, I am now focusing on the X axis of the acc. I'll put Y axis at a later stage.
What i am trying to achieve is to set the backward axis to a negative value.
Example: At level, both forward and backward axis shows zero. When pitch up, forward axis increase, say 25 degrees. So backward axis will show and set to a negative value ( -25 degrees.)
The reason for wanting that is because I can set the if..else command to control the motor.
If forward > 0, forward motor speed slows down. Backward motor speed increase. until it balances. vice versa
Any kind of codes would be greatly appreciated.
P.S Can somebody try the code above to see if the scaling is right? Mines reading 28+- degrees when placed on the table.
Post Edited (SteelHeart) : 5/31/2010 4:55:08 PM GMT


Comments
Goto the Sticky on the top of the Propeller Forums named "Propeller Education Kit Labs, Tools, and Applications"
There is a section on using Full Duplex with the Parallax Serial Terminal.
Jim
Then you'll have to set backward1 to "backward1:= backward + memsic_mid"
Bill