Merge commit '34cb4879' into weiter-mit-PWM

Doch weiter mit PWM versuchen.
This commit is contained in:
Toberfra 2022-02-10 16:34:22 +01:00
commit 0757d036d5
8 changed files with 74 additions and 70 deletions

View File

@ -7,78 +7,94 @@ KlappenAblauf::~KlappenAblauf()
} }
statusKlappen KlappenAblauf::setOpen(bool open) void KlappenAblauf::setOpen(bool open)
{ {
if(aktuellerState == WARTE){ openSpeicher = open;
if(open)
aktuellerState = START_AUF;
else
aktuellerState = START_ZU;
return OK;
}
return ERROR_BUSY;
} }
statusKlappen KlappenAblauf::setOpen(bool open , int id) void KlappenAblauf::setOpen(bool open , int id)
{ {
KlappenAblauf *zeiger; KlappenAblauf *zeiger;
zeiger = (KlappenAblauf *) searchIdElement(id); zeiger = (KlappenAblauf *) searchIdElement(id);
if(zeiger) if(zeiger)
return zeiger->setOpen(open); return zeiger->setOpen(open);
return ERROR_ID;
} }
void KlappenAblauf::memberSetup(){ void KlappenAblauf::memberSetup(){
AnalogDigital::memberSetup(); AnalogDigital::memberSetup();
openSpeicher = false;
fsmInit(); fsmInit();
} }
void KlappenAblauf::memberLoop(){ void KlappenAblauf::memberLoop(){
AnalogDigital::memberLoop(); AnalogDigital::memberLoop();
openSpeicherAbfrage();
fsmStep(); fsmStep();
} }
void KlappenAblauf::fsmInit(){ void KlappenAblauf::fsmInit(){
aktuellerState = INIT; aktuellerState = INIT;
} }
void KlappenAblauf::openSpeicherAbfrage(){
if(openSpeicher){
if(aktuellerState == WARTE_GESCHLOSSEN){
aktuellerState = START_AUF;
}
}else{
if(aktuellerState == WARTE_OFFEN){
aktuellerState = START_ZU;
}
}
}
void KlappenAblauf::fsmStep(){ void KlappenAblauf::fsmStep(){
switch (aktuellerState) switch (aktuellerState)
{ {
case INIT: case INIT:
aktuellerState = WARTE; aktuellerState = START_ZU;
break; break;
case WARTE: case WARTE_OFFEN:
case WARTE_GESCHLOSSEN:
break; break;
case START_AUF: case START_AUF:
setMotorAktion(1); setMotorAktion(1);
timer = 5000; timer = 5000;
aktuellerState = FAEHRT; aktuellerState = FAEHRT_AUF;
break; break;
case START_ZU: case START_ZU:
setMotorAktion(-1); setMotorAktion(-1);
timer = 5000; timer = 5000;
aktuellerState = FAEHRT; aktuellerState = FAEHRT_ZU;
break; break;
case FAEHRT: case FAEHRT_AUF:
timer -= getDeltamsec(); timer -= getDeltamsec();
if(timer <= 0){ if(timer <= 0){
setMotorAktion(0); setMotorAktion(0);
aktuellerState = FERTIG; aktuellerState = WARTE_OFFEN;
} }
break; break;
case FERTIG: case FAEHRT_ZU:
aktuellerState = WARTE; timer -= getDeltamsec();
if(timer <= 0){
setMotorAktion(0);
aktuellerState = WARTE_GESCHLOSSEN;
}
break; break;
default: default:

View File

@ -36,13 +36,13 @@ public:
/** /**
* @param open * @param open
*/ */
statusKlappen setOpen(bool open); void setOpen(bool open);
static statusKlappen setOpen(bool open , int id); static void setOpen(bool open , int id);
protected: protected:
void memberSetup(); virtual void memberSetup();
void memberLoop(); virtual void memberLoop();
// Static Protected attributes // Static Protected attributes
// //
@ -53,13 +53,19 @@ protected:
private: private:
int16_t timer; int16_t timer;
bool openSpeicher;
void openSpeicherAbfrage();
typedef enum fsmStatesEnum{ typedef enum fsmStatesEnum{
INIT, INIT,
WARTE,
START_AUF, WARTE_OFFEN,
START_ZU, START_ZU,
FAEHRT, FAEHRT_ZU,
FERTIG,
WARTE_GESCHLOSSEN,
START_AUF,
FAEHRT_AUF,
}fsmStates; }fsmStates;

View File

@ -21,6 +21,7 @@ void ArduinoAnpassung::setup(){
while(zeiger){ while(zeiger){
((ArduinoAnpassung*)zeiger)->memberSetup(); ((ArduinoAnpassung*)zeiger)->memberSetup();
zeiger = zeiger->getNachfolgerElement(); zeiger = zeiger->getNachfolgerElement();
} }
} }

View File

@ -15,8 +15,8 @@ public:
static void setup(); static void setup();
static void loop(); static void loop();
void memberSetup(); virtual void memberSetup();
void memberLoop(); virtual void memberLoop();
static unsigned int getDeltamsec(); static unsigned int getDeltamsec();

View File

@ -8,13 +8,8 @@ void Ablauf();
void AblaufSekunde(); void AblaufSekunde();
KlappenSteuerung klappe1 (M1A , M1B , M1SENSE , 5 ); KlappenSteuerung klappe1 (M1A , M1B , M1SENSE , 5 );
KlappenSteuerung klappe2 (M2A , M2B , M2SENSE , 2 );
KlappenSteuerung klappe3 (M3A , M3B , M3SENSE , 23 );
//KlappenSteuerung klappe2 (M2A , M2B , M2SENSE , 2 );
//KlappenSteuerung klappe3 (M3A , M3B , M3SENSE , 23 );
//KlappenSteuerung klappe4 (M4A , M4B , M4SENSE , 1 ); //KlappenSteuerung klappe4 (M4A , M4B , M4SENSE , 1 );
@ -25,6 +20,8 @@ void setup() {
KlappenSteuerung::setMotorPwmPin(TIMER1_PWM_PIN); KlappenSteuerung::setMotorPwmPin(TIMER1_PWM_PIN);
KlappenSteuerung::setup(); KlappenSteuerung::setup();
pinMode(LED_BUILTIN , OUTPUT); pinMode(LED_BUILTIN , OUTPUT);
pinMode(TASTER_AUF , INPUT_PULLUP);
pinMode(TASTER_ZU , INPUT_PULLUP);
} }
void loop() { void loop() {
@ -34,32 +31,10 @@ void loop() {
} }
void Ablauf(){ void Ablauf(){
static unsigned int summeZeit; if(!digitalRead(TASTER_AUF))
summeZeit += KlappenSteuerung::getDeltamsec();
if(summeZeit >= 1000){ // eine Sekunde
summeZeit -= 1000;
AblaufSekunde();
}
}
void AblaufSekunde(){
static unsigned int sekunden;
sekunden ++;
//digitalWrite(LED_BUILTIN , !(sekunden & 3));
switch(sekunden){
case 1:
KlappenSteuerung::setOpen(true , 5); KlappenSteuerung::setOpen(true , 5);
break;
case 11: if(!digitalRead(TASTER_ZU))
KlappenSteuerung::setOpen(false , 5); KlappenSteuerung::setOpen(false , 5);
break;
case 20:
sekunden = 0;
break;
}
} }

View File

@ -38,12 +38,15 @@ void Motor::setMotorAktion(int8_t richtung){
if(richtung > 0){ if(richtung > 0){
digitalWrite( pinA , 1); digitalWrite( pinA , 1);
digitalWrite( pinB , 0); digitalWrite( pinB , 0);
digitalWrite(LED_BUILTIN , 1);
}else if(richtung < 0){ }else if(richtung < 0){
digitalWrite( pinA , 0); digitalWrite( pinA , 0);
digitalWrite( pinB , 1); digitalWrite( pinB , 1);
digitalWrite(LED_BUILTIN , 1);
}else{ }else{
digitalWrite( pinA , 1); digitalWrite( pinA , 0);
digitalWrite( pinB , 0); digitalWrite( pinB , 0);
digitalWrite(LED_BUILTIN , 0);
} }
} }

View File

@ -27,7 +27,7 @@ protected:
static uint8_t pinPwm; static uint8_t pinPwm;
void memberSetup(); virtual void memberSetup();
//static void interruptEinsprung(); //static void interruptEinsprung();

View File

@ -20,13 +20,16 @@
#define M4B 10 #define M4B 10
#define M4SENSE A4 #define M4SENSE A4
#define M5A 11 //#define M5A 11
#define M5B 12 //#define M5B 12
#define M5SENSE A5 //#define M5SENSE A5
#define M6A 13 //#define M6A 13 // LED_BULDIN
#define M6B 14 //#define M6B 14
#define M6SENSE A6 //#define M6SENSE A6
#define TASTER_AUF 11
#define TASTER_ZU 12