DoubleCoilGun

Dependents:   Telliskivi2_2014

Fork of CoilGun by Reiko Randoja

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;
}