Sorry schon wieder probleme mit meinem Code

Bei der Frage Probleme mit meinem Code für Servo Ansteuerung - Deutsch - Arduino Forum (kann mir jemand Sagen wie man das zu nem anklickbaren link macht) wurde mir empfohlen bei meinem code Strukturen zu nutzen naja das versuche ich im Moment und verstehe nicht warum 'boolean' does not name a type und dasselbe für byte und ebenfalls so ein probleme für millis() bekomme. Hier mein code in dem eigenen Tap Motor.h

#include <Servo.h>


class Motor {
    Servo myservo;

  private:
    boolean Fertig;
    int StepTime;
    int LastTime = 0;
  public:
    boolean Time1[100];
    int Time2[100];
    byte NewPosition[100];
    byte OldPosition;
    byte pin;
    int PostureNumber;

    void Attaching() {
      myservo.attach(pin);
    }


    boolean goPosition() {
      if (NewPosition[PostureNumber] == OldPosition) {
        return true;
        Fertig = true;
      }

      else {
        return false;
        if (Fertig = true) {
          if (Time1[PostureNumber] == true) {
            StepTime = Time2[PostureNumber];
          }
          if (Time1[PostureNumber] == false) {
            if (OldPosition < NewPosition[PostureNumber]) {
              StepTime = (Time2[PostureNumber] / (NewPosition[PostureNumber] - OldPosition));
            }
            if (OldPosition > NewPosition[PostureNumber]) {
              StepTime = (Time2[PostureNumber] / (OldPosition - NewPosition[PostureNumber]));
            }
          }
          Fertig = false;
        }
        if (millis() - LastTime > StepTime) {
          if (OldPosition > NewPosition[PostureNumber]) {
            OldPosition++;
            myservo.write(OldPosition);
            LastTime = millis();
          }
          if (OldPosition < NewPosition[PostureNumber]) {
            OldPosition--;
            myservo.write(OldPosition);
            LastTime = millis();
          }
        }

      }
    }//Ende der Funktion

};//Ende der Strucktur

Muss ich vielleicht wenn ich nicht direkt im "sketch" (weiß nicht wie ich das anders nennen soll) programmiere irgendeine libary einfügen?
schonmal vielen Dank an alle

(deleted)

und verstehe nicht warum

Typen welche genutzt werden wollen, müssen auch definiert/eingebunden werden!

Muss ich vielleicht wenn ich nicht direkt im "sketch" (weiß nicht wie ich das anders nennen soll) programmiere irgendeine libary einfügen?

In der Hauptübersetzungseinheit passiert das automatisch.
In allen anderen Übersetzungseinheiten musst du das händisch tun,

#include <Arduino.h>
#include <Servo.h>


