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
Funktion aufrufen
08.02.2020, 21:33 (Dieser Beitrag wurde zuletzt bearbeitet: 08.02.2020 21:49 von senseman.)
Beitrag #1
Funktion aufrufen
Hallo
ich würde gerne eine Fuktion in meinem Programm aufrufen.

Code:
const int relais = 2;    // D4 A1 = PIN 7 für Relay oder Transistor am ATTINY85
const int LightDetector = A2;  // D2 A2 = PIN 3 für LDR Sensor am ATTINY85

void setup() {

  pinMode (relais, OUTPUT);
  pinMode (LightDetector, INPUT);

}

void loop() {
  static int LightDetectorState = 0;                      //Das Keyword 'static' wird benutzt, um einer Funktion eine Variable zu geben,
  //die nur dort sichtbar ist und zusätzlich auch zwischen Funktionsaufrufen ihren Wert beibehält.
  //Diese Variable hat auch nur eine feste Adresse welche bei jedem Funktionsaufruf gleich bleibt.
  // Im Vergleich dazu werden normale lokale Variablen jedes Mal erzeugt, wenn die Funktion aufgerufen wird und am Ende auch wieder gelöscht.
  //Static Variablen werden zum ersten und einzigen Mal erzeugt, wenn die Funktion zum ersten Mal aufgerufen wird.
  static unsigned long LastChangeTime = 0;                // Behält die letzte Zeit in der sich am Lichtsensor etwas geändert hat!

  unsigned long now = millis();                           //Gibt die Anzahl an Millisekunden zurück,
  //die vergangen sind seit dem das Arduino Board das aktuelle Programm ausführt!
  int NewLightDetectorState = digitalRead(LightDetector); // newLightdetectorState fragt den Status des lightdetector ab.

  if (NewLightDetectorState != LightDetectorState) {      // Status geändert ? Ja oder Nein ?  (!= bedeutet ungleich)
    LastChangeTime = now;                                // Sobald ein ungleicher Wert festgestellt wird übernimmt "LastChangeTime" den Wert von "now" also die Zeit die nach dem Start des Sketch vergangen ist.
    LightDetectorState = NewLightDetectorState;          // "LightDetectorState" nimmt nun den Wert des "NewLightDetectorState" an.
  } else                                                   //
    if (now - LastChangeTime >= 30000); {               // Bleibt NewLightDetectorState und LightDetectorState 30 sek ungleich so wird…..

    digitalWrite(relais, LightDetectorState);       // LightDetectorState je nach Zustand des LightDetector an bzw. aus geschaltet.
  
  }
}

void Uhr(long val) {
Uhr anzeige
  
}

Code:
digitalWrite(relais, LightDetectorState);

schaltet eine LED an oder aus. hier möchte ich nun die Uhr ein aus schalten als LCD Ausgabe

Ersetze ich nun die zeile oben durch
Code:
Uhr(millis() / 1000);
um die Funktion Uhr zu starten wird sie nach Zeit nicht mehr deaktiviert.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.02.2020, 22:03
Beitrag #2
RE: Funktion aufrufen
Kannst Du mal erklären, was deine Funktion Uhr machen soll? Speziell was der Austausch des digitalWrite durch den Aufruf von Uhr bewirken soll?
Das sind doch 2 ganz unterschiedliche Dinge. Ich verstehe jedenfalls nicht, was Du da bezweckst.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.02.2020, 22:29
Beitrag #3
RE: Funktion aufrufen
Die Zeile
Code:
digitalWrite(relais, LightDetectorState);
schaltet Lichtabhänig einen Ausgang.
Statt des Ausgang möchte ich eine Uhr auf einem Display anzeigen lassen.
Es geht einfach nur darum wie ich die Fuktion auf rufen muss und diese sich dann wieder deaktivier mit hilfe des LightDetectorState.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.02.2020, 22:42
Beitrag #4
RE: Funktion aufrufen
(08.02.2020 22:29)senseman schrieb:  Die Zeile
Code:
digitalWrite(relais, LightDetectorState);
schaltet Lichtabhänig einen Ausgang.
Statt des Ausgang möchte ich eine Uhr auf einem Display anzeigen lassen.
Es geht einfach nur darum wie ich die Fuktion auf rufen muss und diese sich dann wieder deaktivier mit hilfe des LightDetectorState.

Und was von der Uhr möchtest du schalten ?

