CoilGun
coilgun.cpp@3:7273ba733560, 2013-09-14 (annotated)
- Committer:
- mlaane
- Date:
- Sat Sep 14 22:31:22 2013 +0000
- Revision:
- 3:7273ba733560
- Parent:
- 2:781ea1999ad3
- Child:
- 4:0e2bdd3d52bc
Implemented discharging; Problems with Timeout
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Reiko | 1:aa39e3a9d06f | 1 | #include "coilgun.h" |
Reiko | 0:2d5820be7f51 | 2 | |
Reiko | 1:aa39e3a9d06f | 3 | CoilGun::CoilGun(PinName chargePinName, PinName kickPinName, PinName donePin) |
Reiko | 1:aa39e3a9d06f | 4 | : chargePin(chargePinName), kickPin(kickPinName), done(donePin) { |
mlaane | 3:7273ba733560 | 5 | kicking = false; |
mlaane | 3:7273ba733560 | 6 | discharging = false; |
mlaane | 3:7273ba733560 | 7 | kickPin = 1; |
mlaane | 3:7273ba733560 | 8 | chargePin = 0; |
Reiko | 2:781ea1999ad3 | 9 | done.fall(this, &CoilGun::doneCallback); |
Reiko | 0:2d5820be7f51 | 10 | } |
Reiko | 0:2d5820be7f51 | 11 | |
Reiko | 2:781ea1999ad3 | 12 | void CoilGun::kick(unsigned int length) { |
mlaane | 3:7273ba733560 | 13 | if (!kicking){ |
mlaane | 3:7273ba733560 | 14 | chargePin = 0; |
mlaane | 3:7273ba733560 | 15 | kicking = true; |
mlaane | 3:7273ba733560 | 16 | kickPin = 0; |
mlaane | 3:7273ba733560 | 17 | kickTimeout.attach_us(this, &CoilGun::kickEnd, length); |
mlaane | 3:7273ba733560 | 18 | } |
Reiko | 2:781ea1999ad3 | 19 | } |
Reiko | 2:781ea1999ad3 | 20 | |
Reiko | 2:781ea1999ad3 | 21 | void CoilGun::kickEnd(void) { |
mlaane | 3:7273ba733560 | 22 | kickTimeout.detach(); |
Reiko | 2:781ea1999ad3 | 23 | kickPin = 1; |
mlaane | 3:7273ba733560 | 24 | chargePin = 1; |
mlaane | 3:7273ba733560 | 25 | kicking = false; |
Reiko | 0:2d5820be7f51 | 26 | } |
Reiko | 0:2d5820be7f51 | 27 | |
Reiko | 0:2d5820be7f51 | 28 | void CoilGun::setCharge(bool chargeState) { |
Reiko | 1:aa39e3a9d06f | 29 | if (chargeState) { |
mlaane | 3:7273ba733560 | 30 | if (discharging) |
mlaane | 3:7273ba733560 | 31 | dischargeEnd(); |
mlaane | 3:7273ba733560 | 32 | kickPin = 1; |
Reiko | 1:aa39e3a9d06f | 33 | chargePin = 1; |
Reiko | 0:2d5820be7f51 | 34 | } else { |
Reiko | 1:aa39e3a9d06f | 35 | chargePin = 0; |
Reiko | 0:2d5820be7f51 | 36 | } |
Reiko | 0:2d5820be7f51 | 37 | } |
Reiko | 0:2d5820be7f51 | 38 | |
Reiko | 0:2d5820be7f51 | 39 | void CoilGun::discharge() { |
mlaane | 3:7273ba733560 | 40 | setCharge(false); |
mlaane | 3:7273ba733560 | 41 | discharging = true; |
mlaane | 3:7273ba733560 | 42 | dischargeTimeout.attach(this, &CoilGun::dischargeEnd, 5.0); // End discharging after 5 seconds |
mlaane | 3:7273ba733560 | 43 | discharger.attach_us(this, &CoilGun::dischargeKick, 5000); // calls short kick every 5ms |
mlaane | 3:7273ba733560 | 44 | } |
mlaane | 3:7273ba733560 | 45 | void CoilGun::dischargeKick(void) { |
mlaane | 3:7273ba733560 | 46 | kick(1000); |
mlaane | 3:7273ba733560 | 47 | } |
mlaane | 3:7273ba733560 | 48 | void CoilGun::dischargeEnd(void) { |
mlaane | 3:7273ba733560 | 49 | discharger.detach(); |
mlaane | 3:7273ba733560 | 50 | discharging = false; |
Reiko | 0:2d5820be7f51 | 51 | } |
Reiko | 0:2d5820be7f51 | 52 | |
Reiko | 0:2d5820be7f51 | 53 | void CoilGun::doneCallback(void) { |
Reiko | 1:aa39e3a9d06f | 54 | chargePin = 0; |
Reiko | 0:2d5820be7f51 | 55 | } |