class Motor {
    Servo myservo;

Danke funktioniert jetzt soweit ich hatte leider nur einen älteren post gefunden wo es hieß das diese libary eingefügt werden muss: #include "WProgram.h"

Ace_Dark:
Probleme mit meinem Code für Servo Ansteuerung - Deutsch - Arduino Forum (kann mir jemand Sagen wie man das zu nem anklickbaren link macht)

Indem Du das nicht einfach in den Text kopierst, sondern dazu den link-Button nutzt ( 12.Button oben im Editor:Probleme mit meinem Code für Servo Ansteuerung - Deutsch - Arduino Forum

Zeig auch mal wo und wie Du diese .h-Datei einbindest. Davon hängt ab, was Du gegebenenfalls zusätzlich einbinden musst.

Muss ich vielleicht wenn ich nicht direkt im "sketch" (weiß nicht wie ich das anders nennen soll) programmiere irgendeine libary einfügen?

Ja.
Aber warum schreibst du keine .ino Datei, oder warum verwendest du boolean in einer .cpp?

Ace_Dark:
#include "WProgram.h"

Das gibt es schon lange nicht mehr

Und der korrekte C++ Datentyp ist nunmal bool. boolean hat man wahrscheinlich mal eingeführt weil es das in Java gibt. Aber das ist nur ein typedef in der Arduino Software

michael_x:
Ja.
Aber warum schreibst du keine .ino Datei, oder warum verwendest du boolean in einer .cpp?

Hmmm...

Libraries bestehen gerne aus eigenständigen Übersetzungseinheiten.
Also aus *.h und *.cpp Dateien.

Dann ist das Pflicht.

Gegen eigenständigen Übersetzungseinheiten gibt es grundsätzlich nichts einzuwenden, denke ich mal.

Beschleunigt sogar den Übersetzungsvorgang, erst beim zweiten Mal, aber immerhin.

Serenifly:
Aber das ist nur ein typedef in der Arduino Software

Wobei sie selbst inziwschen davon abraten, ihn zu verwenden:

boolean is a non-standard type alias for bool defined by Arduino. It’s recommended to instead use the standard type bool, which is identical.

Anfangs war boolean sogar mal as unsigned char definiert. Das hat in bestimmten Situationen zu Fehlern im Vergleich mit true/false geführt. Deshalb habe ich das nie verwendet

Ja, boolean ist veraltet.
bool ist der neue Standard.

AVR gcc:

stdbool.h (liegt dem Compiler bei)
#define bool _Bool

Und _Bool ist ein, dem Compiler innewohnender, nativer Datentype.

ok danke also bool statt boolean nutzen also das Folgende ist der komplette code schon verbessert bin jetzt noch auf Fehler Suche da er noch nicht richtig funktioniert schicke ihn jetzt mal zur Vollständigkeit halber rein (konstruktive Kritik natürlich gerne)

also Motor.h:

#include <Servo.h>
#include <Arduino.h>

class Motor {
    Servo myservo;

  private:
    boolean Fertig = true;
    int StepTime;
    int LastTime = 0;
  public:
    boolean Time1[10];
    int Time2[10];
    byte NewPosition[10];
    byte OldPosition;
    byte pin;
    int PostureNumber;

    Motor (int pi) {
      pin = pi;
    }

    void Al(char NM2, char a, char b, char c) {
      Time1[NM2] = a;
      Time2[NM2] = b;
      NewPosition[NM2] = c;
    }

    boolean goPosition() {
      myservo.attach(pin);
      if (NewPosition[PostureNumber] == OldPosition) {
        Fertig = true;
        Serial.println("Abgeschlossen");
        return true;
      }

      else {
        if (Fertig == true) {
          if (Time1[PostureNumber] == true) {
            StepTime = Time2[PostureNumber];
          }
          if (Time1[PostureNumber] == false) {
            if (OldPosition < NewPosition[PostureNumber]) {
              StepTime = (Time2[PostureNumber] / (NewPosition[PostureNumber] - OldPosition));
            }
            if (OldPosition > NewPosition[PostureNumber]) {
              StepTime = (Time2[PostureNumber] / (OldPosition - NewPosition[PostureNumber]));
            }
          }
          Fertig = false;
          Serial.println(StepTime);
        }

        if (millis() - LastTime > StepTime) {
          if (OldPosition > NewPosition[PostureNumber]) {
            OldPosition++;
            myservo.write(OldPosition);
            LastTime = millis();
          }
          if (OldPosition < NewPosition[PostureNumber]) {
            OldPosition--;
            myservo.write(OldPosition);
            LastTime = millis();
          }
        }
return false;
      }
    }//Ende der Funktion

};//Ende der Strucktur

und der "Maincode":

#include "motor.h"

boolean proof[5];
short T = 3000;


Motor M0(3);
Motor M1(5);
Motor M2(6);
Motor M3(9);
Motor M4(10);


void R() {
  if (proof[0] && proof[1] && proof[2] && proof[3] && proof[4]) {
    M0.PostureNumber++;
    M1.PostureNumber++;
    M2.PostureNumber++;
    M3.PostureNumber++;
    M4.PostureNumber++;
    proof[0] = false;
    proof[1] = false;
    proof[2] = false;
    proof[3] = false;
    proof[4] = false;
  }
  else {
    if (proof[0] == false) {
      proof[0] = M0.goPosition();
    }
    if (proof[1] == false) {
      proof[1] = M1.goPosition();
    }
    if (proof[2] == false) {
      proof[2] = M2.goPosition();
    }
    if (proof[3] == false) {
      proof[3] = M3.goPosition();
    }
    if (proof[4] == false) {
      proof[4] = M4.goPosition();
    }
  }
}

void Allocation(byte PN, byte w1, byte w2, byte w3, byte w4, byte w5, byte w6, byte w7, byte w8, byte w9, byte w10, byte w11, byte w12, byte w13, byte w14, byte w15) {
  M0.Al(PN, w1, w2, 3);
  M1.Al(PN, w4, w5, 6);
  M2.Al(PN, w7, w8, 9);
  M3.Al(PN, w10, w11, 12);
  M4.Al(PN, w13, w14, 15);
}

void setup() {

  Serial.begin(9600);
  Serial.println("Los");

  M0.OldPosition = 90;
  M1.OldPosition = 90;
  M2.OldPosition = 90;
  M3.OldPosition = 90;
  M4.OldPosition = 90;

  Allocation(1, false, T, 160, false, T, 85, false, T, 5, false, T, 50, false, T, 180);
  Allocation(2, false, T, 170, false, T, 85, false, T, 7, false, T, 57, false, T, 180);
  Allocation(3, false, T, 179, false, T, 98, false, T, 20, false, T, 32, false, T, 180);
  Allocation(4, false, T, 170, false, T, 110, false, T, 25, false, T, 40, false, T, 180);
  Allocation(5, false, T, 160, false, T, 100, false, T, 23, false, T, 49, false, T, 180);
  Allocation(6, false, T, 145, false, T, 95, false, T, 20, false, T, 49, false, T, 180);
  Allocation(7, false, T, 145, false, T, 80, false, T, 2, false, T, 49, false, T, 180);




}

void loop() {
 R();

}

Ich schicke ihn natürlich rein wenn ich ihn zuende korrigiert habe also hoffentlich in den nächsten Tagen kann es aber nicht versprechen

Also Funktionsnamen wie R() und alles ohne Kommentar, was welche Funktion tun soll, das werden sich die Leser wohl kaum antun.
Aus Erfahrung: In 3 Wochen verstehst Du es auch nicht mehr.

Gruß Tommy

Hi

OldPosition=90 - riecht nach Servos.
Das R steht dann wohl für 'Rest', weil der Rest ist wohl eher ...

MfG

Motor M0(3);

Motor M1(5);
Motor M2(6);
Motor M3(9);
Motor M4(10);

Das lässt sich auch noch aufpolieren!

Motor M[] {3,5,6,9,10};

Hi

Da polierst Du aber trotzdem länger dran - befürchte, einstampfen und neu basteln kommt billiger.
Und bei dem Zug direkt ein/zwei Kommentare einflechten.

MfG

Ok Danke Neu schreiben werde ich den Code vermutlich erstmal nicht aber ich kümmere mich um Kommentare.

aber ich kümmere mich um Kommentare.

Ein kleiner Tipp:
Schreibe in den Kommentaren, nicht was du da tust, sondern warum du es so tust.

Ok Danke combie komme momentan leider nicht dazu den Code zu verbessern poste das dann wenn ich es habe sorry