DoubleCoilGun

Dependents:   Telliskivi2_2014

Fork of CoilGun by Reiko Randoja

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?

UserRevisionLine numberNew 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 }