PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : millis Starten Stoppen



Benne_87
04.02.2014, 21:26
Hey,

Bei mir ist mal wieder ein Problem aufgetaucht und will nicht gehn.

Über einen IR Sensor wird ein Wert eingelesen. Beim Überschreiten einer gewissen Spannung (sagen wir 3,5V) soll eine LED eingeschaltet werden, allerdings erst nachdem der Wert länger als 1 Sekunde anliegt. Sollte sich die Spannung innerhalb dießer einen Sekunde unter 3,5V fallen soll die LED nicht an gehen. Eine delay Anwendung ist nicht möglich, da das restliche Programm weiter laufen muss.
Hier könnte die millis() Anwendung in betracht gezogen werden, da hierbei bei jedem durchlauf die vergangene Zeit in ms gemessen wird. Ist es möglich die millis Anwendung mit einer if Anweisung zu starten und zu stoppen.


Das Programm unten ist natürlich purer quatsch, damit wollte ich nur verdeutlichen was ich meine.

if (sensorValue >= 3,5){
millis} Hier soll gestartet werden

if (sensorValue <= 3,5){
millis == 0} Hier soll gestoppt werden

If (sensorValue >=3,5 && millis >= 1000){
digitalWrite (LED, HIGH)


wenn Jemand eine bessere Idee als die millis geschichte hat, nur her damit.
Schonmal Danke

Valen
04.02.2014, 23:47
Die Funktion millis kenne ich nicht für C(++). Nur diesen Arduino Funktion (http://arduino.cc/en/Reference/millis) die den Anzahl von Milisekunden zurück gibt Seit das anschalten. Ist das das gleiche Prinzip, oder etwas anderes? Gebe mal den Code den du dafür kennst.

Wenn das so ist, wurde ich den Millis-ausgabewert speichern in einer Variabele auf das moment wenn sensorValue >= 3.5 ist. Danach, bei jeder neue Durchlauf, und wann sensorValue wieder < 3.5, vergleichen ob den letzte Millis wert auf das Moment 1000 größer ist als den alte gespeicherte Millis-wert. Und auf Basis diese Entscheidung die Led anschalten oder wieder ausschalten.

Benne_87
09.02.2014, 13:15
Super, damit funbktionierts einwandfrei.

anstat einer led wurde testweise eine serielle Ausgabe genommen.
Danke :)

int var = millis();
int sensorValue = analogRead(A2);
float voltage = sensorValue * (3.5 / 400.0);
if(sensorValue >=350 & var >= summe){
Serial.println("test");
digitalWrite(LAMP, 0);
test = test + 1;


}

if(sensorValue >= 350){
summe = time;
//Serial.println(time);

}

if(sensorValue <=350 & test >= 1){
Serial.println("test ende");
test = test = 0;

}

if(sensorValue <= 350){
time = var + 700;
//Serial.println(time);

}

Valen
09.02.2014, 20:41
Gut das es für dich nach Wunsch funktioniert. Mir ist das ganze mit den neue Variablen test, time und var aber Mist. Ich verstehe dein Logik nicht. Es ist Empfehlenswert einige Kommentare zu zu fügen damit anderen, aber auch du selbst in den Zukunft, versteht was jeder Teil bedeutet. Muss nicht natürlich, ist aber ein Tipp.

Benne_87
10.02.2014, 11:26
Ist schon passiert :) sollte nur ein test sein. Hätte auch einfacher gemacht werden können, aber es funktioniert.