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.