To add temperature to the frame caption, I first do a check to see that it is running on a Raspberry Pi. This function does that.
void SetPiFlag() {
struct utsname buffer;
tempFlag = 0;
if (uname(&buffer) != 0) return;
if (strcmp(buffer.nodename,"raspberrypi") !=0) return;
if (strcmp(buffer.machine,"armv7l") != 0) return;
piFlag=1;
}
Note you have to add this include
#include <sys/utsname.h>
Now you need to call this function to return the temperature as a float.
float ReadPiTemperature() {
char buffer[10];
char * end;
if (!piFlag) return 0.0f;
if (SDL_GetTicks() - tempCount < 1000) {
return lastTemp;
}
tempCount = SDL_GetTicks() ;
FILE * temp = fopen("/sys/class/thermal/thermal_zone0/temp","rt");
int numread = fread(buffer,10,1,temp);
fclose(temp);
lastTemp = strtol(buffer,&end,10)/1000.0f;
return lastTemp;
}
Things to notice.
- If it’s not running on a Pi it always returns 0.0C.
- No matter how often it’s called, it only reads the temperature once a second.
- In between reads it caches the temperature in a variable lastTemp
When I first wrote this, it was reading the temperature on every frame. It actually changes that quickly but that made it hard to read. So once a second is fine.
(Visited 46 times, 2 visits today)