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
  Map funktion bei Fernsteuerung marsmännchen 7 354 23.04.2018 12:42
Letzter Beitrag: hotsystems
  millis() zählt nicht weiter sowerum 8 521 09.04.2018 17:55
Letzter Beitrag: Tommy56
  Einen Startwert für den Millis() Zähler einstellen?? Franz54 9 520 01.04.2018 17:01
Letzter Beitrag: Franz54
  Millis verzögern Funktion? malsehen 14 670 29.03.2018 21:47
Letzter Beitrag: hotsystems
  Funktionen und deren Rückgabewerte, Verständnisproblem HarryS 6 397 07.02.2018 22:58
Letzter Beitrag: Tommy56
  Eine Funktion verlassen Jan5663 8 864 18.12.2017 13:49
Letzter Beitrag: Chopp
  Übergabe von Arrays an Funktionen Marcel 4 616 31.10.2017 13:28
Letzter Beitrag: Tommy56
  Werden ungenutzte Funktionen weg optimiert? BennIY 1 472 03.10.2017 09:06
Letzter Beitrag: Tommy56
  blinken mit millis Gonmaus 13 1.423 08.09.2017 21:12
Letzter Beitrag: Bitklopfer
Lightbulb mehrere Funktionen mit Schalter mechastef 7 1.340 21.08.2017 22:34
Letzter Beitrag: SkobyMobil

Gehe zu:


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