I have checked the statistic library in Arduino.
Can it be used with data in EEPROM?. I've search on how to do statistic calculation in EEPROM, but non related as in the attachment.
The data that I stored is body temperature.
Currently I stored the data using float.
You're not likely to find much information with a search for statistic calculation in EEPROM. You need to understand this is about two separate things:
How to read data from EEPROM
How to do the statistical calculation on data
You'll find plenty enough information on each of those topics. Start by learning to do each task individually. Once you fully understand that and have it working perfectly, then you only need to figure out how to combine the two tasks in a single program.
Here I attach my code as I looked at your comment.
#define LM35 A1
#define READSAMPLES 100
float bt;
int buttonPin1 = D5; // the number of the pushbutton pin 1 MEASURE
int buttonPin2 = D6; // the number of the pushbutton pin 2 RESET CYCLE
int buttonState = 0; // variable for reading the pushbutton status
int ButtonState = 0; // variable for reading the pushbutton status
int address = 0; //EEPROM address counter
int count, counT;
int sample[READSAMPLES];
void setup() {
int contCount = EEPROM.get(5, count) / 10;
}
void loop() {
buttonState = digitalRead(buttonPin1);
ButtonState = digitalRead(buttonPin2);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == LOW) {
Serial.println("Measuring your Body Temperature:");
count = counting();
counT = count / 10;
Serial.print("Data count entering: ");
Serial.println(counT);
writeTemp();
}
if (ButtonState == LOW) {
Serial.println("Update New Cycle of body temp...");
printTemp();
clearEEPROM();
Particle.publish("DONE new Cycle");
}
}
void printTemp()
{
for (int i = 0 ; i < EEPROM.length() ; i++) {
float cel = EEPROM.read(i); //read EEPROM data at address i
//How to find MEAN of all data?
}
}
void clearEEPROM()
{
for (int i = 0 ; i < EEPROM.length() ; i++) {
if(EEPROM.read(i) != 0) //skip already "empty" addresses
{
EEPROM.write(i, 0); //write 0 to address i
}
}
Serial.println("EEPROM erased");
address = 0; //reset address counter
}
void writeTemp()
{
//getting the voltage reading from the temperature sensor
int j;
float average;
for (j = 0; j < READSAMPLES; j++)
{
sample[j] = analogRead(LM35); //read sensor value
delay(50);
}
average = 0;
for (j = 0; j < READSAMPLES; j++)
{
average += sample[j];
}
average /= READSAMPLES;
//float mv = ( average / 4096.0) * 3300;
//float cel = ( mv / 10 ) - 55.01;
float mv = ( average / 1024.0) * 5000;
float cel = ( mv / 10 );
EEPROM.write(address, cel); //write value to current address counter address
Serial.print("Sensor value stored at address ");
Serial.println(address);
address++; //increment address counter
if(address == EEPROM.length()) //check if address counter has reached the end of EEPROM
{
address = 0; //if yes: reset address counter
}
}
float counting()
{
count = count + 10;
Particle.publish("Start Count =", String(count));
return count;
}
However, I'm stuck at this part,
void printTemp()
{
for (int i = 0 ; i < EEPROM.length() ; i++) {
float cel = EEPROM.read(i); //read EEPROM data at address i
//How to find MEAN of all data?
}
}
beacuse, I know how to calculate average in array using for loop statement.
EEPROM.write() and EEPROM.read() can only write/read a single byte from EEPROM. A byte can hold an integer value from 0-255. Yet you're trying to use these functions to store floating point data. This will cause a conversion from the float data type to the byte data type, which may very well not be what you want.
It seems like you might have skipped over the first step, which is to learn read (and write) data from EEPROM. Just write a simple sketch that does that only first. Make sure to use some Serial.println() statements to check whether the results are as you expect them to be. If you do need to store float data in EEPROM, you should use EEPROM.put() and EEPROM.get(). Remember that each float will take 4 bytes of EEPROM, so you need to increment the EEPROM address you write/read to by 4 each time. If you only increment it by 1 then you will overwrite three bytes of the previous data point and end up with garbage data.
You can find lots of information about the EEPROM library here:
If the sketch is longer than the 9000 characters maximum allowed by the forum, then it's OK to add it as an attachment. After clicking the "Reply" button, you will see an "Attachments and other settings" link.
Store these 5 numbers 11.23, 15.76, 13.75, 13.54, 12.45 into the internal EEPROM of the MCU of UNO Board. Read them back, do the average and show the result 13.346 on the Serial Monitor. Kindly. post your codes.