Lösung für das Problem in meinem Code

Hallo liebes Forum,

ich habe mich mal an etwas anderem Versucht der Code soll die Drehrichtung eines DC Motors ändern.

Pinbelegung:
13 = intLED für bereit blinken
12 = Relai für Rechtslauf
11 = Relai für Linkskauf
3 = Taster für Linkslauf
2 = Taster für Rechtslauf

Anschlussschema

nun der Code

//Definition
bool button0read = false;
bool button0on = false;
//Schaltdefinition
bool switch0 = false;
//Definition für Millis
unsigned long button0millis = 0;
//LED Definition
bool blinker = false;
unsigned long blinkerMillis = 0;
//Zeitabschaltung Relai
unsigned long relaiMillis = 0;

//Pinzuweisung
void setup() {
  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
}

void loop() {

  ledBlinker();

  setRelai(2, 3, 11, 12, 13, 0);
}

//**************
//* Funktionen *
//**************

//LED Funktion
void ledBlinker() {
  //Bereit blinken der LED
  if (millis() - blinkerMillis < 10) {
    blinker = true;
  } else {
    blinker = false;
  }

  if (millis() - blinkerMillis > 1500) {
    blinkerMillis = millis();
  }
  //Millis zurücksetzten
  if (blinkerMillis > millis()) {
    blinkerMillis = 0;
  }
}
//Relai Funktion
void setRelai(int buttonPin, int relaiPin, int ledPin, long offMillis) {
  buttonRead(buttonPin);
  if (millis() - relaiMillis > offMillis && offMillis > 0) {
    switch0 = false;
  }

  if (switch0 == true) {
    digitalWrite(relaiPin, true);
    digitalWrite(ledPin, true);
  } else {
    digitalWrite(relaiPin, false);
    digitalWrite(ledPin, blinker);
  }
}

//Taster Funktion
void buttonRead(int buttonPin) {
  button0read = digitalRead(buttonPin);

  //Tasterprellen kompensiert

  if (button0read == true) {
    button0millis = millis();
  }

  //Schatung aus Funktion (== vergleicht, && und, = gleichsetztend)

  if (button0read == false && button0on == false && millis() - button0millis > 10) {
    button0on = true;
  }

  //Schaltung an Funktion (!=negativiert)

  if (button0read == true && button0on == true) {
    button0on = false;
    switch0 = !switch0;
    relaiMillis = millis();
  }
}

leider gibt es einen Fehler den ich nicht verstehe

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden.
Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.

mfg ein Moderator.

Tippfehler ?

Die Fehlermeldung sagt doch eindeutig, was da falsch ist.
Deine Funktion hat weniger Argumente als der Aufruf dahin.
Das muss schon passen.
Wobei ich def. nicht verstehe wie da was funktionieren soll.

Du solltest den Sketch mal richtig kommentieren, damit auch andere den verstehen.

Ich hab den Code jetzt umgeschrieben bekomme jetzt eine andere Meldung und könnte Hilfe bei der Lösung brauchen

//Definition
bool button0readR = false;
bool button0onR = false;
bool button0readL = false;
bool button0onL = false;
//Schaltdefinition
bool switch0R = false;
bool switch0L = false;
//Definition für Millis
unsigned long button0millis = 0;
//LED Definition
bool blinker = false;
unsigned long blinkerMillis = 0;
//Zeitabschaltung Relai
unsigned long relaiMillis = 0;

//Pinzuweisung
void setup() {
  pinMode(2, INPUT_PULLUP);  //buttonPinR
  pinMode(3, INPUT_PULLUP);  //buttonPinL
  pinMode(11, OUTPUT);       //relaiPinL
  pinMode(12, OUTPUT);       //relaiPinR
  pinMode(13, OUTPUT);       //ledPin
}

void loop() {

  ledBlinker();

  setRelai(2, 3, 11, 12, 13, 0);
}

//**************
//* Funktionen *
//**************

