DoubleCoilGun
Fork of CoilGun by
Diff: coilgun.cpp
- Revision:
- 6:4c75db8a43db
- Parent:
- 5:0e061c4013a2
- Child:
- 7:95d16e38d0d8
--- a/coilgun.cpp Wed Sep 18 10:50:22 2013 +0000 +++ b/coilgun.cpp Wed Sep 18 11:20:31 2013 +0000 @@ -1,80 +1,80 @@ - #include "coilgun.h" +#include "coilgun.h" - Coilgun::Coilgun(PinName kickPinName ,PinName chargePinName, PinName donePinName): - kickPin(kickPinName),chargePin(chargePinName), donePin(donePinName) - { - state = idle; - kickPin = 1; - chargePin = 0; - donePin.fall(this, &Coilgun::chargeEnd); - } - - void Coilgun::kick(unsigned int length) { - kick(length,true); - } +Coilgun::Coilgun(PinName kickPinName ,PinName chargePinName, PinName donePinName): + kickPin(kickPinName),chargePin(chargePinName), donePin(donePinName) +{ + state = idle; + kickPin = 1; + chargePin = 0; + donePin.fall(this, &Coilgun::chargeEnd); +} + +void Coilgun::kick(unsigned int length) { + kick(length,true); +} + +void Coilgun::kick(unsigned int length, bool change_state = true) { + if(change_state) //Used to keep state when discharging + changeState(kicking); - void Coilgun::kick(unsigned int length, bool change_state = true) { - if(change_state) //Used to keep state when discharging - changeState(kicking); - - chargePin = 0; // Maybe not needed anymore? (still a safety?) - kickPin = 0; - kickTimeout.attach_us(this, &Coilgun::kickEnd, length); - } - - void Coilgun::kickEnd(void) { - kickTimeout.detach(); - kickPin = 1; + chargePin = 0; // Maybe not needed anymore? (still a safety?) + kickPin = 0; + kickTimeout.attach_us(this, &Coilgun::kickEnd, length); +} - if(state != discharging){ //Used when discharging - chargePin = 1; // Don't start charging again - state = idle; //(let state stay "discharging") - } - +void Coilgun::kickEnd(void) { + kickTimeout.detach(); + kickPin = 1; + + if(state != discharging){ //Used when discharging + chargePin = 1; // Don't start charging again + state = idle; //(let state stay "discharging") } - void Coilgun::charge() { - changeState(charging); - kickPin = 1; - chargePin = 1; - } +} + +void Coilgun::charge() { + changeState(charging); + kickPin = 1; + chargePin = 1; +} + +void Coilgun::chargeEnd(){ + chargePin = 0; + state = idle; +} - void Coilgun::chargeEnd(){ - chargePin = 0; - state = idle; - } - - void Coilgun::discharge() { - changeState(discharging); - dischargeTimeout.attach(this, &Coilgun::dischargeEnd, 10.0); // End discharging after 10 seconds - discharger.attach_us(this, &Coilgun::dischargeKick, 5000); // calls short kick every 5ms - } - void Coilgun::dischargeEnd(void) { - discharger.detach(); - state = idle; - } - void Coilgun::dischargeKick(void) { - kick(500, false); +void Coilgun::discharge() { + changeState(discharging); + dischargeTimeout.attach(this, &Coilgun::dischargeEnd, 10.0); // End discharging after 10 seconds + discharger.attach_us(this, &Coilgun::dischargeKick, 5000); // calls short kick every 5ms +} +void Coilgun::dischargeEnd(void) { + discharger.detach(); + state = idle; +} +void Coilgun::dischargeKick(void) { + kick(500, false); +} + +void Coilgun::changeState(State new_state){ + switch(state){ + case idle: + //nothing to end. + break; + case kicking: + kickEnd(); + break; + case charging: + chargeEnd(); + break; + case discharging: + dischargeEnd(); + break; + default: + //error - no such state + break; } - - void Coilgun::changeState(State new_state){ - switch(state){ - case idle: - //nothing to end. - break; - case kicking: - kickEnd(); - break; - case charging: - chargeEnd(); - break; - case discharging: - dischargeEnd(); - break; - default: - //error - no such state - break; - } - //set new state - state = new_state; - } \ No newline at end of file + //set new state + state = new_state; +} \ No newline at end of file