Subversion Repositories FlightCtrl

Compare Revisions

Ignore whitespace Rev 1992 → Rev 1993

/branches/V0.82b-Arthur-P/MS561101BA/examples/MS561101BA_movaverage/MS561101BA_movaverage.pde
0,0 → 1,77
/*
MS561101BA_movaverage.pde - Reads from the sensors and outputs a moving averaged pressure reading
 
Copyright (C) 2011 Fabio Varesano <fvaresano@yahoo.it>
 
Development of this code has been supported by the Department of Computer Science,
Universita' degli Studi di Torino, Italy within the Piemonte Project
http://www.piemonte.di.unito.it/
 
 
This program is free software: you can redistribute it and/or modify
it under the terms of the version 3 GNU General Public License as
published by the Free Software Foundation.
 
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
 
*/
 
 
//#define DEBUG_V
 
#include <Wire.h>
//#include <DebugUtils.h>
#include <MS561101BA.h>
 
 
#define MOVAVG_SIZE 32
 
MS561101BA baro = MS561101BA();
 
float movavg_buff[MOVAVG_SIZE];
int movavg_i=0;
 
 
void setup() {
Wire.begin();
Serial.begin(9600);
delay(1000);
 
// Suppose that the CSB pin is connected to GND.
// You'll have to check this on your breakout schematics
baro.init(MS561101BA_ADDR_CSB_LOW);
delay(100);
// populate movavg_buff before starting loop
for(int i=0; i<MOVAVG_SIZE; i++) {
movavg_buff[i] = baro.getPressure(MS561101BA_OSR_4096);
}
}
 
void loop() {
Serial.print(" temp: ");
Serial.print(baro.getTemperature(MS561101BA_OSR_4096));
Serial.print(" degC pres: ");
pushAvg(baro.getPressure(MS561101BA_OSR_4096));
Serial.print(getAvg(movavg_buff, MOVAVG_SIZE));
Serial.println(" mbar");
}
 
void pushAvg(float val) {
movavg_buff[movavg_i] = val;
movavg_i = (movavg_i + 1) % MOVAVG_SIZE;
}
 
float getAvg(float * buff, int size) {
float sum = 0.0;
for(int i=0; i<size; i++) {
sum += buff[i];
}
return sum / size;
}