int thermistorPin = A0;
// Variables for translating thermistor-data to degrees in Celsius
float R1 = 10000;
float T0 = 298.15;
float Rntc, temp, temp_c;
float beta = 3486;
float temperatureInC(int pinNumber){
/* This piece of code does the translation between analog data and degrees in Celsius
- based on the Steinhart-Hart-equation */
int voltage;
voltage = analogRead(pinNumber);
Rntc = R1 * (1023.0 / voltage - 1.0);
temp = 1 / T0;
temp += 1/beta * log(Rntc/R1);
temp = 1 / temp;
temp = temp - 273.15;
return temp;
}
float T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12;
int hvile = 10000; // Variable for easy delay adjustments between measurements
volatile int pinKnapp = 2; // Button pin
int printVerdi = 1;
void knappISR(){
// Function to be run as an interrupt
Serial.print("Måling én: ");
Serial.println(T1);
Serial.print("Måling to: ");
Serial.println(T2);
Serial.print("Måling tre: ");
Serial.println(T3);
Serial.print(" ^ ");
Serial.print("print nr.");
Serial.print(printVerdi);
Serial.println(" ^");
printVerdi++;
}
/* Following is a function that applies a delay after calling the attachInterrupt-code to
prevent fully-automatic printing to the serial monitor */
static unsigned long aktuell_millis = 0;
void ISRdebounce(){
if(millis() - aktuell_millis > 1000){
knappISR();
aktuell_millis = millis();
}
}
void setup() {
Serial.begin(9600);
Serial.println("Temeperaturmålinger i Celsius, gjort over 24 timer hver andre time");
// The previous means: "measurements in Celsius over a 24-hour span, done every other hour" and is purely for aesthetics
pinMode(pinKnapp, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(2), ISRdebounce, LOW);
delay(hvile);
T1 = temperatureInC(thermistorPin);
delay(hvile);
T2 = temperatureInC(thermistorPin);
delay(hvile);
T3 = temperatureInC(thermistorPin);
}
void loop() {
}
I am norwegian so some of the variables are named with norwegian words such as "knapp" which means "button".
What I am trying to achieve is a program that can run by a battery (no computer connected) and define the different T-foats (T1, T2, T3 etc...), so that when a computer is connected to the arduino, the data can be printed in the serial monitor.
What I have noticed is that when I run the program on the arduino without the serial monitor opened (whether it is powered by a battery or computer), then connect the arduino to the computer, open the serial monitor and run the ISR, there are no stored data. It runs the program first when the monitor is opened.
I have just little over a month of experience with programming, this being in school-context. I can not seem to find where the problem lies. The only thing I could think of, is that starting the serial in voi setup caused it. I tried to solve this by moving Serial.begin() inside the interrupt-code (knappISR()) and ending the code with Serial.end(), and as the problem was still there, I concluded that it had to be something else.
Thanks. -Richard