gelöst - enum in weiterem Tab benutzen

Hi

Ich bastel gerade an meinem CAN-Knoten.
Der soll (unter Anderem) Logiken abarbeiten.
Damit man Diese auch verständlich schreiben kann, habe ich mit enum eine Auflistung erzeugt, Die meine Schlüsselworte enthält.

#define datentypalias uint16_t   //Umstellen des Datentyp ermöglichen - wohl nicht mehr nötig
enum alias : datentypalias {ohne = 100,
                            Lpx, Festwert, Lmx,                       //Reihenfolge MUSS bleiben
                            //Logiken 0 bis 59
                            L0, L1, L2, L3, L4, L5, L6, L7, L8, L9,
...
                            //relative Logiken plus 0...29
                            Lp0, Lp1, Lp2, Lp3, Lp4, Lp5, Lp6, Lp7, Lp8, Lp9,
...
                            //relative Logiken minus 0...29
                            Lm0, Lm1, Lm2, Lm3, Lm4, Lm5, Lm6, Lm7, Lm8, Lm9,
...
                            //Merker 0-39
                            M0, M1, M2, M3, M4, M5, M6, M7, M8, M9,
...
                            //Pumpen 0-9
                            P0, P1, P2, P3, P4, //P5, P6, P7, P8, P9,
                            //Schieber 0-19
                            S0, S1, S2, S3, S4, S5, S6, S7, S8, S9,  
...
                            //Sensoren (Temperatur-, daher das T) 0-29
                            T0, T1, T2, T3, T4, T5, T6, T7, T8, T9,
...
                            //das Ende der Liste
                            ende
                           };

So weit, so gut - wenn ich den ganzen Kram in ein File stopfe, klappt Das auch - ich kann damit arbeiten.
Nun bin ich dabei, meinen Knoten von einem UNO auf einen MEGA umzustricken - im Uno findet sich nicht genügend Platz (ok, kein Grund, den Kram aufzuteilen ... die Übersicht ist aber dort besch...).

Ok, ich habe also den Sketch in mehrere Tabs aufgeteilt, unter Anderem 00_structs - wo auch dieses enum enthalten ist.
Nun möchte ich in 07_checknextlogik mit diesen Aliasen meine Logiken durchsuchen.
Dort findet sich z.B.

boolean issensor(alias parameter) {
  //>=T0 && <ende
  boolean retvar = false;
  if (parameter >= T0 && parameter < ende) {
    retvar = true;
  }
  return retvar;
}

Diese Funktion gibt mir TRUE zurück, wenn der übergebene Alias ein SENSOR (T0...T29 ... stammt noch von 'Temperatur') ist, sonst false.
Bei dieser Funktion wird mir aber
'alias' was not declared in this scope
als Fehler entgegen geworfen - ok, Recht hat Er - aber wie mache ich Das?
Gefunden habe ich 'extern' - und eine schnöde int Variable ließe sich wohl mit
Haupt Sketch
int beispielvar=17;

Tab-Sketch
extern int beispielvar;

greifen. Wie löse ich Das bei meinem enum?

L? - eine der Logiken, Die ich verarbeiten möchte
Lp? / Lm? - eine Logik mit relativem Abstand (Lp5 -> 5 Logiken weiter unten)
Lpx ? - eine Logik mit als zahl angegebenem Abstand (dito Lmx)
T? - Wert (Temperatur) des genannten Sensor
S? - Stellung des Schieber (Heizung)
P? - Pumpe (Laufzeit)
M? - Merker - per CAN (oder Logik) verstellbare Quasi-Fest-Werte - z.B. Soll-Temperaturen oder, ob ein Schieber/eine Pumpe Hand AUS/ZU ist, oder im Automatik-Modus läuft.

Der ganze Kram wird mit logischen Verknüpfungen verarbeitet, Die ebenfalls in einem enum aufgelistet sind (AND/OR/NOT/Zeitglieder/...).

//extern datentypalias alias;
extern enum alias : datentypalias{};

lässt die Fehlermeldung Beides nicht verschwinden.

Wer hat sachdienliche Hinweise?

Wenn der Tab 07_checknextlogik geleert wird, kompiliert das Konstrukt und gibt im Terminal die empfangenen Sensoren wieder.

MfG

PS: Nicht zu dolle hauen, bin noch Anfänger gg

PPS: #CAN, #Arduino, #Ringspeicher, Befehl/Nachricht via #Terminal Eingabe, #WDT Reset

In meinem CAN-Bus sitzen derzeit zwei Sensor-Knoten, Die sekündlich den nächsten Temperatur-Sensor ausgeben, Diese DS18B20 haben intern in den User-Bytes eine externe ID und einen Korrektur-Wert (die Funktionen sind in diesem Rumpf noch nicht integriert, wären F8 und F9).
Weiter sabbeln hier noch ca. 8 andere Knoten mit älteren Nachrichten (FF 03, ebenfalls DS18B20, aber ohne Korrektur und ohne externe ID und ein US-Sensor im Speicher).

Ohne Sender im Can-Bus, Der (ab und an) einen Sensorwert liefert, ist wohl nur die Übernahme einer per Terminal gesendeten Nachricht interessant.

Combie_TestSketch_Ampel_Versuch_test-191016a.zip (21.3 KB)

5,386 Posts.

das enum in ein .h
das .h includen.

Wenns falsch ist, entschuldige - ich hab nur 2.544 ^^

Ganz einfach...

1:
Das Ding in ein *.ino Tab packen, welches vorher geladen(rein kopiert) wird.

2:
In eine *.h stecken und per Include einbinden.

Hi

Die Tabs sind 'ohne Nachkomma' - also .ino
Daher ging ich davon aus, daß Diese zuerst 'zusammen geklebt' werden und dann der Kompiler drüber rutscht - dabei hätte Er eigentlich im 2.ten Tab (00_) den 'alias' finden müssen, womit Der dann später bekannt hätte sein müssen.

Erzeugt wird die Aufzählung im Tab 00_, benutzt in 07_ ... wenn die Tabs alphabetisch zusammen gefügt werden (oder in Erstellungsreihenfolge - wäre identisch), hätte Das passen sollen.

Wenn ich die 00_struct in .h änder und includiere - muß Die in JEDEM .ino includiert werden?
(wahrscheinlich hab ich Das gleich auch raus gefunden ...)

Danke bereits für die Antworten (auch, wenn's erst 2544 Post's waren gg)

MfG

Hi

Danke Euch - als 00_strukt.h und NUR im Haupt-File per#include "00_strukts.h" eingebunden - meckert nicht mehr!

So einfach kann's sein ...

MfG

... 18 Minuten ... vll. sollte ich Euch öfter belästigen :wink:

postmaster-ino:
... 18 Minuten ... vll. sollte ich Euch öfter belästigen :wink:

deins: Today at 07:37 pm
#1: Today at 07:39 pm

musst nur schneller lesen ^^