First OOP parts
This commit is contained in:
parent
73c0795e50
commit
c4861d9793
47
Seilbahn/src/CButton.cpp
Normal file
47
Seilbahn/src/CButton.cpp
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
#include "CButton.h"
|
||||||
|
|
||||||
|
#include "Arduino.h"
|
||||||
|
|
||||||
|
CButton::CButton(short btnPin, short ledPin)
|
||||||
|
{
|
||||||
|
m_btnPin = btnPin;
|
||||||
|
m_ledPin = ledPin;
|
||||||
|
m_currentButtonState = false;
|
||||||
|
m_buttonState = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CButton::getLED()
|
||||||
|
{
|
||||||
|
return digitalRead(m_ledPin);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CButton::setLED(bool status)
|
||||||
|
{
|
||||||
|
digitalWrite(m_ledPin, status);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CButton::work()
|
||||||
|
{
|
||||||
|
// Taster abfragen und aktuellen Zustand zwischenspeichern
|
||||||
|
m_currentButtonState = digitalRead(m_btnPin) == LOW;
|
||||||
|
// Aktuellen Zustand mit vorherigem vergleichen
|
||||||
|
if (m_currentButtonState && !m_buttonState)
|
||||||
|
{
|
||||||
|
// Warten zum entprellen
|
||||||
|
delay(20);
|
||||||
|
// Taster abfragen und aktuellen Zustand zwischenspeichern
|
||||||
|
m_currentButtonState = digitalRead(m_btnPin) == LOW;
|
||||||
|
// Prüfen ob immernoch gedrückt
|
||||||
|
if (m_currentButtonState == LOW)
|
||||||
|
{
|
||||||
|
// Knopf gedrückt => Code ausführen
|
||||||
|
|
||||||
|
// ============================================================
|
||||||
|
fahrtrichtung = HALT;
|
||||||
|
// ============================================================
|
||||||
|
|
||||||
|
// Speichern des ButtonStates als Vergleichswert für den nächsten Durchlauf
|
||||||
|
m_buttonState = m_currentButtonState;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
24
Seilbahn/src/CButton.h
Normal file
24
Seilbahn/src/CButton.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#ifndef CBUTTON_H_
|
||||||
|
#define CBUTTON_H_
|
||||||
|
|
||||||
|
class CButton
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CButton(short btnPin, short ledPin);
|
||||||
|
void connect(); // Button mit Controller "verbinden"
|
||||||
|
void work(); // Button periodisch abfragen
|
||||||
|
|
||||||
|
bool getLED(); // LED status abfragen
|
||||||
|
void setLED(bool status); // LED an/ausschalten
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
short m_btnPin; // Pinnummer Button am Arduino
|
||||||
|
short m_ledPin; // Pinnummer LED am Arduino
|
||||||
|
|
||||||
|
bool m_currentButtonState; // Hilfsvariable für aktuellen Status
|
||||||
|
bool m_buttonState; // Hilfsvariable für letzten Status
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* CBUTTON_H_ */
|
||||||
94
Seilbahn/src/CEventQueue.cpp
Normal file
94
Seilbahn/src/CEventQueue.cpp
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
#include "CEventQueue.h"
|
||||||
|
|
||||||
|
/*! \fn std::vector<SEvent> CEventQueue::popEvents(EVENT_TYPE eventType)
|
||||||
|
\brief Liefert einen chronologisch geordneten Vektor (FIFO) der aufgelaufenen
|
||||||
|
Events in dieser Queue zurueck. Diese werden daraufhin aus der Queue geloescht
|
||||||
|
\param eventType Falls nicht UNDEFINED, werden nur Events des angegebenen Typs
|
||||||
|
zurueckgegeben und aus der Queue geloescht, andernfalls alle
|
||||||
|
\return Chronologisch sortierter Vektor der Events (aelteste zuerst)
|
||||||
|
*/
|
||||||
|
std::vector<SEvent> CEventQueue::popEvents(EVENT_TYPE eventType)
|
||||||
|
{
|
||||||
|
std::vector<SEvent> ret;
|
||||||
|
|
||||||
|
switch(eventType)
|
||||||
|
{
|
||||||
|
case UNDEFINED:
|
||||||
|
ret = m_events;
|
||||||
|
m_events.clear();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
std::vector<SEvent> without;
|
||||||
|
for(std::vector<SEvent>::iterator it=m_events.begin(); it!=m_events.end(); it++)
|
||||||
|
{
|
||||||
|
if(it->m_eventType==eventType)
|
||||||
|
{
|
||||||
|
ret.push_back(*it);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
without.push_back(*it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_events = without;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*! \fn SEvent CEventQueue::popEvent(bool* pValid)
|
||||||
|
\brief Liefert das chronologisch letzte (neueste) Event in der Queue zurueck
|
||||||
|
\param pValid true, falls ein Event aus der Queue zurueckgegeben wird,
|
||||||
|
false andernfalls (dann war die Queue naemlich leer)
|
||||||
|
\return Das chronologisch letzte (neueste) Event in der Queue
|
||||||
|
*/
|
||||||
|
SEvent CEventQueue::popEvent(bool* pValid)
|
||||||
|
{
|
||||||
|
return popEvent(m_events.size()-1, pValid);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*! \fn SEvent CEventQueue::popEvent(unsigned short eventNumber,
|
||||||
|
* bool* pValid)
|
||||||
|
\brief Liefert das Event mit dem angegebenen Index in der Queue der gespeicherten
|
||||||
|
Events zurueck. Das Event wird daraufhin aus der Queue geloescht
|
||||||
|
\param eventNumber Index des zurueckzuliefernden Events in der Queue
|
||||||
|
\param pValid true, falls ein Event aus der Queue zurueckgegeben wird,
|
||||||
|
false andernfalls (dann existiert kein Event mit dem angegebenen Index)
|
||||||
|
\return Falls eventNumber nicht INVALID_EVENT_NUMBER, das Event mit dem
|
||||||
|
angegebenen Index in der Queue, das chronologisch erste (aelteste) Event
|
||||||
|
andernfalls
|
||||||
|
*/
|
||||||
|
SEvent CEventQueue::popEvent(unsigned short eventNumber, bool* pValid)
|
||||||
|
{
|
||||||
|
if(eventNumber<m_events.size())
|
||||||
|
{
|
||||||
|
*pValid=true;
|
||||||
|
std::vector<SEvent>::iterator it;
|
||||||
|
SEvent ret;
|
||||||
|
it=(m_events.begin() + eventNumber);
|
||||||
|
ret=*it;
|
||||||
|
m_events.erase(it);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*pValid=false;
|
||||||
|
SEvent e;
|
||||||
|
e.m_eventType=UNDEFINED;
|
||||||
|
e.m_additionalInfo=0;
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*! \fn void CEventQueue::pushEvent(SEvent event)
|
||||||
|
\brief Fuegt der Queue ein Event hinzu. Sensoren und Aktoren
|
||||||
|
rufen diese Methode auf, um ueber ein Event zu informieren
|
||||||
|
\param event Hinzuzufuegendes Event
|
||||||
|
*/
|
||||||
|
void CEventQueue::pushEvent(SEvent event)
|
||||||
|
{
|
||||||
|
m_events.push_back(event);
|
||||||
|
}
|
||||||
19
Seilbahn/src/CEventQueue.h
Normal file
19
Seilbahn/src/CEventQueue.h
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#ifndef CEVENTQUEUE_H_
|
||||||
|
#define CEVENTQUEUE_H_
|
||||||
|
|
||||||
|
#include "SEvent.h"
|
||||||
|
#include "ArduinoSTL.h"
|
||||||
|
|
||||||
|
class CEventQueue
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
std::vector<SEvent> popEvents(EVENT_TYPE eventtype=UNDEFINED);
|
||||||
|
SEvent popEvent(bool* pValid);
|
||||||
|
SEvent popEvent(unsigned short eventNumber, bool* pValid);
|
||||||
|
void pushEvent(SEvent event);
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<SEvent> m_events;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* CEVENTQUEUE_H_ */
|
||||||
0
Seilbahn/src/CMainController.cpp
Normal file
0
Seilbahn/src/CMainController.cpp
Normal file
13
Seilbahn/src/CMainController.h
Normal file
13
Seilbahn/src/CMainController.h
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
#ifndef CSEILMAINCONTROLLER_H_
|
||||||
|
#define CSEILMAINCONTROLLER_H_
|
||||||
|
|
||||||
|
#include
|
||||||
|
|
||||||
|
class CMainController
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
private:
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* CSEILMAINCONTROLLER_H_ */
|
||||||
24
Seilbahn/src/SEvent.cpp
Normal file
24
Seilbahn/src/SEvent.cpp
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#include "SEvent.h"
|
||||||
|
|
||||||
|
const char* evToStr(SEvent ev)
|
||||||
|
{
|
||||||
|
switch(ev.m_eventType)
|
||||||
|
{
|
||||||
|
case BTN_ANLAGE_EIN_AUS: return "BTN_ANLAGE_EIN_AUS";
|
||||||
|
case BTN_STATION: return "BTN_STATION";
|
||||||
|
case BTN_SERVICE: return "BTN_SERVICE";
|
||||||
|
case BTN_FAHRGAST: return "BTN_FAHRGAST";
|
||||||
|
case BTN_QUIT: return "BTN_QUIT";
|
||||||
|
case BTN_START: return "BTN_START";
|
||||||
|
case BTN_HALT: return "BTN_HALT";
|
||||||
|
case BTN_NOTHALT: return "BTN_NOTHALT";
|
||||||
|
case BTN_VORWAERTS: return "BTN_VORWAERTS";
|
||||||
|
case BTN_RUECKWAERTS: return "BTN_RUECKWAERTS";
|
||||||
|
default: return "UNDEFINED";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void printEvent(SEvent event, void* who)
|
||||||
|
{
|
||||||
|
// TBD if needed
|
||||||
|
}
|
||||||
28
Seilbahn/src/SEvent.h
Normal file
28
Seilbahn/src/SEvent.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#ifndef SEVENT_H_
|
||||||
|
#define SEVENT_H_
|
||||||
|
|
||||||
|
enum EVENT_TYPE
|
||||||
|
{
|
||||||
|
BTN_ANLAGE_EIN_AUS, // Button Anlage Ein/Aus wurde gedrückt
|
||||||
|
BTN_STATION, // Button Station Besetzt/Unbesetzt wurde gedrückt
|
||||||
|
BTN_SERVICE, // Button Servicebetrieb wurde gedrückt
|
||||||
|
BTN_FAHRGAST, // Button Fahrgastbetrieb wurde gedrückt
|
||||||
|
BTN_QUIT, // Button Quittieren wurde gedrückt
|
||||||
|
BTN_START, // Button Start wurde gedrückt
|
||||||
|
BTN_HALT, // Button Halt wurde gedrückt
|
||||||
|
BTN_NOTHALT, // Button Nothalt wurde gedrückt
|
||||||
|
BTN_VORWAERTS, // Button Vorwaerts wurde gedrückt
|
||||||
|
BTN_RUECKWAERTS, // Button Rueckwaerts wurde gedrückt
|
||||||
|
UNDEFINED=999,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SEvent
|
||||||
|
{
|
||||||
|
EVENT_TYPE m_eventType;
|
||||||
|
unsigned int m_additionalInfo;
|
||||||
|
};
|
||||||
|
|
||||||
|
const char* evToStr(SEvent ev);
|
||||||
|
void printEvent(SEvent event, void* who);
|
||||||
|
|
||||||
|
#endif /* SEVENT_H_ */
|
||||||
Loading…
x
Reference in New Issue
Block a user