In the initialization part the delays are placed behind the measure calls, but
they must be before them.
In initialize()
pressureCount = 0;
measure();
delay(5); // delay for temperature
measure();
delay(26); // delay for pressure
measureGround();
// check if measured ground altitude is valid
while (abs(getRawData() - getGroundAltitude()) > 10) {
delay(26);
measureGround();
}
should be
pressureCount = 0;
delay(5); // delay for temperature
measure();
measureGround();
// check if measured ground altitude is valid
while (abs(getRawData() - getGroundAltitude()) > 10) {
measureGround();
}
delay(26); // final delay
In measureGround(), which does not belong into the base class other then
virtual but belongs into the hardware specific class instead, as the base class
does not know the delays,
void measureGround(void) {
// measure initial ground pressure (multiple samples)
groundAltitude = 0;
for (int i=0; i < 25; i++) {
measure();
delay(26);
groundAltitude += rawAltitude;
}
groundAltitude = groundAltitude / 25.0;
}
should be
void measureGround(void) {
// measure initial ground pressure (multiple samples)
groundAltitude = 0;
for (int i=0; i < 25; i++) {
delay(26);
measure();
groundAltitude += rawAltitude;
}
groundAltitude = groundAltitude / 25.0;
}
so this function takes care itself that the delay was done before calling
measure.
Some constants for the delays were fine, too.
See
http://aeroquad.com/showthread.php?4376-AeroQuad-Flight-Software-v2-5&p=40876&vi
ewfull=1#post40876 for the post that brought up the bug.
Original issue reported on code.google.com by al...@arcor.de on 6 Dec 2011 at 12:46
Original issue reported on code.google.com by
al...@arcor.de
on 6 Dec 2011 at 12:46