void .... will nicht wie ich will

hallo miteinander,

ich versuche gerade auf einen tasten Druck zu reagieren.

Das Klappt auch eigentlich, ... nur das mein VOID teil nicht ausgeführt wird :frowning:

eigentlich ist der VOID teil in einer Extra Befehl.h Datei untergebracht, doch da es nicht klapt habe ich das Prog mal etwas runter gekürzt und den einen Befehl in die INO kopiert, doch da klaut es auch nicht :frowning:

Könnte mir da jemand etwas auf die Sprünge helfen, ...

Gruß Mücke

// *****************************************************************

// Angeschloßen 

// PIN 02 Taster 
// PIN 13 LED 

// Das Program soll die Dauer des Tastendruckes ausgeben
// Wenn die taste Gedrückt ist wird die LED Eingeschaltet

// *****************************************************************

  int            Taster        =  2;
  int            LED           = 13;
//  long           Taster_dauer  =  1;  
//  long           Taster_start  = -1; 
//  unsigned long  looptime      = -1;
//  unsigned long  looprun       = millis();  
//  int            Baudrate      = 9600;
  
// #include "Funktion.h"
// #include "Befehl.h"

void setup() 
  {
    Serial.begin(9600);                   // öffnet die serielle Datenübertragung mit 9600 bit/s
    pinMode(LED,     OUTPUT);             // LED PIn als Ausgang definiren
    pinMode(Taster,   INPUT);             // Taster PIN als Eingang definiren 
  }

void loop()
  { 
//    looptime = millis() - looprun;
//         if (Taster_dauer >= 5 )    { Befehl_Daten_Ausgabe; }
//         if (Taster_dauer >  0 )    { Befehl_Daten_Sichern; }
//         if (looptime >= 1000 )     { Befehl_Daten_show; }
         if (digitalRead(Taster) == HIGH)
          {
            digitalWrite(LED, HIGH);
            Befehl_Test;
          }
          digitalWrite(LED, LOW);
  }
  
// ***********************************************************************************************
//                                   Befehl_Test
// ***********************************************************************************************
void Befehl_Test()
  { 
   Serial.println("OK, Befehl_Test");
  }

void ist der Rückgabe-Wert! Die Dinger heißen Funktionen. Nicht "voids"

Und die werden mit () ausgeführt: Befehl_Test()

Der Name einer Funktion ohne () ist deren Adresse. Deshalb kompiliert das, aber produziert eine Warnung (die du nicht siehst, weil die in der Arduino IDE abgeschaltet sind).

hmm, Ok, bringt mich jetzt nicht weiter :cry:

ich habe das aus meinem Anderen Projekt 1:1 Kopiert, da hat es geklappt :frowning:
Komisch, ...

wie müsste ich das denn dann richtig schreiben?

Serenifly:
Und die werden mit () ausgeführt: Befehl_Test()

Hmm, kannst du mir dann mal sagen warum meine Firmware für die Tropfen Box funktioniert und das richtig, …

(Firmware ist im Anhang)

ich schaue mir das mit den Funktion jetzt noch mal an. und Taste mich langsam voran.

EDIT:

man bin ich doooooooooofffffffffff jetzt verstehe ich was du mit den () meinst, arrrrr… ich könnt Grad aus dem Fenster Springen, … (wobei das ist schwer bin im Keller)

man manchmal sind es wirklich die kleinen Dinge die einen Dooooffff aussehen lassen, … Arrrrrr,

Danke noch mal.

Firmware_MG_3_3.zip (4.98 KB)

Wenn Warnungen aktiviert wären, würde das sofort auffallen:

ArduinoTest.ino:19:6: warning: statement is a reference, not call, to function 'func' [-Waddress]
ArduinoTest.ino:19:6: warning: statement has no effect [-Wunused-value]

Die erste Zeile sagt es klar. Es ist eine Referenz (d.h eine Adresse auf eine Funktion) und kein Funktionsaufruf. Und weil man mit der Adresse nichts macht hat es keinen Effekt - daher die zweite Warnung.

nach langem Googlen hätte ich die Fehlermeldung wahrscheinlich auch hier nachgefragt :wink:

