actions.h (1072B)
1 #include <Servo.h> 2 #include "instructions.h" 3 4 #define MAXACTIONS 2 5 6 enum triggerGates { 7 AND, 8 OR, 9 NOT, 10 XOR, 11 12 XNOR, 13 NAND, 14 NOR, 15 }; 16 17 typedef struct action { 18 volatile bool (*triggers[MAXACTIONS])(void); 19 void (*action)(void); 20 int triggerGate; 21 } action; 22 23 bool 24 isButtonAPressed() { 25 return !digitalRead(BUTTONA); 26 } 27 28 bool 29 isButtonBPressed() { 30 return !digitalRead(BUTTONB); 31 } 32 33 34 void 35 moveFWD(void) { 36 stepMove(FWD); 37 } 38 39 void 40 moveBWD(void) { 41 stepMove(BWD); 42 } 43 44 void 45 stepLFT(void) { 46 stepTurn(LFT); 47 } 48 49 void 50 stepRGT(void) { 51 stepTurn(RGT); 52 } 53 54 bool 55 shouldAction(action *a) { 56 switch (a->triggerGate) { 57 case AND: 58 return a->triggers[0]() && a->triggers[1](); 59 case OR: 60 return a->triggers[0]() || a->triggers[1](); 61 case XOR: 62 return a->triggers[0]() ^ a->triggers[1](); 63 case NOT: 64 return !a->triggers[0](); 65 66 case NAND: 67 return !(a->triggers[0]() && a->triggers[1]()); 68 case NOR: 69 return !(a->triggers[0]() || a->triggers[1]()); 70 case XNOR: 71 return !(a->triggers[0]() ^ a->triggers[1]()); 72 } 73 } 74 75 void 76 runAction(action *a) { 77 if (shouldAction(a)) 78 a->action(); 79 }