PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sketch Problem



wendtdir
16.07.2015, 19:15
Hallo,

ich sehe den Wald vor lauter Bäumen nicht fürchte ich. Ich habe mit meinem Arduino ein Temperaturmesser nachgebaut und versuche zwei CodeTeile zusammenzufügen. Ich möchte, dass meine LED (hot, normal, cold) durchgehend eingeschaltet ist, die Temperatur soll aber nur alle 30 Sekunden auf den seriellen Monitor ausgegeben werden.

Anbei mein Sketch:


#define HOT 6
#define NORMAL 4
#define COLD 2

float voltage = 0;
float celsius = 0;
float hotTemp = 26;
float coldTemp = 20;
float sensor = 0;

void setup() {

pinMode(HOT, OUTPUT);
pinMode(NORMAL, OUTPUT);
pinMode(COLD, OUTPUT);
Serial.begin(9600);

}

void tempmessung()

{
sensor = analogRead(0);
voltage = (sensor*5000)/1024;
voltage = voltage - 500;
celsius = voltage/10;


if (celsius<coldTemp)

{
digitalWrite(COLD, HIGH);
delay(1000);
digitalWrite(COLD, LOW);
}



else if (celsius > coldTemp &&celsius <= hotTemp)

{
digitalWrite(NORMAL, HIGH);
delay(1000);
digitalWrite(NORMAL, LOW);
}





else
{
digitalWrite(HOT, HIGH);
delay(1000);
digitalWrite(HOT, LOW);
}

}

void moni()

{

Serial.println(celsius, 2);
delay(30000);
}

void loop()

{

tempmessung();
moni();
}

Der Sketch wurde zusammengefasst aus dem Buch Arduino Workshops. Ich erstellte eine Funktion tempmessung, diese soll durchgehend die Temperatur messen und eine der LEDs, je nach Temperatur, leuchten lassen. Die zweite Funktion moni soll eigentlich die Temperatur alle 30 Sekunden auf dem seriellen Monitor ausgeben, aber leider macht das Programm beides nur alle 30 Sekunden.

Ich denke, es müsste mit einer While-Schleife gehen. Aber ich komme partout nicht auf die Lösung.

HaWe
16.07.2015, 19:25
hallo,
ich würde 2 Funktionen definieren, die (sofort) genau das machen, wonach sie klingen

void Messung();
void Ausgabe();

und dann loop() so strukturieren:




void loop() {
static uint32_t mtimer=0; // Stoppuhr-Timervariable

Messung();

if(millis-mtimer>=30*1000) { // Stoppuhr ablesen: schon 30 sec?
Ausgabe();
mtimer=millis(); // Stoppuhr resetten
}

delay(100); // gönn' der cpu ein wenig Ruhe...

}


Jetzt musst du nur noch die templates mit Inhalten füllen.

HTH!