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.
Dependents: lab_digital_sensors
Diff: MMA7660.cpp
- Revision:
- 3:89cb08cc663b
- Parent:
- 2:a8e20db7901e
- Child:
- 4:36a163511e34
--- a/MMA7660.cpp Wed Oct 17 16:38:05 2012 +0000
+++ b/MMA7660.cpp Tue May 13 18:12:59 2014 +0000
@@ -4,7 +4,6 @@
{
setActive(active);
samplerate = 64;
-
}
//Since the MMA lacks a WHO_AM_I register, we can only check if there is a device that answers to the I2C address
@@ -18,6 +17,7 @@
void MMA7660::setActive(bool state)
{
+ active = state;
char modereg = read(MMA7660_MODE_R);
modereg &= ~(1<<0);
@@ -33,9 +33,9 @@
void MMA7660::readData(int *data)
{
+ bool active_old = active;
if (!active) {
setActive(true);
- active = true;
wait(0.012 + 1/samplerate); //Wait until new sample is ready, my experience is that 1/samplerate isnt needed, but datasheet says so
}
@@ -54,7 +54,7 @@
}
} while (alert);
- if (!active)
+ if (!active_old)
setActive(false);
}
@@ -85,6 +85,7 @@
void MMA7660::setSampleRate(int samplerate)
{
+ bool active_old = active;
setActive(false); //Not allowed to be active to change anything
int rates[] = {120, 64, 32, 16, 8, 4, 2, 1}; //Alowed samplerates (and their number in array is also number required for MMA)
int sampleLoc = 0, sampleError = 10000, temp;
@@ -102,14 +103,14 @@
temp |= sampleLoc;
write(MMA7660_SR_R, temp);
this->samplerate = rates[sampleLoc];
- setActive(active); //Restore previous active state
+ setActive(active_old); //Restore previous active state
}
MMA7660::Orientation MMA7660::getSide( void )
{
char tiltreg = read(MMA7660_TILT_R);
-
+ printf("Reg = %d\r\n", tiltreg);
//We care about 2 LSBs
tiltreg &= 0x03;
if (tiltreg == 0x01)
@@ -169,6 +170,7 @@
float MMA7660::getSingle( int number )
{
+ bool active_old = active;
if (!active) {
setActive(true);
wait(0.012 + 1/samplerate); //Wait until new sample is ready
@@ -186,7 +188,7 @@
temp += 128+64;
} while (alert);
- if (!active)
+ if (!active_old)
setActive(false);
return temp / MMA7660_SENSITIVITY;