Hi, i am trying to put individual temperature float values into an array and then retrieve the highest temperature. Unfortunately my code is not giving me the correct results and i have researched this topic with no answers found. i first tried to put the values in an array and get the average and that resulted in the wrong average being printed to serial monitor with a y in front of the number
My code is below any help would be appreciated.
/*******************************************/
float temp = ((analogRead (pinTemp)* (5.0/1024))-0.5)/0.01;
float tempArray[4]; // temp array of 4 to test
int numTemp = 5;
float avg;
int i;
float sumOfTemp=0.0;
float tempRead= 0.0;
float reading;
//for loops for processing data
Serial.println(temp);
for (i=0;i<numTemp;i=i+1){
tempArray[i]=temp;
}
for(i=0; i<numTemp;i=i+1){
sumOfTemp = sumOfTemp+tempArray[i];
}
avg = sumOfTemp/tempArray[i];
Serial.print("Average temperature is:");
Serial.println(avg);
Serial.println("");
In particular note the advice to Auto format code in the IDE and to use code tags when posting code here as it prevents some combinations of characters in code being interpreted as HTML commands such as italics, bold or a smiley character, all of which render the code useless
//variables for processing data
int numTemp = 5;
float tempArray[numTemp]; // temp array
float avg=0.0;
int i;
float sumOfTemp= 0.0;
/*******************************************/
bool personClose= true;
//for loops for processing data
Serial.println(temp);
if (personClose){
for (i=0; i<numTemp; i=i+1){
tempArray[i]=temp;
}
} for(i=1; i<=numTemp; i=i+1){
sumOfTemp = sumOfTemp+tempArray[i];
}
for( i= 0; I<tempArray; i++){
Serial.print(tempArray[i]); // to print out each element of the array
}
/******************************************/
avg = sumOfTemp/tempArray;
Serial.print("Average temperature is:");
Serial.println(avg);
Serial.println("");
Serial.print("Total temperature is:");
Serial.println(sumOfTemp);
Serial.println("");
unfortunately it is not work for Reading the TMP36 sensor and putting the values in an array. The code is correct to convert the readings into celsius because serial print displays the correct number. The code for the conversion is:
Oh, sorry, one more thing. We don’t know what is wrong currently. Is it still that the average doesn’t seem correct? Can you explain exactly how you reached that conclusion?
By the way, you still are missing a closing bracket in loop()…
What does it print out when it runs? Can you post a text capture?
i am trying to put individual temperature float values into an array
then why do you fill all the elements with the same value?
for (i = 0; i < numTemp; i++) {
tempArray[i] = temp;
index++;
After that loop, you are guaranteed to have identical values in every element.
Also,
if (numTemp == 5) {
is futile, since you set it to 5 and never changed it anywhere.
My aim is to put the values of temperature into an array then output the values and find the highest temperature in the array. Now it doesnt seem to be adding the temperature to the array as it is only displaying one value when i serial print array. Any suggestions how to properly populate the array with the float values? i have tried to no avail
That is because you are programming using the "shotgun" method - point the shotgun at the barn and hope that some of the pellets hit.
You need to analyze your requirements, and think it through step by step. Nobody else can do that for you.
If you're baffled, you need to do more research and possibly try a lot of simpler projects first so you know what you're doing.
For example, you apparently haven't decided over what time period the 5 samples should be captured. Temperature doesn't change by degrees in microseconds, not in a normally working sensor anyway. So even if you made the sketch work logically, it would still print the same 5 values if they were all captured in less than a millisecond.
jessie2020:
As i am using a simulator. I wanted the temperature to be captured each time i change the dial to indicate the temperature has been changed
loop() does not have a closing brace
You are placing the same sample in every element of your tempArray
for (i = 0; i < numTemp; i++) {
tempArray[i] = temp;
index++;
}
numTemp was not modified
if (numTemp == 5) {
for (i = 0; i < numTemp; i++) {
Serial.print("Items in the array are: ");
Serial.println(tempArray[i]);
}
}
numTemp should be a const
You need a global or static variable for the array index in order to populate the array.
Here is the proper way to populate the array. You can adjust the sample interval to your needs. With simple modification you can convert to a running average.
const byte pinTemp = A0;
const unsigned long sampleInterval = 1000; // milliseconds
const int numTemp = 5;
float tempArray[numTemp]; // temperature array
unsigned long prevSampleMillis; // millis() that previous sample was read
void setup()
{
Serial.begin(9600); // set baud rate
pinMode(pinTemp, INPUT);
prevSampleMillis = millis();
}
void loop()
{
static int tempIndex = 0;
// Sample temperature if it is time to do so
if (millis() - prevSampleMillis >= sampleInterval)
{
prevSampleMillis = millis();
tempArray[tempIndex++] = ((analogRead(pinTemp) * (5.0 / 1024)) - 0.5) / 0.01;
if (tempIndex == numTemp)
{
// Array is full. Print values.
tempIndex = 0;
float tempSum = 0;
Serial.print("Items in the array are: ");
for (int i = 0; i < numTemp; i++)
{
Serial.println(tempArray[i]);
tempSum += tempArray[i];
}
float tempAvg = tempSum/numTemp;
Serial.print("Temperature Average: ");
Serial.println(tempAvg);
}
}
// TBD: Do stuff here that needs to be done every loop
}
My aim is to put the values of temperature into an array then output the values and find the highest temperature in the array. Now it doesnt seem to be adding the temperature to the array as it is only displaying one value when i serial print array. Any suggestions how to properly populate the array with the float values? i have tried to no avail
You didn’t try. There is nothing in your code that compares previous to current values, in order to cause the new value to be added to the array. Perhaps you should have a go at that.
As i am using a simulator. I wanted the temperature to be captured each time i change the dial to indicate the temperature has been changed
Also, don’t you think this is an important thing to know, for someone that is trying to help you? This should have been explained in the first post.