DoubleCoilGun
Fork of CoilGun by
coilgun.cpp
- Committer:
- mlaane
- Date:
- 2013-09-14
- Revision:
- 3:7273ba733560
- Parent:
- 2:781ea1999ad3
- Child:
- 4:0e2bdd3d52bc
File content as of revision 3:7273ba733560:
#include "coilgun.h" CoilGun::CoilGun(PinName chargePinName, PinName kickPinName, PinName donePin) : chargePin(chargePinName), kickPin(kickPinName), done(donePin) { kicking = false; discharging = false; kickPin = 1; chargePin = 0; done.fall(this, &CoilGun::doneCallback); } void CoilGun::kick(unsigned int length) { if (!kicking){ chargePin = 0; kicking = true; kickPin = 0; kickTimeout.attach_us(this, &CoilGun::kickEnd, length); } } void CoilGun::kickEnd(void) { kickTimeout.detach(); kickPin = 1; chargePin = 1; kicking = false; } void CoilGun::setCharge(bool chargeState) { if (chargeState) { if (discharging) dischargeEnd(); kickPin = 1; chargePin = 1; } else { chargePin = 0; } } void CoilGun::discharge() { setCharge(false); discharging = true; dischargeTimeout.attach(this, &CoilGun::dischargeEnd, 5.0); // End discharging after 5 seconds discharger.attach_us(this, &CoilGun::dischargeKick, 5000); // calls short kick every 5ms } void CoilGun::dischargeKick(void) { kick(1000); } void CoilGun::dischargeEnd(void) { discharger.detach(); discharging = false; } void CoilGun::doneCallback(void) { chargePin = 0; }