Hätte ich mir die Firmware aus der ich des heraus Kopiert habe da ich mal wider nicht wusste wie ich das gemacht hatte, richtig angeschaut hätte mir auffallen sollen das ich nicht 1:1 es Kopiert habe, ...

naja, jetzt Klappt es, :slight_smile:

Jetzt muss ich mir Gedanken machen wie ich herausfinde wie lange mein Taster gedrückt wurde, ...
Ohne das ich das Programm dabei unterbreche.

EDIT:

He he, ich habe es hin bekommen, die Zeit zu messen wie lange die Taste gedrückt wird Ohne das der Code angehalten wird :slight_smile: Hoffe ich zumindest

Datei Linearfuehrung_Pruefen.ino

  int            Taster           =  2;         // PIN für Taster
  int            LED              = 13;         // PIN für LED
  long           Taster_dauer     = -1;         // Kurzzeitgedächtnis
  long           Taster_start     = -1;         // Kurzzeitgedächtnis 
  unsigned long  looptime         = -1;         // Kurzzeitgedächtnis
  unsigned long  looprun          = millis();   // Kurzzeitgedächtnis
  int            Baudrate         = 9600;       // Serielle Geschwindigkeit 
  int            Daten_show_Strep = 5000;       // alle 5 sekunden sollen daten angezeigt werden 

 #include "Funktion.h"
 #include "Befehl.h"

void setup() 
{
 Serial.begin(9600);                   // öffnet die serielle Datenübertragung mit 9600 bit/s
 pinMode(LED,     OUTPUT);             // LED PIn als Ausgang definiren
 pinMode(Taster,   INPUT);             // Taster PIN als Eingang definiren 
}

void loop()
{
 looptime = millis() - looprun;
       if (Taster_dauer >= 2000 )         { Befehl_Daten_Ausgabe(); }
  else if (Taster_dauer >  0 )            { Befehl_Daten_Sichern(); }
  else if (looptime >= Daten_show_Strep ) { Befehl_Daten_show(); }
  else if (digitalRead(Taster) == HIGH)   { Befehl_Taster_HIGH(); }
  else if (digitalRead(Taster) == LOW )   { Befehl_Taster_LOW(); }  
  digitalWrite(LED, LOW);
}

Datei: Befehl.h

// ***********************************************************************************************
//                                   Befehl_Daten_Ausgabe
// ***********************************************************************************************
void Befehl_Daten_Ausgabe()
  { 
   Serial.println(F("OK, Befehl_Daten_Ausgabe"));
   Serial.println(F("OK, Tastendauer >= 2.000 ms"));
   Serial.print(F("Taster_dauer = "));
   Serial.println(Taster_dauer);
   Serial.println("");
   Taster_start = -1;
   Taster_dauer = -1;
  }
  
// ***********************************************************************************************
//                                   Befehl_Daten_Sichern
// ***********************************************************************************************
void Befehl_Daten_Sichern()
  { 
   Serial.println(F("OK, Befehl_Daten_Sichern"));
   Serial.println(F("OK, Tastendauer > 0 ms"));
   Serial.print(F("Taster_dauer = "));
   Serial.println(Taster_dauer);
   Serial.println("");
   Taster_start = -1;
   Taster_dauer = -1;
  }

// ***********************************************************************************************
//                                   Befehl_Daten_show
// ***********************************************************************************************
void Befehl_Daten_show()
  { 
   Serial.println(F("OK, Befehl_Daten_show"));
   Serial.print(F("Looptime = "));
   Serial.println(looptime);
   Serial.println("");
   looprun = millis();  
  }

// ***********************************************************************************************
//                                   Befehl_Taster_HIGH
// ***********************************************************************************************
void Befehl_Taster_HIGH()
 { 
//  Serial.println(F("OK, Befehl_Taster_HIGH"));
  if (Taster_start == -1) { Taster_start = millis(); }
  digitalWrite(LED, HIGH);
 }

// ***********************************************************************************************
//                                   Befehl_Taster_LOW
// ***********************************************************************************************
void Befehl_Taster_LOW()
 { 
//  Serial.println(F("OK, Befehl_Taster_LOW"));
  if (Taster_start != -1)
   { Taster_dauer = millis() - Taster_start; } 
  digitalWrite(LED, LOW);
 }