Telliskivi 2+ peripherals library
HumanInterface.cpp@3:92390ebe4903, 2014-09-02 (annotated)
- 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?
User | Revision | Line number | New 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 | } |