Go Down

Topic: Richtige Projektausführung (Read 605 times) previous topic - next topic

StoRmtec

Hallo Arduino Community
Da ich relativ neu bin bei Arduino hätte ich eine programmiertechnische Frage.
Und zwar habe ich eine ino Datei als startdatei und habe mir 2 Tabs dazu gemacht einmal
ledSteuerung und einmal TemperaturAuslesung

Jetzt ist meine Frage wie kann man das am besten anstellen das man die 2 Dateien
extra ansteuert weil zur Zeit ist bei der Temperatur ein delay drinnen und daher kann
ich auch die LED´s nicht mehr steuern
und in der Hauptdatei sind die Sachen eingebunden

void setup
{
ledsteuerungsetup();
tempsetup();
}

void loop()
{
ledsteuerungloop();
temploop();
}

Danke

Eisebaer

hi,

nimm millis statt des delays, dazu findest Du haufenweise erklärungen hier. zb im thread direkt hinter Deinem http://arduino.cc/forum/index.php/topic,123854.0.html.

Oder bei Examples > Digital > "Blink without Delay".

gruß stefan

nimm abblockkondensatoren!  100nF.  glaub mir, nimm abblockkondensatoren!

StoRmtec

Okay werde ich mir gleich mal ansehen
Aber kann man das loop auch komplett weglassen und per steuerung über meine GUI sagen das er das ausführt?

Eisebaer

hi,

loop weglassen geht garnicht, die ist notwendig in jedem sketch. aber Du könntest zb über den serial monitor steuersignale senden und dann in der loop drauf prüfen und in die jeweilig richtige routine springen. allerdings auch erst nach verzögerung durch das delay...

gruß stefan
nimm abblockkondensatoren!  100nF.  glaub mir, nimm abblockkondensatoren!

StoRmtec

und gibt es da gar keinen weg das delay wegzulassen??
möchte eben die temperatur nur alle 5min haben und wenn ich in der Zeit nichts mehr machen kann ist es blöd für eine Homeautomation

Danke

mkl0815

Schau Dir mal http://arduino.cc/en/Tutorial/BlinkWithoutDelay an, da wird erklärt wie man Verzögerungen ohne delay hinbekommt.

Der Vorteil ist, das loop() nicht mehr blockiert.

In Deinen Funktionen
ledsteuerungloop();
temploop();
lass einfach die delays weg und bau eine Steuerroutine in loop(), welche "temploop()" nur alle 5 minuten aufruft und "ledsteuerungloop()" öfters (z.B. alle 10 Sekunden oder was auch immer).

Eisebaer

hi,

doch, das delay sollst Du ja weglassen und durch eine millis-lösung ersetzen. millis liefert Dir die millisekunden seit dem einschalten des arduino. Du speicherst die millis in einer globalen variable (vor der void setup als unsigned long definiert). und dann prüfst Du an der richtigen stelle, ob das aktuelle millis um zb 300000 (= 5 X 60sek * 1000) höher ist als der gespeicherte wert. wenn ja, setzt du den gespeicherten wert auf die momentanen millis und springst einmalig in deine messung und dann geht das spiel von vorne los. diese prüfung findet tausende male in der sekunde statt und zwischen diesen prüfungen kannst Du was anderes tun, zb die leds steuern (aber bitte auch ohne delay).

Code: [Select]

unsigned long previousMillis = 0;        // der speicher für die alte zeit
long interval = 300000;           // abstand zwischen den messungen in millisekunden

void setup() {
//  tue irgenwas;
}

void loop() {
  unsigned long currentMillis = millis();  //momentane millis
  if(currentMillis - previousMillis > interval) {  //ist der momentane wert um 300000 höher als der gepeicherte? wenn ja >
    previousMillis = currentMillis;   
    spring_in_deine_routine();
  }
  steuere_leds();
}


gruß stefan
nimm abblockkondensatoren!  100nF.  glaub mir, nimm abblockkondensatoren!

Go Up