Pages: [1]   Go Down
Author Topic: Verständnissfrage  (Read 391 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo beisammen,

mir ist klar das arduino nicht multitaskingfähig ist und höchstens per interupt vom normalen Programmablauf abweicht.
Unter dieser Premisse scheint mir eine Umsetzung folgendes Aufbaus nicht möglich:

Arduino alle 2 minuten die Temperatur von (z.B.) 5 Sensoren einlesen und bei unterschreiten eines Sollwertes "x" den einen Ausgang auf High schalten (soweit eine einfache Heizungssteuerung). nebenbei möchte ich jedoch per Webserver oder serial (letztlich egal) die aktuellen Temperaturwerte auslesen / darstellen können und evt sogar aktiv Sollwert "x" ändern.

Da arduino nur Befehle nacheinander abarbeitet würde ein zeitgleicher Aufruf der Webseite vom Arduino zum Zeitpunkt wo dieser gerade die Temperatur von einem Sensor einließt nicht möglich sein, oder?

Kann man (unter berücksichtigung das ein beliebiger Browser schon ein par sekunden Geduld hat) eine Funktion: "lese Temp und reagiere" für max 3 Sek ausführen und dann zwangsläufig starte Funktion: "Webserver" für 2 Minuten Dauer laufen lassen? Hierbei müsste dann doch theoretisch zeitgleich ein Timer (für die 3 Sekunden bzw. die 2 Minuten) laufen, oder?

Ich hoffe ich habe den Kernpunkt meiner Frage formulieren können ohne euch zu verwirren.

Gruß Stephan
Logged

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

warum sollte das nicht gehen?
Selbst "normale" Computer machen nix wirklich gleichzeitig, sondern auch nur viele Sachen sehr schnell hintereinander.
Wenn Du nicht mit "delay()" arbeitest, sondern mit "millis()" (siehe  Blink without delay) sollte das kein großes Problem sein, sowas zu bauen.
Der ATMEGA läuft mit 16MHz und damit werden "fast" 16 Mio Operationen pro Sekunden ausgeführt (vermutlich gibt es ein par Opeartionen die mehr als einen Takt benötigen).
Du kannst Dir ja mal den Spass machen und in der loop() Schleife nur den aktuellen Wert von millis(), bzw. micros(); auf die serielle Schnittstelle ausgeben lassen.
Code:
void loop() {
   Serial.println(micros());
}
Damit solltest Du schon ein Geführ bekommen wie schnell Dein Arduino durch den Code rennt.
Der Trick ist halt, keinen "blockierenden" Code zu schreiben, dann gehen jede Menge Sachen "fast" gleichzeitig.
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 82
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

3 Sekunden sind für den arduino eine halbe ewigkeit, wenn es nur darum geht ein paar temperaturen eizulesen und diese auszugeben

temperatur lesen -> prüfen ob Server anfrage da ist -> wenn ja Temperaturen ausgeben -> prüfen ob zwei Minuten rum sind -> wenn ja Soll- und Ist-Wert vergleichen und Ausgang schalten
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 2
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

danke schon mal für die zügigen Antworten,

millis() ist mir bislang wohl unterlaufen, ähnlich könnte man wahrscheinlich per dcf die aktuelle Zeit zum timen nutzen.

Ich habe manchmal echt Probleme umzudenken aus dem Zeitgefühl eines Menschen der schon mal Sekunden fürs denken benötigt und Controlern die Mhz getacktet arbeiten.

Ich danke euch
Logged

Pages: [1]   Go Up
Jump to: