141 lines
2.1 KiB
C++
141 lines
2.1 KiB
C++
/*****************************************************************************
|
|
|
|
source::worx libPiGPio
|
|
Copyright © 2022 c.holzheuer
|
|
chris@sourceworx.org
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
Uses:
|
|
|
|
pigpiod_if2 by joan2937, pigpio @ abyz.me.uk
|
|
https://abyz.me.uk/rpi/pigpio
|
|
|
|
sigslot by 2017 Pierre-Antoine Lacaze
|
|
https://github.com/palacaze/sigslot
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
#include <iostream>
|
|
#include <chrono>
|
|
#include <thread>
|
|
|
|
#include <pigtimer.h>
|
|
|
|
|
|
pigTimer::pigTimer()
|
|
{
|
|
|
|
}
|
|
|
|
pigTimer::pigTimer( int timeOn, int timeOff, int repcnt )
|
|
: _timeOn{ timeOn }, _timeOff{ timeOff }, _repcnt{ repcnt }
|
|
{
|
|
if( !_timeOff )
|
|
_timeOff = _timeOn;
|
|
}
|
|
|
|
|
|
pigTimer::~pigTimer()
|
|
{
|
|
|
|
}
|
|
|
|
void pigTimer::change_state( bool newState )
|
|
{
|
|
set_state( newState );
|
|
}
|
|
|
|
int pigTimer::timeOn()
|
|
{
|
|
return _timeOn;
|
|
}
|
|
|
|
|
|
void pigTimer::setTimeOn( int timeOn )
|
|
{
|
|
_timeOn = timeOn;
|
|
// reset??
|
|
}
|
|
|
|
|
|
int pigTimer::timeOff()
|
|
{
|
|
return _timeOff;
|
|
}
|
|
|
|
|
|
void pigTimer::setTimeOff( int timeOff )
|
|
{
|
|
_timeOff = timeOff;
|
|
}
|
|
|
|
|
|
int pigTimer::repetitions()
|
|
{
|
|
return _repcnt;
|
|
}
|
|
|
|
|
|
void pigTimer::setRepetitions( int repcnt )
|
|
{
|
|
_repcnt = repcnt;
|
|
}
|
|
|
|
|
|
void pigTimer::start()
|
|
{
|
|
_active = true;
|
|
// ewig
|
|
if( _repcnt < 1 )
|
|
{
|
|
while( _active )
|
|
sleepCycle();
|
|
return;
|
|
}
|
|
|
|
// abgezählt
|
|
for( int i=0; i<_repcnt; ++i )
|
|
sleepCycle();
|
|
|
|
}
|
|
|
|
|
|
void pigTimer::stop()
|
|
{
|
|
_active = false;
|
|
}
|
|
|
|
|
|
void pigTimer::sleepCycle()
|
|
{
|
|
|
|
sleepThread( _timeOff );
|
|
|
|
if( !_active )
|
|
return;
|
|
|
|
sleepThread( _timeOn );
|
|
|
|
|
|
}
|
|
void pigTimer::sleepThread( int delay )
|
|
{
|
|
std::thread thrd(
|
|
[=]()
|
|
{
|
|
if( !_active )
|
|
return;
|
|
|
|
std::this_thread::sleep_for( std::chrono::milliseconds( delay ) );
|
|
|
|
toggle_state();
|
|
|
|
} );
|
|
thrd.detach();
|
|
}
|