Die Beleuchtung des Displays ?
Oder das Display selbst ?
Oder was sonst ?

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.02.2020, 23:00
Beitrag #5
RE: Funktion aufrufen
Es doch egal was die Fuktion macht. es geht mir darum wie ich die Fuktion ein aus schalte.
von mir aus kann die Funktion auch heissen:

Kontrolle_ob_sketch_blokiert(500);

void Kontrolle_ob_sketch_blokiert (const unsigned int interval) // Kontrolle ob Sketch blockiert
{
static unsigned long last_ms = 0;
static bool state = LOW;

if (millis() - last_ms >= interval) {
last_ms = millis();
state = !state;
digitalWrite(led, state);
}

das problem ist doch wie ersetze ich zeile

digitalWrite(relais, LightDetectorState); // Relais schaltet abhängig vom LightDetectorState
das möchte ich nun durch eine Funktion wie z.b.

Uhr(millis() / 1000); // Der text in der Klammer dient zur ausgabe in sekunden.
oder
Kontrolle_ob_sketch_blokiert(500); // Abfrage alle 500ms
ersetzen was in der Fuktion passiert ist Nebensache.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.02.2020, 23:03
Beitrag #6
RE: Funktion aufrufen
(08.02.2020 23:00)senseman schrieb:  Es doch egal was die Fuktion macht. es geht mir darum wie ich die Fuktion ein aus schalte.
.....

Schön, wenn es dir egal ist.
Wenn wir dir helfen sollen, möchten wir auch mal genaue Angaben haben.

So ist mir dein Problem auch mal eben egal.

Ist halt so....

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.02.2020, 23:10 (Dieser Beitrag wurde zuletzt bearbeitet: 08.02.2020 23:11 von senseman.)
Beitrag #7
RE: Funktion aufrufen
Was für eine genaue Angabe ?
Die genaue Angabe die relevant ist, ist das ich eine Funktion mit Rückgabe dort einbauen möchte.
dann nehmen wir als Bsp.:

Uhr(500);

Code:
void Uhr (const unsigned int interval)      // Uhr
{
  static unsigned long last_ms = 0;
  static bool state = LOW;

  if (millis() - last_ms >= interval) {
    last_ms = millis();
    state = !state;  
    digitalWrite(LED, state);
  }
und lassen eine LED leuchten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.02.2020, 23:14 (Dieser Beitrag wurde zuletzt bearbeitet: 08.02.2020 23:15 von hotsystems.)
Beitrag #8
RE: Funktion aufrufen
(08.02.2020 23:10)senseman schrieb:  Was für eine genaue Angabe ?
Die genaue Angabe die relevant ist, ist das ich eine Funktion mit Rückgabe dort einbauen möchte.
dann nehmen wir als Bsp.:

Uhr(500);

Code:
void Uhr (const unsigned int interval)      // Uhr
{
  static unsigned long last_ms = 0;
  static bool state = LOW;

  if (millis() - last_ms >= interval) {
    last_ms = millis();
    state = !state;  
    digitalWrite(LED, state);
  }
und lassen eine LED leuchten

Na geht doch.
Und den Aufruf der Funktion hast du schon selbst geschrieben:

Uhr(500);

Mehr ist da in dem Fall nicht zu machen.
Nur das dein Beispiel keine Rückgabe ist, sondern eine Parameter-Übergabe.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Funktion random() Bau3r 1 133 02.02.2020 16:23
Letzter Beitrag: Tommy56
  Funktion mit Schieberegister Bau3r 3 162 02.02.2020 12:04
Letzter Beitrag: Tommy56
  array aus Methode/Funktion sepp01 3 915 14.10.2018 19:16
Letzter Beitrag: Tommy56
  Funktionen mit der millis() Funktion Zis 3 2.109 16.05.2018 21:50
Letzter Beitrag: Tommy56
  Map funktion bei Fernsteuerung marsmännchen 7 1.402 23.04.2018 12:42
Letzter Beitrag: hotsystems
  Millis verzögern Funktion? malsehen 14 3.350 29.03.2018 21:47
Letzter Beitrag: hotsystems
  Eine Funktion verlassen Jan5663 8 4.156 18.12.2017 13:49
Letzter Beitrag: Chopp
  switch case funktion ausser halb loop ??? huber5093 13 4.257 12.04.2017 15:26
Letzter Beitrag: Tommy56
  URL aufrufen vom Web Server toto1975 4 2.701 07.02.2017 22:59
Letzter Beitrag: hotsystems
  Funktion mit Parameterübergabe - u8g torsten_156 8 3.431 22.06.2016 18:53
Letzter Beitrag: Pit

Gehe zu:


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