Variablen auslagern

Hallo ich möchte gern Variablen ich auslagern doch ich habe es bis jetzt nicht hin bekommen finde einfach kein geeignetes Beispiel da ich sehr viele variablen habe wo sich dr wert auch im Programm verändert bräuchte ich etwas Hilfe das hier ist nur ein Test zum verstehen wie ich es umsetzen muss.
Programm:

#include "Led_var.h"
int Led_anzahl = 0;

void setup() {
  pinMode(2, INPUT_PULLUP);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  digitalWrite( 6 , HIGH );

  digitalWrite( 7 , HIGH );

}

void loop() {
  if (!( digitalRead(2) )) {
    Led_anzahl = ( Led_anzahl + 1 );
    delay( 300 );
  }
  if (( Led_anzahl == 5 )) {
    digitalWrite( 6 , LOW );
  }
  if (( Led_anzahl >= 6 )) {
    digitalWrite( 7 , LOW );
  }
}

.h Datei:

const int Led_anzahl = 0;

void Led_in() {
  Led_anzahl = ( Led_anzahl + 5 );
}

Vielleicht kann mir da jemand behilflich sein
Vielen Dank

du müsstest schon auch die Fehlermeldung posten.

Was aber nicht gehen kann, du machst Led_anzahl konstant und dann willst du der KONSTANTE einen Wert zuweisen.

ja das sollte nur ein Beispiel sein eigendlich sieht die Variable nur so aus: int Led_anzahl = 0; wo da ein wert vom Programm eingetragen werden soll der dann weiter verarbeitet wird

Die Led_anzahl kann weder konstant noch nicht konstant sein. Sie kann auch nicht zweimal im selben Bereich definiert werden (scope)

int Led_anzahl = 0;

void setup() {
  pinMode(2, INPUT_PULLUP);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  digitalWrite( 6 , HIGH );
  digitalWrite( 7 , HIGH );
}

void loop() {
  if (digitalRead(2)  == LOW) {
    Led_anzahl++;
    delay( 300 );
  }

  if (Led_anzahl == 5) {
    digitalWrite( 6 , LOW );
  }

  if ( Led_anzahl >= 6 ) {
    digitalWrite( 7 , LOW );
  }
}

ich glaube mein Beispiel war da komplett falsch.
eigentlich will ich nur variablen auslagern.

#include "Led_var.h"
int Led_anzahl = 0;
int Led_anzahl_2 = 0;
int Led_anzahl_3 = 0;

void setup() {
  pinMode(2, INPUT_PULLUP);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  digitalWrite( 6 , HIGH );

  digitalWrite( 7 , HIGH );

  Led_anzahl = 0;

  Led_anzahl_2 = 0;

  Led_anzahl_3 = 0;

}

void loop() {
  if (!( digitalRead(2) )) {
    Led_anzahl = ( Led_anzahl + 1 );
    delay( 300 );
  }
  if (( Led_anzahl == 5 )) {
    digitalWrite( 6 , LOW );
  }
  if (( Led_anzahl >= 6 )) {
    digitalWrite( 7 , LOW );
  }
}

die oberen 3 möchte ich auslagern

Könntest Du mal bitte genauer erklären, was Du mit 'Variablen auslagern' meinst, und was der Grund dafür ist ? Vielleicht kann man dann auch besser eine passende Lösung vorschlagen.

ich habe ein sehr großes Programm was aus mehren Teilen besteht Die noch zusammen gesetzt werden müssen, und zur besseren Übersicht hätte ich gern die variablen in einer .h Datei untergebracht.
Um die Übersicht nicht zu verlieren

So kommen wir der Sache schon näher.

Was bedeutet dabei 'aus mehreren Teilen'. Sind das getrennte .cpp-Dateien, die auch getrennt übersetzt werden, oder nur verschiedene Tabs in einer IDE, die alle als .ino im Sketch-Verzeichnis stehen? Das macht einen sehr großen Unterschied.

nein ich habe 4 einzelne Programme geschrieben die auch einzeln Funktionieren
Ich muss aber die 4 Programme zum Schluss in ein einziges Programm zusammen setzen So das der Arduino Mega damit eine Maschine steuern kann.
Zur besseren Verständnis ein

  1. Programm Zucker wird ausgegeben
  2. Programm Mache Kakao
  3. Programm mache Kaffee
  4. Programm gebe Wasser aus

Soll für meine alte Kaffeemaschine sein
Achso ich habe das ganze in ArduBlock gebastelt

Da ist das 'Variablen auslagern' aber nicht dein eigentliches Problem. Wenn ich das richteg verstehe sind das eigenständige Sketche. Je nachdem wie die aufgebaut sind, kann das Zusammensetzen rel. einfach sein. Oder auch fast unmöglich - zumindest ohne sie komplett umzuschreiben. Um das zu beurteilen, müsste man sie natürlcih kennen.

Oje, das macht die Sache vermutlich nicht einfacher. Zumindest in diesem Forum wirst Du sehr wenige Helfer finden, die sich in Ardublock auskennen, oder sich mit so einem Programm auseinandersetzen wollen. Hier wird eher direkt in C++ gearbeitet.

Ja das mit ArduBlock ist eine schöne Übersicht zusammensetzen mache ich das ganze per Hand mit Copy im Hauptprogramm

Hier ist ein Beispiel mit 3 verschiedenen 'Modulen', von denen jedes eine .h- und eine .cpp hat, wobei die globalen Variablen in der .ino definiert sind.

1 Like

das werde ich gleich mal testen vielen Dank

Hallo mrbelvedere1958

Nimm das IDE und erzeuge für jedes deiner Programme einen Tab.
Einen Tab benennst als Konfig.h, hier werden alle Variablen deklariert, die wiederum in dem jeweiligen Setup für die Programme initialisert werden.

Am besten mal ausprobieren und eigene Erfahrungen sammeln.

Viel Erfolg.

Ob das so einfach geht ist eben nicht unbedingt gesagt.

Ich habe Schwierigkeiten deine Texte zu verstehen.

Was ich aber weiß, dass es ein guter Ausgangspunkt ist:

  1. Deklaration in *.h Dateien unterzubringen.
  2. Definitionen in *.cpp Dateien

Selbst wenn es noch mehr Varianten gibt, ist diese doch, die welche hier am klarsten und übersichtlichsten ist. 'Der Startpunkt.

test.cpp

#include "test.h"

int daten = 4711;

void tuwas(Print &p)
{
  p.println("tue was");
}


test.h

#pragma once
#include <Arduino.h>

extern int daten ;

void tuwas(Print &);

irgendeine.ino

#include "test.h"

void setup() 
{
  Serial.begin(9600);
  Serial.println(daten);
  daten = 42;
  Serial.println(daten);
  tuwas(Serial);
}

void loop() {}

ja das hat hin gehauen super danke

Man braucht keine Variablen um LED Zustand zu merken.
Jeder Subprogramm kann wie ein Sketch aussehen und in eine Funktion verpackt und in ein getrenntes Tab platziert. Am besten lade deine 4 Sketches als ZIP Datei hoch. Wir machen dann Vorschläge.

Habe festgestellt das das so mit meiner Bastelei nichts wird mit Ardublock und handgeschrieben geht das nicht ich werde jetzt alles noch mal neu machen und das ganze per Hand.