adds new states and context
This commit is contained in:
parent
44fcc677bb
commit
8b16bcbee5
8 changed files with 57 additions and 7 deletions
1
main/context.cpp
Normal file
1
main/context.cpp
Normal file
|
@ -0,0 +1 @@
|
|||
#include "Context.h"
|
8
main/context.h
Normal file
8
main/context.h
Normal file
|
@ -0,0 +1,8 @@
|
|||
#pragma once
|
||||
#include <Arduino.h>
|
||||
#include "station.h"
|
||||
|
||||
class Context {
|
||||
public:
|
||||
Station* stations[4];
|
||||
};
|
|
@ -5,6 +5,7 @@
|
|||
#include "station.h"
|
||||
#include "statemachine.h"
|
||||
#include "state.h"
|
||||
#include "states.h"
|
||||
|
||||
#define PN532_CS 10
|
||||
|
||||
|
@ -15,7 +16,7 @@ LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
|
|||
|
||||
Station stations[4] = { Station(1680767519, "Yellow"), Station(3346823711, "Green"), Station(3569318175, "Pink"), Station(2174777887, "Blue") };
|
||||
|
||||
StateMachine stateMachine();
|
||||
StateMachine stateMachine(new Startup());
|
||||
|
||||
void setup(void) {
|
||||
setupNFC();
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#pragma once
|
||||
#include <Arduino.h>
|
||||
#include <LiquidCrystal.h>
|
||||
#include "station.h"
|
||||
#include "context.h"
|
||||
|
||||
class Station;
|
||||
|
||||
|
@ -10,7 +12,7 @@ public:
|
|||
|
||||
virtual State* pickedUp() { return this; }
|
||||
virtual State* putDown(Station* newStation) { return this; }
|
||||
virtual State* update() { return this; }
|
||||
virtual State* update(Context context) { return this; }
|
||||
|
||||
virtual void updateDisplay(LiquidCrystal* lcd) { }
|
||||
};
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include "statemachine.h"
|
||||
#include "station.h"
|
||||
#include "context.h"
|
||||
|
||||
StateMachine::StateMachine(State* initialState)
|
||||
: currentState(initialState) {}
|
||||
|
@ -25,7 +26,7 @@ void StateMachine::putDown(Station* newStation) {
|
|||
updateState(newState);
|
||||
}
|
||||
|
||||
void StateMachine::update() {
|
||||
State* newState = currentState->update();
|
||||
void StateMachine::update(Context context) {
|
||||
State* newState = currentState->update(context);
|
||||
updateState(newState);
|
||||
}
|
|
@ -1,7 +1,9 @@
|
|||
#pragma once
|
||||
#include <Arduino.h>
|
||||
#include <LiquidCrystal.h>
|
||||
#include "state.h"
|
||||
#include "station.h"
|
||||
#include "context.h"
|
||||
|
||||
class StateMachine {
|
||||
private:
|
||||
|
@ -14,7 +16,7 @@ public:
|
|||
|
||||
void pickedUp();
|
||||
void putDown(Station* newSation);
|
||||
void update();
|
||||
void update(Context context);
|
||||
|
||||
void updateDisplay(LiquidCrystal* lcd);
|
||||
};
|
||||
|
|
|
@ -40,3 +40,23 @@ WaitingForPickup::WaitingForPickup(Station* currentStation, Station* targetStati
|
|||
State* WaitingForPickup::pickedUp() {
|
||||
return this;
|
||||
}
|
||||
|
||||
//-------
|
||||
// Startup
|
||||
//-------
|
||||
|
||||
State* Startup::putDown(Station* newStation) {
|
||||
return new NewTargetFinder(newStation);
|
||||
}
|
||||
|
||||
//-------
|
||||
// NewTargetFinder
|
||||
//-------
|
||||
|
||||
NewTargetFinder::NewTargetFinder(Station* currentStation) {
|
||||
this->currentStation = currentStation;
|
||||
}
|
||||
|
||||
State* NewTargetFinder::update(Context context) {
|
||||
return new WaitingForPickup(this->currentStation, context.stations[0]);
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
#pragma once
|
||||
#include <Arduino.h>
|
||||
#include "context.h"
|
||||
#include "state.h"
|
||||
#include "states.h"
|
||||
#include "station.h"
|
||||
|
@ -26,5 +27,19 @@ private:
|
|||
Station* targetStation;
|
||||
public:
|
||||
WaitingForPickup(Station* currentStation, Station* targetStation);
|
||||
State* pickedUp();
|
||||
State* pickedUp() override;
|
||||
};
|
||||
|
||||
class Startup : public State {
|
||||
public:
|
||||
State* putDown(Station* newSation) override;
|
||||
};
|
||||
|
||||
class NewTargetFinder : public State {
|
||||
private:
|
||||
Station* currentStation;
|
||||
public:
|
||||
NewTargetFinder(Station* currentStation);
|
||||
State* update(Context context) override;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue