Telliskivi 2+ peripherals library

Committer:
Reiko
Date:
Tue Sep 02 15:31:07 2014 +0000
Revision:
3:92390ebe4903
Parent:
2:1ef07b660873
Changed ball debounce settings

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Reiko 0:ccf47494061b 1 #include "HumanInterface.h"
Reiko 0:ccf47494061b 2
mlaane 2:1ef07b660873 3
Reiko 1:9b2455659c7d 4 HumanInterface::HumanInterface (PCA9555 *ioExt,
Reiko 0:ccf47494061b 5 unsigned int yellowLedPin, unsigned int blueLedPin, unsigned int redLedPin,
Reiko 1:9b2455659c7d 6 unsigned int greenLedPin, unsigned int orangeLedPin,
Reiko 1:9b2455659c7d 7 PinName goalButtonPin, PinName startButtonPin, PinName ballSensePin):
mlaane 2:1ef07b660873 8 extIO(ioExt), redLed(ioExt, redLedPin), blueLed(ioExt, blueLedPin), yellowLed(ioExt, yellowLedPin),
Reiko 1:9b2455659c7d 9 greenLed(ioExt, greenLedPin), orangeLed(ioExt, orangeLedPin),
mlaane 2:1ef07b660873 10 /*interruptGoal(goalButtonPin), interruptStart(startButtonPin), interruptBall(ballSensePin)*/
mlaane 2:1ef07b660873 11 buttonGoal(goalButtonPin), buttonStart(startButtonPin), inputBall(ballSensePin)
mlaane 2:1ef07b660873 12 {
mlaane 2:1ef07b660873 13 goalButtonPressed = false;
mlaane 2:1ef07b660873 14 startButtonReleased = false;
mlaane 2:1ef07b660873 15 ballState = 0;
mlaane 2:1ef07b660873 16
mlaane 2:1ef07b660873 17 buttonGoal.mode(PullUp);
mlaane 2:1ef07b660873 18 buttonStart.mode(PullUp);
mlaane 2:1ef07b660873 19
mlaane 2:1ef07b660873 20 buttonGoal.attach_deasserted(this, &HumanInterface::goalFall);
mlaane 2:1ef07b660873 21 buttonStart.attach_asserted(this, &HumanInterface::startRise);
mlaane 2:1ef07b660873 22 inputBall.attach_asserted(this, &HumanInterface::ballRise);
mlaane 2:1ef07b660873 23 inputBall.attach_deasserted(this, &HumanInterface::ballFall);
mlaane 2:1ef07b660873 24
mlaane 2:1ef07b660873 25 buttonGoal.setSamplesTillAssert(20);
mlaane 2:1ef07b660873 26 buttonStart.setSamplesTillAssert(20);
Reiko 3:92390ebe4903 27 inputBall.setSamplesTillAssert(2);
mlaane 2:1ef07b660873 28
mlaane 2:1ef07b660873 29 buttonGoal.setSampleFrequency(1000);
mlaane 2:1ef07b660873 30 buttonStart.setSampleFrequency(1000);
Reiko 3:92390ebe4903 31 inputBall.setSampleFrequency(250);
mlaane 2:1ef07b660873 32
mlaane 2:1ef07b660873 33
Reiko 0:ccf47494061b 34 redBlinking = false;
Reiko 0:ccf47494061b 35 blueBlinking = false;
Reiko 0:ccf47494061b 36 yellowBlinking = false;
Reiko 1:9b2455659c7d 37 greenBlinking = false;
Reiko 1:9b2455659c7d 38 orangeBlinking = false;
Reiko 0:ccf47494061b 39
Reiko 0:ccf47494061b 40 setGoal(UNSET);
Reiko 0:ccf47494061b 41
Reiko 0:ccf47494061b 42 ledTicker.attach(this, &HumanInterface::blinkLeds, 0.2);
Reiko 1:9b2455659c7d 43
Reiko 0:ccf47494061b 44 }
Reiko 0:ccf47494061b 45
Reiko 0:ccf47494061b 46 void HumanInterface::setError(bool state) {
Reiko 0:ccf47494061b 47 if (state) {
Reiko 0:ccf47494061b 48 redBlinking = true;
Reiko 0:ccf47494061b 49 } else {
Reiko 0:ccf47494061b 50 redBlinking = false;
Reiko 0:ccf47494061b 51 redLed.clear();
Reiko 0:ccf47494061b 52 }
Reiko 0:ccf47494061b 53 }
Reiko 0:ccf47494061b 54
Reiko 1:9b2455659c7d 55 void HumanInterface::setGo(bool state) {
Reiko 1:9b2455659c7d 56 if (state) {
Reiko 1:9b2455659c7d 57 greenLed.set();
Reiko 1:9b2455659c7d 58 } else {
Reiko 1:9b2455659c7d 59 greenLed.clear();
Reiko 1:9b2455659c7d 60 }
Reiko 1:9b2455659c7d 61 }
Reiko 0:ccf47494061b 62
Reiko 0:ccf47494061b 63 void HumanInterface::setGoal(Goal goal) {
Reiko 0:ccf47494061b 64 if (goal == YELLOW) {
Reiko 0:ccf47494061b 65 yellowLed.set();
Reiko 0:ccf47494061b 66 blueLed.clear();
Reiko 0:ccf47494061b 67 blueBlinking = false;
Reiko 0:ccf47494061b 68 yellowBlinking = false;
Reiko 0:ccf47494061b 69 } else if (goal == BLUE) {
Reiko 0:ccf47494061b 70 yellowLed.clear();
Reiko 0:ccf47494061b 71 blueLed.set();
Reiko 0:ccf47494061b 72 blueBlinking = false;
Reiko 0:ccf47494061b 73 yellowBlinking = false;
Reiko 0:ccf47494061b 74 } else if (goal == UNSET) {
Reiko 0:ccf47494061b 75 yellowLed.clear();
Reiko 0:ccf47494061b 76 blueLed.clear();
Reiko 0:ccf47494061b 77 blueBlinking = true;
Reiko 0:ccf47494061b 78 yellowBlinking = true;
Reiko 0:ccf47494061b 79 }
Reiko 0:ccf47494061b 80 }
Reiko 0:ccf47494061b 81
Reiko 0:ccf47494061b 82 void HumanInterface::blinkLeds(void) {
Reiko 0:ccf47494061b 83 if (redBlinking)
Reiko 0:ccf47494061b 84 redLed.toggle();
Reiko 0:ccf47494061b 85 if (blueBlinking)
Reiko 0:ccf47494061b 86 blueLed.toggle();
Reiko 0:ccf47494061b 87 if (yellowBlinking)
Reiko 0:ccf47494061b 88 yellowLed.toggle();
Reiko 1:9b2455659c7d 89 if (greenBlinking)
Reiko 1:9b2455659c7d 90 greenLed.toggle();
Reiko 1:9b2455659c7d 91 if (orangeBlinking)
Reiko 1:9b2455659c7d 92 orangeLed.toggle();
Reiko 0:ccf47494061b 93 }
Reiko 0:ccf47494061b 94
mlaane 2:1ef07b660873 95
Reiko 1:9b2455659c7d 96
mlaane 2:1ef07b660873 97 int HumanInterface::getBallState() {
mlaane 2:1ef07b660873 98 int ret = ballState;
mlaane 2:1ef07b660873 99 ballState = 0;
mlaane 2:1ef07b660873 100 return ret;
Reiko 1:9b2455659c7d 101 }
Reiko 1:9b2455659c7d 102
mlaane 2:1ef07b660873 103 bool HumanInterface::isGoalChange() {
mlaane 2:1ef07b660873 104 bool ret = goalButtonPressed;
mlaane 2:1ef07b660873 105 goalButtonPressed = false;
mlaane 2:1ef07b660873 106 return ret;
Reiko 0:ccf47494061b 107 }
mlaane 2:1ef07b660873 108 bool HumanInterface::isStart() {
mlaane 2:1ef07b660873 109 bool ret = startButtonReleased;
mlaane 2:1ef07b660873 110 startButtonReleased = false;
mlaane 2:1ef07b660873 111 return ret;
Reiko 0:ccf47494061b 112 }
Reiko 0:ccf47494061b 113
mlaane 2:1ef07b660873 114
mlaane 2:1ef07b660873 115 void HumanInterface::goalFall() {
mlaane 2:1ef07b660873 116 goalButtonPressed = true;
Reiko 0:ccf47494061b 117 }
Reiko 0:ccf47494061b 118
mlaane 2:1ef07b660873 119 void HumanInterface::startRise() {
mlaane 2:1ef07b660873 120 startButtonReleased = true;
Reiko 1:9b2455659c7d 121 }
Reiko 1:9b2455659c7d 122
mlaane 2:1ef07b660873 123 void HumanInterface::ballRise() {
mlaane 2:1ef07b660873 124 ballState = 1;
mlaane 2:1ef07b660873 125 }
mlaane 2:1ef07b660873 126
mlaane 2:1ef07b660873 127 void HumanInterface::ballFall() {
mlaane 2:1ef07b660873 128 ballState = -1;
mlaane 2:1ef07b660873 129 }