Change of code in Solenoid taken from Jim Hamblen's Notebook page on solenoids. https://developer.mbed.org/users/4180_1/notebook/an-introduction-to-solenoids/ Changed action of Solenoid class. Removed off delay functionality. Added on delay functionality and renamed for clarity between on delay and on time.
Fork of Solenoid by
Solenoid.h@0:bd163b4ce456, 2015-11-24 (annotated)
- Committer:
- mitchpang
- Date:
- Tue Nov 24 09:36:27 2015 +0000
- Revision:
- 0:bd163b4ce456
- Child:
- 1:b87c9e1546c5
first commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mitchpang | 0:bd163b4ce456 | 1 | //Found on Jim Hamblen's Solenoid Notebook page at https://developer.mbed.org/users/4180_1/notebook/an-introduction-to-solenoids/ |
mitchpang | 0:bd163b4ce456 | 2 | |
mitchpang | 0:bd163b4ce456 | 3 | #ifndef __SOLENOID_H__ |
mitchpang | 0:bd163b4ce456 | 4 | #define __SOLENOID_H__ |
mitchpang | 0:bd163b4ce456 | 5 | |
mitchpang | 0:bd163b4ce456 | 6 | #include "mbed.h" |
mitchpang | 0:bd163b4ce456 | 7 | |
mitchpang | 0:bd163b4ce456 | 8 | class Solenoid |
mitchpang | 0:bd163b4ce456 | 9 | { |
mitchpang | 0:bd163b4ce456 | 10 | public: |
mitchpang | 0:bd163b4ce456 | 11 | Solenoid (PinName pin, float ondelay=0.5, float offdelay=2.0); |
mitchpang | 0:bd163b4ce456 | 12 | void write(bool state); |
mitchpang | 0:bd163b4ce456 | 13 | Solenoid& operator= (bool value); |
mitchpang | 0:bd163b4ce456 | 14 | |
mitchpang | 0:bd163b4ce456 | 15 | private: |
mitchpang | 0:bd163b4ce456 | 16 | void Solenoid_Off_Int(); |
mitchpang | 0:bd163b4ce456 | 17 | DigitalOut _pin; |
mitchpang | 0:bd163b4ce456 | 18 | Timeout tint; |
mitchpang | 0:bd163b4ce456 | 19 | Timer offtimer; |
mitchpang | 0:bd163b4ce456 | 20 | float ontime; |
mitchpang | 0:bd163b4ce456 | 21 | float offtime; |
mitchpang | 0:bd163b4ce456 | 22 | }; |
mitchpang | 0:bd163b4ce456 | 23 | Solenoid::Solenoid(PinName pin, float ondelay, float offdelay) : _pin(pin), ontime(ondelay), offtime(offdelay) |
mitchpang | 0:bd163b4ce456 | 24 | { |
mitchpang | 0:bd163b4ce456 | 25 | _pin=0; |
mitchpang | 0:bd163b4ce456 | 26 | offtimer.start(); |
mitchpang | 0:bd163b4ce456 | 27 | |
mitchpang | 0:bd163b4ce456 | 28 | } |
mitchpang | 0:bd163b4ce456 | 29 | void Solenoid::Solenoid_Off_Int() |
mitchpang | 0:bd163b4ce456 | 30 | { |
mitchpang | 0:bd163b4ce456 | 31 | _pin=0;//OFF timer interrupt routine to auto turn off solenoid |
mitchpang | 0:bd163b4ce456 | 32 | offtimer.start(); //start off-time delay count |
mitchpang | 0:bd163b4ce456 | 33 | } |
mitchpang | 0:bd163b4ce456 | 34 | void Solenoid::write(bool value) |
mitchpang | 0:bd163b4ce456 | 35 | { |
mitchpang | 0:bd163b4ce456 | 36 | if (value!=0) {//ON so do auto off with timer interrupt |
mitchpang | 0:bd163b4ce456 | 37 | while(offtimer.read() < offtime); //wait for min OFF time before next ON allowed |
mitchpang | 0:bd163b4ce456 | 38 | offtimer.stop(); |
mitchpang | 0:bd163b4ce456 | 39 | offtimer.reset(); //reset off timer delay count |
mitchpang | 0:bd163b4ce456 | 40 | tint.attach(this,&Solenoid::Solenoid_Off_Int,ontime);//setup a timer interrupt for on time |
mitchpang | 0:bd163b4ce456 | 41 | } else |
mitchpang | 0:bd163b4ce456 | 42 | offtimer.start(); //solenoid turned off with a write call (not timers) so start off count |
mitchpang | 0:bd163b4ce456 | 43 | _pin = value; |
mitchpang | 0:bd163b4ce456 | 44 | } |
mitchpang | 0:bd163b4ce456 | 45 | Solenoid& Solenoid::operator= (bool value) |
mitchpang | 0:bd163b4ce456 | 46 | { |
mitchpang | 0:bd163b4ce456 | 47 | write(value); |
mitchpang | 0:bd163b4ce456 | 48 | return *this; |
mitchpang | 0:bd163b4ce456 | 49 | } |
mitchpang | 0:bd163b4ce456 | 50 | |
mitchpang | 0:bd163b4ce456 | 51 | #endif /* __SOLENOID_H__ */ |