/***************************************************************************** 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 #include pigBeeper::pigBeeper( bcm_t bcmNo ) : pigNodeOut( bcmNo , pull_off ) { } pigBeeper::~pigBeeper() { } void pigBeeper::play_tone( double freq, double duration ) { double halveWaveTime = 1 / ( freq * 2 ); int ms = (int)( 1000 * halveWaveTime ); double waves = duration * freq; int wv = (int) waves; //std::cout << "sleep: " << halveWaveTime << " in micros: " << ms << " waves: " << waves << std::endl; std::thread thrd( [=]() { for( int i=0; i < wv; ++i ) { _pinOut.set_level( high ); delay_millis( ms ); _pinOut.set_level( low ); delay_millis( ms ); } } ); thrd.detach(); } void pigBeeper::play_tune( std::vector frv, std::vector drv ) { size_t count = std::max( frv.size(), drv.size() ); for( size_t i=0; i