uni

Thing1's amazing uni repo
Log | Files | Refs

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 }