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 Mitchell Pang

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?

UserRevisionLine numberNew 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__ */