Thanks so much PaulS,
It works perfectly now.
The link is great and looks very useful to learn more about C.
Now i post here the final code as i have it working. May be it could be useful to somebody else in the future.
#include <FileLogger.h>
#define MEM_PW 8
long readTemp() {
long result;
// Read temperature sensor against 1.1V reference
ADMUX = _BV(REFS1) | _BV(REFS0) | _BV(MUX3);
delay(20); // Wait for Vref to settle
ADCSRA |= _BV(ADSC); // Convert
while (bit_is_set(ADCSRA,ADSC));
result = ADCL;
result |= ADCH<<8;
result = (result - 125) * 1075;
return result;
}
long readVcc() {
long result;
// Read 1.1V reference against AVcc
ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
delay(2); // Wait for Vref to settle
ADCSRA |= _BV(ADSC); // Convert
while (bit_is_set(ADCSRA,ADSC));
result = ADCL;
result |= ADCH<<8;
result = 1126400L / result; // Back-calculate AVcc in mV
return result;
}
void setup() {
pinMode(MEM_PW, OUTPUT);
digitalWrite(MEM_PW, HIGH);
Serial.begin(9600);
Serial.println("Arduino inner temperature and inner voltage");
}
void loop() {
// To read the inner temperature and voltage
long temp=readTemp();
long Vcc=readVcc();
// To prepare and to save the data tostore in the microSD
char message[20];
sprintf(message,"%ld, %ld\n", temp, Vcc);
unsigned long length = strlen(message);
FileLogger::append("data.log", (byte*)message, length);
// Now i show the result in serial
Serial.print(temp, DEC); // show the inner temperature of arduino
Serial.print(" x10^-4 degC ");
Serial.print(Vcc, DEC); // show the voltage
Serial.println(" mVolts");
// Wait 1 second until to take a new measurement
delay(1000);
}
You could apply it to any other measurement acquired by temperature sensors, accelerometers, or whatever.... just only pay attention to the expression to be save, and the length of the message to be stored in the SD, as you could read in the previous post and the great explanations by PaulS.
Thanks PaulS. Enjoy everyone!