INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Funktionen mit der millis() Funktion
16.05.2018, 20:02 (Dieser Beitrag wurde zuletzt bearbeitet: 16.05.2018 20:08 von Zis.)
Beitrag #1
Funktionen mit der millis() Funktion
Hallo Leute....

Ich wahr heute wahrscheinlich den ganzen Tag vor der Arduino IDE weil ich eine dachte ich einfache Funktion realisieren wollte doch es will nicht so recht.
Eine recht einfache Funktion doch wenn ich sie Umsätzen will ist doch etwas kniffliger als ich dachte.
Kurz zur Funktion:
Ich habe einen Taster und einen Ausgang den ich mithilfe des Tasters für eine gewisse Zeit freischalten möchte, damit die anderen Programm Funktionen nicht durch ein delay gestört werden habe ich mich für die millis entschieden. Nichts einfacher als das, dachte ich mir...
1.In der Loop: Taster wird ausgelesen und der Zustand an eine bool Variable übergeben.
2.Sobald der Taster gedrückt wird sol der Ausgang aktiviert werden und für sagen wir mal 5sec aktiv bleiben danach soll er sich wieder deaktivieren.

Als erstes habe ich die Tastenabfrage geschrieben "bool TasteStatus = digitalRead(Taste);" gleich danach einen Zeitstempel an die Variable currentMillis übergeben.
In der ersten if Funktion wird überwacht ob der Taster gedrückt ist, ist das der Fall dann geht der Ausgang an(ON).
In der nächsten if Abfrage wird ermittelt ob zwischen den millis und dem Zeitstempel der Abstand (die 5sec) gross genug ist um den Code darunter auszuführen.
Ist das der Fall soll der Ausgang wieder aus(OFF) gehen.

Tatsächlich geht der Ausgang an aber nicht wieder aus...
Ich hab schon etliche Varianten ausprobiert mit den lustigsten Ergebnissen.

Die Variante im Volgendem Code trift Meine Funktion fasst nur entsteht der komische Effekt das der Ausgang je nach dem, zur welchen Zeit ich den Knopf gedrückt habe für kürzere Zeit an und wieder aus geht.
Manchmal ist es 1s manchmal 3.567s oder 2.15 usw. aber nie 5sec.

PHP-Code:
unsigned long lastTime 0;
unsigned long currentMillis;

const 
long onTime 20000;
bool SW_D_state;

#define SW_D 4
#define DISPLAY 10


void setup() {

  
Serial.begin(9600);
  
pinMode(SW_DINPUT_PULLUP);
  
pinMode(DISPLAYOUTPUT);
  
digitalWrite(DISPLAYHIGH);
  
}

void loop() {
      
SW_D_state digitalRead(SW_D);
      
currentMillis millis();
   if (
SW_D_state == LOW){
      
delay(200);
      
digitalWrite(DISPLAYLOW);
      
Serial.print("Display ON    ");
      
Serial.println(millis());
      }
   if (
currentMillis lastTime >= onTime){
      
lastTime currentMillis;
      
digitalWrite(DISPLAYHIGH);
      
Serial.print("Display OFF   ");
      
Serial.println(currentMillis);
      }
      
   


Ich werde für heute noch ein bisschen meine schlauen Bücher durchstöbern vieleicht finde ich da noch eine Lösung, vieleicht wisst aber ihr eine bessere Ideee wie man das lösen könnte.

Danke im Voraus für eure Unterstützung.[/b]
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.05.2018, 20:39
Beitrag #2
RE: Funktionen mit der millis() Funktion
Wenn der Taster betätigt wird, dann setzt Du lastMillis = currentMillis und Du musst Dir den Status merken. (ungetestet)
Code:
boolean displayAn = false;  // Statusvariable
...
void loop() {
      SW_D_state = digitalRead(SW_D);
      currentMillis = millis();
   if (!displayAn && SW_D_state == LOW){ // Wenn aus und Taster
      lastTime = currentMillis;
      displayAn = true;
      digitalWrite(DISPLAY, LOW);
      Serial.print("Display ON    ");
      Serial.println(millis());
      }
   if (dispaly && currentMillis - lastTime >= onTime){ // Wenn an und Leuchtzeit vorbei
      displayAn = false;
      digitalWrite(DISPLAY, HIGH);
      Serial.print("Display OFF   ");
      Serial.println(currentMillis);
      }
}

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.05.2018, 21:44
Beitrag #3
RE: Funktionen mit der millis() Funktion
Exakt 5 Sekunden!
Vorsichtshalber ein zweites mal gedrückt 5 sec. drittes mal 5 sec.
Exzellente Arbeit!
Mein Freund wie kann ich dir nur danken?
Funktioniert 1A hab es auch schon in meinem Haupt Scatch ausprobiert, funktioniert bestens.
Zwar hast du einen kleinen Schreibe Fehler gemacht und ich habe das "dispaly" vorsichtshalber mit "displayAn" ersetzt, super.

Ich frag mich immer noch was mein Überlegungs Fehler war, das wird aber wohl was für die Traum Welt sein...
Danke nochmals!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.05.2018, 21:50
Beitrag #4
RE: Funktionen mit der millis() Funktion
Klar, bei ungetestet hat man keinen Compiler, der die Tippfehler findet Wink

Lerne die Grundlagen und die Gedanken hinter dem Code zu verstehen. Das ist das Wichtigste.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  delay-millis()-while-Sensorenabfrage RCudino 10 556 21.03.2020 15:30
Letzter Beitrag: Tommy56
  & Zeichen in Funktionen Franz54 4 253 08.03.2020 22:06
Letzter Beitrag: Franz54
  Funktion aufrufen senseman 14 589 09.02.2020 21:42
Letzter Beitrag: senseman
  Funktion random() Bau3r 1 197 02.02.2020 16:23
Letzter Beitrag: Tommy56
  Funktion mit Schieberegister Bau3r 3 254 02.02.2020 12:04
Letzter Beitrag: Tommy56
  Ein Taster mit verschiedenen Funktionen? kama92 21 1.408 14.01.2020 22:40
Letzter Beitrag: kama92
  Millis anstatt delay ThorstenP 25 1.974 29.11.2019 16:34
Letzter Beitrag: Tommy56
  1 Knopf, mehrere Funktionen Muff4 2 501 23.10.2019 17:12
Letzter Beitrag: Muff4
  Millis benutzen statt delay beame 9 1.770 21.06.2019 16:16
Letzter Beitrag: Franz54
  Reihenfolge der Funktionen in der IDE Bernd666 7 1.180 14.03.2019 23:09
Letzter Beitrag: Bernd666

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste