dotnet timer micro second
あたりでググるとまぁまぁ出てくるんだけど、もうかなり完成された何かを提供しているものと、質問サイトへの質問かなんかが引っかかって、いい感じに説明したものがない。とりあえず世界的な独占的超巨大企業ドキュメントを探るとSystem.Timers名前空間にTimerクラスってのがあるらしい(https://learn.microsoft.com/ja-jp/dotnet/api/system.timers.timer?view=net-8.0)ので、まずはこちらを参考にする。
で、読んでいくと、設定できるタイマーの単位はミリ秒なので、マイクロ秒が設定できるかはあやしい。いちおう、引数の型はDoubleなのでマイクロ秒を設定できないわけではないと思うが、どんなもんなのか。
では、こんなコードでどうでしょう。
- using System;
- using System.Timers;
- using System.Device.Gpio;
- using Iot.Device.Ft232H;
- using Iot.Device.FtCommon;
- public class study4{
- private static System.Timers.Timer? aTimer;
- private static Ft232HDevice? ft232h;
- private static GpioController? controller;
- private static int pin;
- private static int ledOn=0;
- private static PinValue[] pin_state={PinValue.High,PinValue.Low};
- public static void Main(){
- Console.WriteLine("Blinking LED. Press Ctrl+C to end.");
- ft232h = new Ft232HDevice(FtCommon.GetDevices()[0]);
- controller = ft232h.CreateGpioController();
- pin = Ft232HDevice.GetPinNumberFromString("D7");
- controller.OpenPin(pin, PinMode.Output);
- SetTimer(10);
- Console.WriteLine("\nPress the Enter key to exit the application...\n");
- Console.WriteLine("The application started at {0:HH:mm:ss.fff}", DateTime.Now);
- Console.ReadLine();
- aTimer.Stop();
- aTimer.Dispose();
- }
- private static void OnTimedEvent(Object source, ElapsedEventArgs e)
- {
- ledOn^=1;
- controller.Write(pin, pin_state[ledOn]);
- }
- private static void SetTimer(Double intvl)
- {
- // Create a timer with a two second interval.
- // Hook up the Elapsed event for the timer.
- aTimer=new System.Timers.Timer(intvl);
- aTimer.Elapsed += OnTimedEvent;
- aTimer.AutoReset = true;
- aTimer.Enabled = true;
- }
- }
で、やってみる。警告が出るorz。
ちょっとよくわからん。参考サイトとそう変わらんので、たぶん参考サイトのそのままでも同じ警告が出るはず。まぁ動いているようなので気にせず。結果、
、、、がっかりだよ。周期もDutyもおかしい。そして、中にはあきらかに狂ってるでしょ。いやー世の中そんなに甘くないよねー。それにしてもなんなんやろ。何かを間違えちゃったのか、それともそもそも10msなんて扱えないのか。もちっとやりたかったけど閃輝暗点来たので中断。
0 件のコメント:
コメントを投稿