push button for toggle led
This commit is contained in:
parent
909335e807
commit
3f1ce81ad5
@ -48,12 +48,8 @@ BUTTON* b3() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
LEDBlinker* lb1() {
|
LEDBlinker* lb() {
|
||||||
return &theFactory.lb1_;
|
return &theFactory.lb_;
|
||||||
}
|
|
||||||
|
|
||||||
LEDBlinker* lb2() {
|
|
||||||
return &theFactory.lb2_;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//initialize all objects
|
//initialize all objects
|
||||||
@ -97,6 +93,6 @@ void Factory_build() {
|
|||||||
|
|
||||||
//start all state machines
|
//start all state machines
|
||||||
void Factory_start() {
|
void Factory_start() {
|
||||||
LEDBlinker_startBehaviour(lb1());
|
LEDBlinker_startBehaviour(lb());
|
||||||
LEDBlinker_startBehaviour(lb2());
|
BUTTON_startBehaviour(b1());
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
#define LID 1
|
#define LID 1
|
||||||
|
|
||||||
|
|
||||||
struct Factory_ {
|
typedef struct {
|
||||||
LED l1_;
|
LED l1_;
|
||||||
LED l2_;
|
LED l2_;
|
||||||
LED l3_;
|
LED l3_;
|
||||||
@ -28,13 +28,10 @@ struct Factory_ {
|
|||||||
BUTTON b2_;
|
BUTTON b2_;
|
||||||
BUTTON b3_;
|
BUTTON b3_;
|
||||||
|
|
||||||
LEDBlinker lb1_;
|
LEDBlinker lb_;
|
||||||
LEDBlinker lb2_;
|
} Factory;
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct Factory_ Factory;
|
|
||||||
|
|
||||||
void Factory_init();
|
void Factory_init();
|
||||||
void Factory_build();
|
void Factory_build();
|
||||||
void Factory_start();
|
void Factory_start();
|
||||||
@ -55,7 +52,6 @@ BUTTON* b1();
|
|||||||
BUTTON* b2();
|
BUTTON* b2();
|
||||||
BUTTON* b3();
|
BUTTON* b3();
|
||||||
|
|
||||||
LEDBlinker* lb1();
|
LEDBlinker* lb();
|
||||||
LEDBlinker* lb2();
|
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -42,12 +42,10 @@ bool LEDBlinker_processEvent(Event* ev) {
|
|||||||
break;
|
break;
|
||||||
case ST_LBOFF:
|
case ST_LBOFF:
|
||||||
LED_off(l1());
|
LED_off(l1());
|
||||||
LED_off(l2());
|
|
||||||
POST(me, &LEDBlinker_processEvent, evLBTMOn,TMOFF,0);
|
POST(me, &LEDBlinker_processEvent, evLBTMOn,TMOFF,0);
|
||||||
break;
|
break;
|
||||||
case ST_LBON:
|
case ST_LBON:
|
||||||
LED_on(l());
|
LED_on(l1());
|
||||||
LED_on(l2());
|
|
||||||
POST(me, &LEDBlinker_processEvent, evLBTMOff,TMON,0);
|
POST(me, &LEDBlinker_processEvent, evLBTMOff,TMON,0);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -15,7 +15,7 @@ extern "C" {
|
|||||||
#include "../xf/xf.h"
|
#include "../xf/xf.h"
|
||||||
|
|
||||||
enum LBSTATES_ {ST_LBINIT, ST_LBOFF, ST_LBON};
|
enum LBSTATES_ {ST_LBINIT, ST_LBOFF, ST_LBON};
|
||||||
enum LBEVENTS_ {evLBInit=100, evLBTMOff, evLBTMOn};
|
enum LBEVENTS_ {evLBInit=200, evLBTMOff, evLBTMOn};
|
||||||
typedef enum LBSTATES_ LBSTATES;
|
typedef enum LBSTATES_ LBSTATES;
|
||||||
typedef enum LBEVENTS_ LBEVENTS;
|
typedef enum LBEVENTS_ LBEVENTS;
|
||||||
|
|
||||||
|
@ -5,20 +5,6 @@
|
|||||||
#include "../xf/xf.h"
|
#include "../xf/xf.h"
|
||||||
#include "../board/button/button.h"
|
#include "../board/button/button.h"
|
||||||
|
|
||||||
bool test(Event* ev);
|
|
||||||
|
|
||||||
bool test(Event* ev) {
|
|
||||||
static bool on = true;
|
|
||||||
if (on == true){
|
|
||||||
LED_on(l());
|
|
||||||
on = false;
|
|
||||||
} else {
|
|
||||||
LED_off(l());
|
|
||||||
on = true;
|
|
||||||
}
|
|
||||||
POST(NULL,test, 2, 500, 0);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void main(void)
|
void main(void)
|
||||||
@ -36,30 +22,13 @@ void main(void)
|
|||||||
|
|
||||||
Factory_init();
|
Factory_init();
|
||||||
Factory_build();
|
Factory_build();
|
||||||
//Factory_start();
|
Factory_start();
|
||||||
|
|
||||||
//TMR0_SetInterruptHandler(XF_decrementAndQueueTimers);
|
TMR0_SetInterruptHandler(XF_decrementAndQueueTimers);
|
||||||
|
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
//XF_executeOnce();
|
XF_executeOnce();
|
||||||
if (BUTTON_isPressed(b1())) {
|
|
||||||
LED_on(l3());
|
|
||||||
} else {
|
|
||||||
LED_off(l3());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (BUTTON_isPressed(b2())) {
|
|
||||||
LED_on(l2());
|
|
||||||
} else {
|
|
||||||
LED_off(l2());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (BUTTON_isPressed(b3())) {
|
|
||||||
LED_on(l1());
|
|
||||||
} else {
|
|
||||||
LED_off(l1());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -8,6 +8,8 @@
|
|||||||
|
|
||||||
#include "button.h"
|
#include "button.h"
|
||||||
#include "../../mcc_generated_files/pin_manager.h"
|
#include "../../mcc_generated_files/pin_manager.h"
|
||||||
|
#include "../led/led.h"
|
||||||
|
#include "../../app/factory/factory.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Initialize the button
|
* @brief Initialize the button
|
||||||
@ -66,3 +68,64 @@ bool BUTTON_isPressed(BUTTON* me) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BUTTON_startBehaviour(BUTTON* me) {
|
||||||
|
POST(me, &BUTTON_processEvent, evPBInit, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BUTTON_processEvent(Event * ev) {
|
||||||
|
bool processed = false;
|
||||||
|
BUTTON* me = (BUTTON*)Event_getTarget(ev);
|
||||||
|
BUTTON_STATES oldState = me->state;
|
||||||
|
evIDT evid = Event_getId(ev);
|
||||||
|
|
||||||
|
switch(me->state){
|
||||||
|
case ST_PBINIT:
|
||||||
|
if (evid == evPBInit) {
|
||||||
|
if(BUTTON_isPressed(me)) {
|
||||||
|
me->state = ST_PBPRESSED;
|
||||||
|
} else {
|
||||||
|
me->state = ST_PBRELEASED;
|
||||||
|
}
|
||||||
|
POST(me, &BUTTON_processEvent, evPBPoll, PB_POLL_TIME, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ST_PBPOLL:
|
||||||
|
break;
|
||||||
|
case ST_PBRELEASED:
|
||||||
|
if(evid == evPBPoll) {
|
||||||
|
if(BUTTON_isPressed(me)) {
|
||||||
|
me->state = ST_PBPRESSED;
|
||||||
|
}
|
||||||
|
POST(me, &BUTTON_processEvent, evPBPoll, PB_POLL_TIME, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
case ST_PBPRESSED:
|
||||||
|
if(evid == evPBPoll) {
|
||||||
|
if(!BUTTON_isPressed(me)){
|
||||||
|
me->state = ST_PBRELEASED;
|
||||||
|
}
|
||||||
|
POST(me, &BUTTON_processEvent, evPBPoll, PB_POLL_TIME, 0);
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(oldState != me->state) {
|
||||||
|
switch(me->state){
|
||||||
|
case ST_PBINIT:
|
||||||
|
break;
|
||||||
|
case ST_PBPOLL:
|
||||||
|
break;
|
||||||
|
case ST_PBRELEASED:
|
||||||
|
LED_off(l10());
|
||||||
|
break;
|
||||||
|
case ST_PBPRESSED:
|
||||||
|
LED_on(l10());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
processed = true;
|
||||||
|
}
|
||||||
|
return processed;
|
||||||
|
}
|
@ -10,9 +10,12 @@
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include "../../xf/xf.h"
|
||||||
|
|
||||||
|
#define PB_POLL_TIME 20
|
||||||
|
|
||||||
typedef enum {ST_PBINIT, ST_PBWAIT, ST_PBPOLL, ST_PBRELEASED, ST_PBPRESSED} BUTTON_STATES;
|
typedef enum {ST_PBINIT, ST_PBWAIT, ST_PBPOLL, ST_PBRELEASED, ST_PBPRESSED} BUTTON_STATES;
|
||||||
typedef enum {evPBInit, evPBPoll} BUTTON_EVENTS;
|
typedef enum {evPBInit=100, evPBPoll} BUTTON_EVENTS;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t id;
|
uint8_t id;
|
||||||
@ -23,5 +26,7 @@ typedef struct {
|
|||||||
void BUTTON_init(BUTTON* me, uint8_t id);
|
void BUTTON_init(BUTTON* me, uint8_t id);
|
||||||
void BUTTON_initHW(BUTTON* me);
|
void BUTTON_initHW(BUTTON* me);
|
||||||
bool BUTTON_isPressed(BUTTON* me);
|
bool BUTTON_isPressed(BUTTON* me);
|
||||||
|
void BUTTON_startBehaviour(BUTTON* me);
|
||||||
|
bool BUTTON_processEvent(Event* ev);
|
||||||
|
|
||||||
#endif /* BUTTON_H */
|
#endif /* BUTTON_H */
|
@ -93,7 +93,7 @@
|
|||||||
<platformTool>PICkit3PlatformTool</platformTool>
|
<platformTool>PICkit3PlatformTool</platformTool>
|
||||||
<languageToolchain>XC8</languageToolchain>
|
<languageToolchain>XC8</languageToolchain>
|
||||||
<languageToolchainVersion>2.41</languageToolchainVersion>
|
<languageToolchainVersion>2.41</languageToolchainVersion>
|
||||||
<platform>2</platform>
|
<platform>3</platform>
|
||||||
</toolsSet>
|
</toolsSet>
|
||||||
<packs>
|
<packs>
|
||||||
<pack name="PIC18F-K_DFP" vendor="Microchip" version="1.7.134"/>
|
<pack name="PIC18F-K_DFP" vendor="Microchip" version="1.7.134"/>
|
||||||
|
Reference in New Issue
Block a user