Cooler Tip!
Habs in Ardiono gerade mal eingeschaltet und tatsächlich.
Der hat sogar gemerkt, dass ich eine Enumeration verwende mit 2 Werten, davon aber nur eine in der switch Abfrage verwendet wird.
Übrigens ich habs jetzt so gelöst:
Code:
/*
* Gibt den Status des Flags STATE_CHANGED zurück und löscht das Flag
*/
boolean StateMachine::stateChanged()
{
byte ergebnis = boolean(mFlags and STATE_CHANGED); // Flag zurück geben
mFlags &= ~(1<<STATE_CHANGED); // Flag löschen, dass Zustand geändert wurde
return ergebnis;
}
Noch ne kurze Frage wenn du schon dran bist.
In einer Klassendefinition, wo legt man da genau eine Enumerations-Struktur an, die außerhalb der Klasse auch als Rückgabewert und/oder als Übergabewert dient?
Ich habe versucht das:
Code:
/*
* Enumeration mit den zulässigen Maschinen-Zuständen
*/
enum tagStates // Zustände der Statemachine
{
STATE_MAIN=0,
STATE_1
};
im Header StateMachine.h im Bereich 'public:' anzugeben.
Beim Aufruf der Funktionen kam jedoch immer die Fehlermeldung, dass der Typ nicht bekannt sei.
Wo legt man also in einer Klasse die Enumeration an?
Vor der Klasse, so wie ich es ganz oben gezeigt habe in StateMachine.h?
Micha
- - - Aktualisiert - - -
das 'and' sollte eigentlich ein bitweiser UND-Vergleich sein. Habs in && geändert.
Ja und das mit dem Schieben, haste recht.
Als ich den Fehler suchte hab ich rumprobiert, und die Stelle vergessen zu ändern.
jetzt siehts so aus:
Code:
#include "StateMachine.h"
/*
* Setzt den gewünschten Zustand der Statemaschine
* Zusätzlich wird Flag STATE_CHANGED gesetzt, um zu ermitteln, ob der Zustand sich geändert hat.
*/
void StateMachine::setState(tagStates newState)
{
currentState = newState; // Zustand setzen
mFlags |= (1<<STATE_CHANGED); // Flag setzen, dass Zustand geändert wurde
}
/*
* Gibt den aktuellen Zustand der Statemachine zurück
*/
enum tagStates StateMachine::getState()
{
return currentState;
}
/*
* Gibt den Status des Flags STATE_CHANGED zurück und löscht das Flag
*/
boolean StateMachine::stateChanged()
{
byte ergebnis = boolean(mFlags && (1<<STATE_CHANGED)); // Flag zurück geben
mFlags &= ~(1<<STATE_CHANGED); // Flag löschen, dass Zustand geändert wurde
return ergebnis;
}
Lesezeichen