Go Down

Topic: Wie verzögere ich das aktualiesierungs interval eines sensors? (Read 778 times) previous topic - next topic

strohhirn

Wie verzögere ich das aktualiesierungs interval eines sensors?
Ich darf kein delay verwenden, weil nebenbei noch andere dinge laufen und milles wird auch benutzt.
Können ich milles zeimal gleichzeitig laufen lassen?
Gruß

strohhirn

uwefed

millis() kannst Du benutzen sooft Du willst. Du braucht aber für jede Zeitspanne eine eigene Variable um die Startzeit abzuspeichern.
grüße Uwe

strohhirn

Kann aber auch zwei mal der gleiche milles befehl (mit andere variable) leicht zeitversetzt parallel laufen?
Würde das zum beispiel so klappen?
Code: [Select]
nextMillis = millis() + 30000L;
und parallel der andere befehl:
Code: [Select]
aktualisierung = millis() + 30000L;
Gruß

strohhirn

mkl0815

millis() ist nur eine Funktion die einen Wert zurückliefert. Und wenn Du die zweimal direkt hintereinander aufrufst, laufen sie trotzdem nicht gleichzeitig sondern nacheinander.
Erst wenn das erste "nextMillis = millis() + 30000L;" abgearbeitet wurde, wird das nächste "aktualisierung = millis() + 30000L;" ausgeführt. Damit hast Du aber auch noch keine Verzögerung (außer die wenigen Micorsekunden welche die beiden Zeilen zur Abarbeitung benötigen).
Schau Dir mal das Beispiel BlinkWithoutDelay an.

strohhirn

Quote
(außer die wenigen Micorsekunden welche die beiden Zeilen zur Abarbeitung benötigen).

Ja, die zeilen werden noch abgearbeitet.

Aber können diese beiden befehle auch gleichzeitig parallel zueinander laufen?

z.B. im weitern sketch wir 30sec gewartet ohne delay (nextMillis = millis() + 30000L;) und im selben moment wo gewartet wird wartet der sensor bis er sich wieder aktualisiert(aktualisierung = millis() + 30000L;)
(natürlich werden diese zeilen im sketch noch weiterverarbeitet)
Gruß

strohhirn

strohhirn

Wie kriege ich die aktualisierung des sensors um 10 sec verzögert(ohne delay)?
Hier der code :
Code: [Select]
mpx = analogRead(mpxPin);
    mb = (mpx/1023.0-0.04)/0.0018;
    lcd.setCursor(10, 0);
    lcd.print(mb);
    lcd.print("mb  ");


Ich kriegs irgendwie nich hin.
Gruß

strohhirn

uwefed

Als Beispiel 2 LED mit unterschiedlicher Frequenz blinken:
Code: [Select]

const int ledPin1 =  13;     
const int ledPin2 =  12;     

int ledState1 = LOW;           
unsigned long previousMillis1 = 0;     
   
int ledState2 = LOW;           
unsigned long previousMillis2 = 0;   

long interval1 = 1000;     
long interval2 = 800;

void setup() {
  pinMode(ledPin1, OUTPUT);   
  pinMode(ledPin2, OUTPUT);     
}

void loop()

  unsigned long currentMillis = millis();

  if(currentMillis - previousMillis1 > interval1) {
    previousMillis1 = currentMillis;     
    ledState1 = !ledState1;
    digitalWrite(ledPin1, ledState1);
  }

  if(currentMillis - previousMillis2 > interval2) {
    previousMillis2 = currentMillis;     
    ledState2 = !ledState2;
    digitalWrite(ledPin2, ledState2);
  }
}


Go Up