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