Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
coilgun.cpp
- Committer:
- mlaane
- Date:
- 2013-09-14
- Revision:
- 4:0e2bdd3d52bc
- Parent:
- 3:7273ba733560
- Child:
- 5:0e061c4013a2
File content as of revision 4:0e2bdd3d52bc:
#include "coilgun.h"
CoilGun::CoilGun(PinName chargePinName, PinName kickPinName, PinName donePinName)
: chargePin(chargePinName), kickPin(kickPinName), donePin(donePinName) {
kicking = false;
discharging = false;
kickPin = 1;
chargePin = 0;
donePin.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;
}