//LED Funktion
void ledBlinker() {
  //Bereit blinken der LED
  if (millis() - blinkerMillis < 10) {
    blinker = true;
  } else {
    blinker = false;
  }

  if (millis() - blinkerMillis > 1500) {
    blinkerMillis = millis();
  }
  //Millis zurücksetzten
  if (blinkerMillis > millis()) {
    blinkerMillis = 0;
  }
}
//Relai Funktion
void setRelai(int buttonPinR, int buttonPinL, int relaiPinL, int relaiPinR, int ledPin, long offMillis) {
  //Drehrichtung R
  buttonReadR(buttonPinR);
  if (millis() - relaiMillis > offMillis && offMillis > 0) {
    switch0R = false, switch0L = false;
  }

  if (switch0R == true) {
    digitalWrite(relaiPinR, true);
    digitalWrite(ledPin, true);
  } else {
    digitalWrite(relaiPinR, false);
    digitalWrite(ledPin, blinker);
  }
  //Drehrichtung L
  buttonReadL(buttonPinL);
  if (millis() - relaiMillis > offMillis && offMillis > 0) {
    switch0L = false, switch0R = false;
  }

  if (switch0L == true) {
    digitalWrite(relaiPinL, true);
    digitalWrite(ledPin, true);
  } else {
    digitalWrite(relaiPinL, false);
    digitalWrite(ledPin, blinker);
  }
}

