DoubleCoilGun

Dependents:   Telliskivi2_2014

Fork of CoilGun by Reiko Randoja

Committer:
Reiko
Date:
Sat Sep 17 11:50:59 2016 +0000
Revision:
12:7cc6aeaa4bf8
Parent:
10:7518047a0375
Shorter discharge kicks

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Reiko 0:2d5820be7f51 1 #ifndef COILGUN_H
Reiko 0:2d5820be7f51 2 #define COILGUN_H
Reiko 6:4c75db8a43db 3
Reiko 0:2d5820be7f51 4 #include "mbed.h"
Reiko 6:4c75db8a43db 5
Reiko 6:4c75db8a43db 6 /** Class for controlling coilgun */
Reiko 6:4c75db8a43db 7 class Coilgun {
Reiko 0:2d5820be7f51 8 public:
mlaane 8:eee78d8bfdb9 9 /** Create an instance of the Coilgun connected to specfied pins */
Reiko 10:7518047a0375 10 Coilgun(PinName kickPinName, PinName chipPinName, PinName chargePinName, PinName donePinName);
mlaane 8:eee78d8bfdb9 11
mlaane 8:eee78d8bfdb9 12 /** Kick with coilgun */
Reiko 10:7518047a0375 13 void kick(unsigned int kickLength, unsigned int kickDelay, unsigned int chipLength, unsigned int chipDelay);
mlaane 8:eee78d8bfdb9 14 /** Stop kick */
Reiko 2:781ea1999ad3 15 void kickEnd(void);
Reiko 10:7518047a0375 16 void chipEnd(void);
mlaane 3:7273ba733560 17
mlaane 8:eee78d8bfdb9 18 /** Charge capacitor */
Reiko 6:4c75db8a43db 19 void charge(void);
mlaane 8:eee78d8bfdb9 20 /** Stop charging capacitor */
Reiko 6:4c75db8a43db 21 void chargeEnd(void);
Reiko 6:4c75db8a43db 22
mlaane 8:eee78d8bfdb9 23 /** Discharge capacitor */
Reiko 6:4c75db8a43db 24 void discharge(void);
mlaane 8:eee78d8bfdb9 25 /** Stop discharging */
Reiko 6:4c75db8a43db 26 void dischargeEnd(void);
Reiko 6:4c75db8a43db 27
mlaane 8:eee78d8bfdb9 28 /** Read only
mlaane 8:eee78d8bfdb9 29 * Will be set to true, when charge() is called,
mlaane 8:eee78d8bfdb9 30 * false, when discharge is called.
mlaane 8:eee78d8bfdb9 31 * NB! if discharge is interrupted, capacitor may still have some charge on it.
mlaane 8:eee78d8bfdb9 32 */
mlaane 8:eee78d8bfdb9 33 bool isCharged;
Reiko 6:4c75db8a43db 34
Reiko 6:4c75db8a43db 35 private:
Reiko 6:4c75db8a43db 36 enum State {idle, kicking, charging, discharging};
Reiko 6:4c75db8a43db 37 State state;
Reiko 6:4c75db8a43db 38
Reiko 10:7518047a0375 39 unsigned int currentKickLength;
Reiko 10:7518047a0375 40 unsigned int currentKickDelay;
Reiko 10:7518047a0375 41 unsigned int currentChipLength;
Reiko 10:7518047a0375 42 unsigned int currentChipDelay;
Reiko 10:7518047a0375 43
Reiko 6:4c75db8a43db 44 DigitalOut kickPin;
Reiko 10:7518047a0375 45 DigitalOut chipPin;
Reiko 6:4c75db8a43db 46 DigitalOut chargePin;
Reiko 6:4c75db8a43db 47 InterruptIn donePin;
Reiko 6:4c75db8a43db 48
Reiko 6:4c75db8a43db 49 Timeout kickTimeout; // This will end kicking
Reiko 10:7518047a0375 50 Timeout kickDelayTimeout;
Reiko 10:7518047a0375 51 Timeout chipTimeout;
Reiko 10:7518047a0375 52 Timeout chipDelayTimeout;
Reiko 10:7518047a0375 53
Reiko 10:7518047a0375 54 bool kickActive;
Reiko 10:7518047a0375 55 bool chipActive;
Reiko 10:7518047a0375 56
mlaane 3:7273ba733560 57 Timeout dischargeTimeout; // This will end discharging
mlaane 3:7273ba733560 58 Ticker discharger; // Calls short kicks during discharge
Reiko 6:4c75db8a43db 59
Reiko 10:7518047a0375 60 void kickDelayEnd(void);
Reiko 10:7518047a0375 61 void chipDelayEnd(void);
Reiko 10:7518047a0375 62
Reiko 6:4c75db8a43db 63 void changeState(State new_state);
Reiko 6:4c75db8a43db 64 void dischargeKick(void);
Reiko 10:7518047a0375 65 void kick(unsigned int kickLength, unsigned int kickDelay, unsigned int chipLength, unsigned int chipDelay, bool change_state);
Reiko 0:2d5820be7f51 66 };
Reiko 6:4c75db8a43db 67
Reiko 0:2d5820be7f51 68 #endif