diff options
Diffstat (limited to 'examples/sinewave/sinewave_example.cpp')
-rw-r--r-- | examples/sinewave/sinewave_example.cpp | 44 |
1 files changed, 40 insertions, 4 deletions
diff --git a/examples/sinewave/sinewave_example.cpp b/examples/sinewave/sinewave_example.cpp index e6583d6..7ab316d 100644 --- a/examples/sinewave/sinewave_example.cpp +++ b/examples/sinewave/sinewave_example.cpp @@ -1,19 +1,55 @@ #include <hwd.h> -#include <math.h> -#include <stdio.h> +#include <functional> #include <stdlib.h> #include <iostream> +#include <stdio.h> +#include <chrono> +#include <thread> +#include <math.h> -int main() { +using namespace std::chrono_literals; +using Clock = std::chrono::high_resolution_clock; + +int main(int argc, char* argv[]) { + + std::chrono::milliseconds interval{ 10ms }; + int samples = 300, i = 0; + bool end = false; + + std::function infinite = []() {}; + std::function limited = [&end, &i, &samples]() { + if (i > samples) end = true; + i++; + }; + + auto& gen = infinite; + + if (argc == 3) { + try { + interval = std::chrono::milliseconds(std::stoi(argv[1])); + samples = std::stoi(argv[2]); + gen = limited; + } + catch (const std::invalid_argument& ia) { + std::cerr << "Invalid argument: " << ia.what() << '\n'; + + return 0; + } + } hwd::sinewave::set_amplitude(11); hwd::sinewave::set_frequency(10); hwd::sinewave::set_phase(30); - for (int i = 1; i < 1200; i++) { + while (!end) { + const auto endTime = Clock::now() + interval; + std::cout << hwd::sinewave::get_point() << std::endl; + + std::this_thread::sleep_until(endTime); + gen(); } return 0; |