Ik weet dat de schakeltijd met de arduino in te stellen is maar ik bouw graag een extra zekerheid in.
#include "CoilDrive.h"CoilDrive::CoilDrive(){}void CoilDrive::begin( uint8_t _pinA, uint8_t _pinB, uint32_t _switchTime ){ pinA = _pinA ; pinB = _pinB ; switchTime = _switchTime ; pinMode( pinA, OUTPUT ) ; pinMode( pinB, OUTPUT ) ; digitalWrite( pinA, LOW ) ; digitalWrite( pinB, LOW ) ;}void CoilDrive::setState( uint8 _state ){ prevTime = millis() ; set = true ; if( _state ) digitalWrite( pinA, HIGH ) ; else digitalWrite( pinB, HIGH ) ;}void CoilDrive::update(){ if( set == true && (millis() - prevTime) >= switchTime ) { set = false ; digitalWrite( pinA, LOW ) ; digitalWrite( pinB, LOW ) ; }}
#include <Arduino.h>class CoilDrive {public: CoilDrive() ; void setState( uint8_t ); void update() ; void begin(uint8_t, uint8_t, uint32_t) ;private: uint32 switchTime ; uint32 prevTime ; uint8 pinA ; uint8 pinB ; bool set ;} ;
#include "CoilDrive.h"const int nWissels = 4 ;CoilDrive wissel[ nWissels ] ; // maak array van 4 dubbel spoelige wisselsvoid setup(){ wissel[0].begin( 1, 2, 50 ) ; // pin1, pin2, schakeltijd in milliseconde wissel[1].begin( 3, 4, 50 ) ; wissel[2].begin( 5, 6, 50 ) ; wissel[3].begin( 7, 8, 50 ) ;}void loop(){ for( int i = 0 ; i < nWissels ; i ++ ) { wissel[i].update() ; // zet beide pinnen uit als de schakeltijd is verstreken, continu aanroepen } if( event1_0 ) { wissel[0].setState( 0 ) ; } // event moet je zelf invullen en koppelen aan je knopjes else if( event1_1 ) { wissel[0].setState( 1 ) ; } // 1x aanroepen, niet oneindig vaak. if( event2_0 ) { wissel[1].setState( 0 ) ; } else if( event2_1 ) { wissel[1].setState( 1 ) ; } if( event3_0 ) { wissel[2].setState( 0 ) ; } else if( event3_1 ) { wissel[2].setState( 1 ) ; } if( event4_0 ) { wissel[3].setState( 0 ) ; } else if( event4_1 ) { wissel[3].setState( 1 ) ; }}