Control a solenoid using a power MOSFET circuit
Dependencies: mbed
main.cpp@0:9a9311d745c3, 2018-02-14 (annotated)
- Committer:
- Nydrel
- Date:
- Wed Feb 14 09:39:54 2018 +0000
- Revision:
- 0:9a9311d745c3
Changed the solenoid to pin21;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Nydrel | 0:9a9311d745c3 | 1 | #include "mbed.h" |
Nydrel | 0:9a9311d745c3 | 2 | //Solenoid Hello World |
Nydrel | 0:9a9311d745c3 | 3 | DigitalOut myled(LED1); |
Nydrel | 0:9a9311d745c3 | 4 | //Non blocking with auto off delay using timer interrupt setup by class |
Nydrel | 0:9a9311d745c3 | 5 | class Solenoid |
Nydrel | 0:9a9311d745c3 | 6 | { |
Nydrel | 0:9a9311d745c3 | 7 | public: |
Nydrel | 0:9a9311d745c3 | 8 | Solenoid (PinName pin, float delay=0.5); |
Nydrel | 0:9a9311d745c3 | 9 | void write(bool state); |
Nydrel | 0:9a9311d745c3 | 10 | Solenoid& operator= (bool value); |
Nydrel | 0:9a9311d745c3 | 11 | |
Nydrel | 0:9a9311d745c3 | 12 | private: |
Nydrel | 0:9a9311d745c3 | 13 | void Solenoid_Off_Int(); |
Nydrel | 0:9a9311d745c3 | 14 | DigitalOut _pin; |
Nydrel | 0:9a9311d745c3 | 15 | Timeout tint; |
Nydrel | 0:9a9311d745c3 | 16 | float ontime; |
Nydrel | 0:9a9311d745c3 | 17 | }; |
Nydrel | 0:9a9311d745c3 | 18 | Solenoid::Solenoid(PinName pin, float delay) : _pin(pin), ontime(delay) |
Nydrel | 0:9a9311d745c3 | 19 | { |
Nydrel | 0:9a9311d745c3 | 20 | _pin=0; |
Nydrel | 0:9a9311d745c3 | 21 | } |
Nydrel | 0:9a9311d745c3 | 22 | void Solenoid::Solenoid_Off_Int() |
Nydrel | 0:9a9311d745c3 | 23 | { |
Nydrel | 0:9a9311d745c3 | 24 | _pin=0;//timer interrupt routine to auto turn off solenoid |
Nydrel | 0:9a9311d745c3 | 25 | } |
Nydrel | 0:9a9311d745c3 | 26 | void Solenoid::write(bool value) |
Nydrel | 0:9a9311d745c3 | 27 | { |
Nydrel | 0:9a9311d745c3 | 28 | _pin = value; |
Nydrel | 0:9a9311d745c3 | 29 | if (value!=0) //do auto off with timer interrupt |
Nydrel | 0:9a9311d745c3 | 30 | tint.attach(this,&Solenoid::Solenoid_Off_Int,ontime);//setup a timer interrupt |
Nydrel | 0:9a9311d745c3 | 31 | } |
Nydrel | 0:9a9311d745c3 | 32 | Solenoid& Solenoid::operator= (bool value) |
Nydrel | 0:9a9311d745c3 | 33 | { |
Nydrel | 0:9a9311d745c3 | 34 | write(value); |
Nydrel | 0:9a9311d745c3 | 35 | return *this; |
Nydrel | 0:9a9311d745c3 | 36 | } |
Nydrel | 0:9a9311d745c3 | 37 | |
Nydrel | 0:9a9311d745c3 | 38 | Solenoid mySolenoid(p21); |
Nydrel | 0:9a9311d745c3 | 39 | int main() |
Nydrel | 0:9a9311d745c3 | 40 | { |
Nydrel | 0:9a9311d745c3 | 41 | while(1) { |
Nydrel | 0:9a9311d745c3 | 42 | mySolenoid = 1; //ON with timer auto off |
Nydrel | 0:9a9311d745c3 | 43 | myled = 1; |
Nydrel | 0:9a9311d745c3 | 44 | wait(.5); //just for LEDs - solenoid turns off with timer interrupt |
Nydrel | 0:9a9311d745c3 | 45 | myled = 0; |
Nydrel | 0:9a9311d745c3 | 46 | wait(2.0); |
Nydrel | 0:9a9311d745c3 | 47 | } |
Nydrel | 0:9a9311d745c3 | 48 | } |