Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
FRDM MMA8451Q
# FRDM_MMA8451Q
# http://mbed.org/users/mbed_official/code/FRDM_MMA8451Q/
import mbed
import sys
def float(n):
s = 1.0
if n < 0:
s = -1.0
n *= -1
f = 0.0
a = 1.0
while n:
if n & 1:
f += a
n >>= 1
a *= 2.0
f *= s
return f
def abs(a):
if a < 0:
return -a
return a
class MMA8451Q:
REG_WHO_AM_I=0x0D
REG_CTRL_REG_1=0x2A
REG_OUT_X_MSB=0x01
REG_OUT_Y_MSB=0x03
REG_OUT_Z_MSB=0x05
UINT14_MAX=16383
def __init__(self, sda, scl, addr):
self._i2c = mbed.I2C(sda, scl)
self._addr = addr
data = chr(self.REG_CTRL_REG_1)+chr(0x01)
self.writeRegs(data)
def getAccX(self):
return float(self.getAccAxis(self.REG_OUT_X_MSB)) / 4096.0
def getAccY(self):
return float(self.getAccAxis(self.REG_OUT_Y_MSB)) / 4096.0
def getAccZ(self):
return float(self.getAccAxis(self.REG_OUT_Z_MSB)) / 4096.0
def getWhoAmI(self):
who_am_i = chr(0)
self.readRegs(self.REG_WHO_AM_I, who_am_i);
return ord(who_am_i)
def getAccAxis(self, addr):
res = chr(0)+chr(0)
self.readRegs(addr, res)
acc = (ord(res[0]) << 6) | (ord(res[1]) >> 2)
if acc > (self.UINT14_MAX/2):
acc -= self.UINT14_MAX;
return acc
def readRegs(self, addr, data):
self._i2c.write(self._addr, chr(addr), 1, 1)
self._i2c.read(self._addr, data, len(data), 0)
def writeRegs(self, data):
self._i2c.write(self._addr, data, len(data), 0)
MMA8451_I2C_ADDRESS=(0x1d<<1)
acc = MMA8451Q('PTE25', 'PTE24', MMA8451_I2C_ADDRESS)
rled = mbed.PwmOut('LED_RED')
gled = mbed.PwmOut('LED_GREEN')
bled = mbed.PwmOut('LED_BLUE');
while 1:
rled.write(1.0 - abs(acc.getAccX()))
gled.write(1.0 - abs(acc.getAccY()))
bled.write(1.0 - abs(acc.getAccZ()))
sys.wait(100) # 100ms
#print sys.heap()
#sys.wait(1000)