//Taster Funktion Drehrichtung R
void buttonReadR(int buttonPinR) {
  button0readR = digitalRead(buttonPinR);

  //Tasterprellen kompensiert

  if (button0readR == true) {
    button0millis = millis();
  }

  //Schaltung AUS Funktion (== vergleicht, && und, = gleichsetztend)

  if (button0readR == false && button0onR == false && millis() - button0millis > 10) {
    button0onR = true;
  }

  //Schaltung AN Funktion (!=negativiert)

  if (button0readR == true && button0onR == true) {
    button0onR = false;
    switch0R = !switch0R;
    relaiMillis = millis();
  }
  //Taster Funktion Drehrichtung L
  void buttonReadL(int buttonPinL) {
    button0readL = digitalRead(buttonPinL);

    //Tasterprellen kompensiert

    if (button0readL == true) {
      button0millis = millis();
    }

    //Schaltung AUS Funktion (== vergleicht, && und, = gleichsetztend)

    if (button0readL == false && button0onL == false && millis() - button0millis > 10) {
      button0onL = true;
    }

    //Schaltung AN Funktion (!=negativiert)

    if (button0readL == true && button0onL == true) {
      button0onL = false;
      switch0L = !switch0L;
      relaiMillis = millis();
    }
  }


Vielleicht könntet Ihr den Code mal bei euch einfügen und schauen ob ihr den Fehler findet. Ich komm einfach nicht drauf

Überprüfe die richtige Anordnung der {} Klammern.

Mal ehrlich, sollen wir dir jedesmal die Fehlermeldung vorlesen ?
Das kann Google viel besser.
Und du lernst da gleich was draus.

Das hilft mir leider nicht ich suche nach einer Lösung die ich nicht finde , Ich wende mich deshalb an das Forum weil ich noch ein blutiger Anfänger bin und hoffe hier Hilfe zu bekommen durch erfahrene Arduino & Co nutzer

Wo denkst du sind die klammern falsch? ich habe den Code für die drehrichtung R kopiert und für links eingefügt und angepasst

Gehe dein Sketch durch und überprüfe die richtige und logische Reihenfolge der {} Klammern.
Das ist ganz einfach, eigentlich.

hab ich schon mehr fach vielleicht bin ich einfach zu blind es zusehen ^^

Und kontrolliere deinen Sketch auf Schreibfehler.

Z.B. hier: "buttonReadR" vs. "button0readR"

Das sind alles Flusigkeitsfehler die du selbst finden musst.

Notfalls eine Brille aufsetzen.
Aber wozu haben wir da ein Forum ?

ich werde es für heute gut sein lassen ich weis nicht wo der fehler liegt vielleicht finde ich den fehler wann anders weiter mache

Wenn wir dir helfen sollen, dann musst du schon den Sketch so zeigen, das wir den auch richtig lesen können. Bei deinen gleichlautenden Variablen und Funktionen steigt keiner durch.
Dann noch keinerlei erklärende Kommentare, da ist es kein Wunder das selbst du nicht durchsteigst.

Und wo ist die Fehlermeldung, von der du schreibst ?

Ich könnte mir vorstellen, dass ihm Fehlermeldungen so doof findet, dass ihm sie gar nicht lesen will.
Am liebsten: Noch nicht einmal ignorieren.

1 Like

Oder....die Fehlermeldung ist so lang, dass diese hier nicht reinpasst.

https://www.learncpp.com/cpp-tutorial/a-strategy-for-debugging/

Oder man kann die komplette Fehlermeldung im Screenshot nicht lesen duck und weg

1 Like
//Definition
bool button0readR = false;
bool button0onR = false;
bool button0readL = false;
bool button0onL = false;
//Schaltdefinition
bool switch0R = false;
bool switch0L = false;
//Definition für Millis
unsigned long button0millis = 0;
//LED Definition
bool blinker = false;
unsigned long blinkerMillis = 0;
//Zeitabschaltung Relai
unsigned long relaiMillis = 0;

//Pinzuweisung
void setup() {
  pinMode(2, INPUT_PULLUP);  //buttonPinR
  pinMode(3, INPUT_PULLUP);  //buttonPinL
  pinMode(11, OUTPUT);       //relaiPinL
  pinMode(12, OUTPUT);       //relaiPinR
  pinMode(13, OUTPUT);       //ledPin
}

void loop() {

  ledBlinker();

  setRelai(2, 3, 11, 12, 13, 0);
}

//**************
//* Funktionen *
//**************

//LED Funktion
void ledBlinker() {
  //Bereit blinken der LED
  if (millis() - blinkerMillis < 10) {
    blinker = true;
  } else {
    blinker = false;
  }

  if (millis() - blinkerMillis > 1500) {
    blinkerMillis = millis();
  }
  //Millis zurücksetzten
  if (blinkerMillis > millis()) {
    blinkerMillis = 0;
  }
}
//Relai Funktion
void setRelai(int buttonPinR, int buttonPinL, int relaiPinL, int relaiPinR, int ledPin, long offMillis) {
  //Drehrichtung R
  buttonReadR(buttonPinR);
  if (millis() - relaiMillis > offMillis && offMillis > 0) {
    switch0R = false, switch0L = false;
  }

  if (switch0R == true) {
    digitalWrite(relaiPinR, true);
    digitalWrite(ledPin, true);
  } else {
    digitalWrite(relaiPinR, false);
    digitalWrite(ledPin, blinker);
  }
  //Drehrichtung L
  buttonReadL(buttonPinL);
  if (millis() - relaiMillis > offMillis && offMillis > 0) {
    switch0L = false, switch0R = false;
  }

  if (switch0L == true) {
    digitalWrite(relaiPinL, true);
    digitalWrite(ledPin, true);
  } else {
    digitalWrite(relaiPinL, false);
    digitalWrite(ledPin, blinker);
  }
}

//Taster Funktion Drehrichtung R
void buttonReadR(int buttonPinR) {
  button0readR = digitalRead(buttonPinR);

  //Tasterprellen kompensiert

  if (button0readR == true) {
    button0millis = millis();
  }

  //Schaltung AUS Funktion (== vergleicht, && und, = gleichsetztend)

  if (button0readR == false && button0onR == false && millis() - button0millis > 10) {
    button0onR = true;
  }

  //Schaltung AN Funktion (!=negativiert)

  if (button0readR == true && button0onR == true) {
    button0onR = false;
    switch0R = !switch0R;
    relaiMillis = millis();
  }
  //Taster Funktion Drehrichtung L
  void buttonReadL(int buttonPinL) {
    button0readL = digitalRead(buttonPinL);

    //Tasterprellen kompensiert

    if (button0readL == true) {
      button0millis = millis();
    }

    //Schaltung AUS Funktion (== vergleicht, && und, = gleichsetztend)

    if (button0readL == false && button0onL == false && millis() - button0millis > 10) {
      button0onL = true;
    }

    //Schaltung AN Funktion (!=negativiert)

    if (button0readL == true && button0onL == true) {
      button0onL = false;
      switch0L = !switch0L;
      relaiMillis = millis();
    }
  }

der oben stehende Code bringt in Arduino IDE den fehler:
image
und markiert folgende bereiche rot:
image
image

mehr ist durch den Fehler nicht zusehen und da ich nicht weis wie ich den Fehler beseitigen kann frage ich euch es bringt mir also nichts von euch kommentare zubekommen wie kommentier deinen code mal besser oder frag google etc
Ich hoffe hier mal auf einen zutreffen der mir sachlich erklären kann wo mein fehler liegt
Ich habe so gut es geht im Code kommentare platziert damit ich es das nöchste mal wieder verstehe was dort passieren soll

Siehe Post #6.