Schön, dass ein für mich erledigter Beitrag noch so schön Kommentiert wird - DANKE! wärend ein anderer in der Versenkung untergeht... Dann probier ichs hier noch mal.
Ich möchte die Zeit, zwischen 2 Temperaturen messen. Der Stand ist so, dass die Stopuhr zwar gestartet wird, aber bei jedem Loop erneut gestartet wird. Der Code sieht folgendermassen aus.
//Stopuhr über interne mills-funktion
//Start und Stop über einen gemeinsamen Taster an Pin 6
//Reset bzw. Zurückstellen mit Taster an analogpin 2 Pin 16
//Anzeige: s,tsd
//Start und Stop über Temperaturschwellwerte ausgelöst
#include <LiquidCrystal.h> //Display
#include <Wire.h>
#include <OneWire.h>
#include <DallasTemperature.h>
const int StartPin = 6;
const int ResetPin = 16;
const int LedAktiv = 7;
#define ONE_WIRE_BUS 15 // Data wire is plugged into pin A1 Analog Input als Digital Input
OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices
DallasTemperature sensors(&oneWire); // Pass our oneWire reference to Dallas Temperature.
DeviceAddress insideThermometer = { 0x10, 0x89, 0x14, 0x90, 0x02, 0x08, 0x00, 0x3C }; //Adresse des Temperatursensors
const String INITIAL_MESSAGE = "START druecken ";
const String TIMING_MESSAGE = "Zeit: ";
const String EINHEIT_MESSAGE = " Sek.";
const String AKTIV_MESSAGE = "Messung aktiv";
int buttonVal = 0;
int buttonOldVal = 0;
int buttonState = 0;
int ResetState = 0;
int TempVal = 0;
int TempOldVal = 0;
int TempState = 0;
long startTime = 0;
float endTime = 0;
boolean showTimer = false;
LiquidCrystal lcd(8,9,5,4,3,2);
void setup(){
lcd.begin(16, 2);
lcd.print(INITIAL_MESSAGE);
pinMode(StartPin, INPUT);
pinMode(ResetPin, INPUT);
pinMode(LedAktiv, OUTPUT);
Serial.begin(9600);
}
void loop(){
sensors.requestTemperatures(); //Temperatur aktualisieren bzw. abfragen
float tempC = sensors.getTempC(insideThermometer);
Serial.print(tempC); // Nur zum Überprüfen - später nicht im Programm
Serial.print(" Time"); // Nur zum Überprüfen - später nicht im Programm
Serial.print(" "); // Nur zum Überprüfen - später nicht im Programm
Serial.print(millis()); // Nur zum Überprüfen - später nicht im Programm
Serial.print("\n"); // Nur zum Überprüfen - später nicht im Programm
// --- Start Stopuhr mittels Temp --- //
if(tempC <= 40.00 && tempC >= 30.00){
startTimer();
LedStatus_aktiv();
} else {
endTimer();
LedStatus_passiv();
}
// --- Start Stopuhr mittels Taster --- //
//buttonVal = digitalRead(StartPin);
//delay(10);
//if(buttonVal == HIGH && buttonOldVal == LOW){
//buttonState = 1 - buttonState;
//if(buttonState == 1){
//startTimer();
//LedStatus_aktiv();
//} else {
//endTimer();
//LedStatus_passiv();
//}
//}
if(showTimer == true){
printTime();
}
// buttonOldVal = buttonVal;
ResetState = digitalRead(ResetPin);
if (ResetState == HIGH && buttonState == 0) {
resetTime();
} else {
if (ResetState == HIGH && buttonState == 1){
lcd.clear();
lcd.print(AKTIV_MESSAGE);
}
}
lcd.setCursor(0, 1);
lcd.print("Temp. ");
printTemperatureLCD(insideThermometer);
lcd.write(223); //schreibt °
lcd.write("C");
}
void startTimer(){
showTimer = true;
startTime = millis();
lcd.clear();
lcd.print(TIMING_MESSAGE);
}
void endTimer(){
showTimer = false;
lcd.setCursor(0,0);
lcd.print(TIMING_MESSAGE);
lcd.print(endTime / 1000,2);
lcd.print(EINHEIT_MESSAGE);
}
void printTime(){
float timeVal = endTime = millis() - startTime;
lcd.setCursor(0,0);
lcd.print(TIMING_MESSAGE);
lcd.print(timeVal / 1000,2);
lcd.print(EINHEIT_MESSAGE);
}
void resetTime(){
// digitalWrite(ledPin, HIGH);
lcd.setCursor(0,0);
lcd.print(INITIAL_MESSAGE);
}
void LedStatus_aktiv(){
digitalWrite(LedAktiv, HIGH);
}
void LedStatus_passiv(){
digitalWrite(LedAktiv, LOW);
}
void printTemperatureLCD(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
lcd.print("Error getting temperature");
} else {
lcd.print(tempC,2);//auf LCD schreiben mit 2 Nachkommastelle und kaufmänisch gerundet
}
}
eine genauere Beschreibung des Projektes hab ich auch hier im Forum:
http://forum.arduino.cc/index.php?topic=183093.msg1356369#msg1356369
Die Funktionen für die Tasten sind im Sketch mit // Kommentiert, diese Funktionen benötige ich dann für etwas anderes (SD-Logger START/STOP)