static void Scan(AUTD3Cnt autd, byte duty, PicoCnt pico, RobotController robo, Conditions cond, int devNumX, int devNumY, float z, bool compress = false) { var totalNum = devNumX * devNumY * 249; var dataFolder = Utils.CreateFolderTimeStamped("individual"); Console.WriteLine($"Total Scan Points: {totalNum}"); Console.WriteLine($"Saved to {dataFolder}"); Console.WriteLine("Connect Ch. A to microphone. conditions are ..."); cond.Check(); cond.Save(dataFolder); Console.WriteLine("Start Scanning..."); var transX = Enumerable.Range(0, 18); var transY = Enumerable.Range(0, 14); var devX = Enumerable.Range(0, devNumX).Select(x => x * 192f); var devY = Enumerable.Range(0, devNumY).Select(y => y * 151.4f); int devIdx = 0; int idx = 0; foreach (var(dx, dy) in Utils.Product(devX, devY)) { var df = Path.Join(dataFolder, $"dev{devIdx}"); Directory.CreateDirectory(df); foreach (var(tx, ty) in Utils.Product(transX, transY)) { if (IsMissing(tx, ty)) { continue; } autd.TransTest(idx, duty, 0); Thread.Sleep(500); var tf = Path.Join(df, $"tr{idx % 249}"); Directory.CreateDirectory(tf); float x = dx + tx * 10.16f; float y = dy + ty * 10.16f; Console.Write("\r{0, 3:d0}/{1, 3:d0} ({2, 3:f0}%)", idx, totalNum, 100.0 * idx / totalNum); robo.MoveTo(x, y, z); Thread.Sleep(500); pico.MeasureAndSave(true, Path.Join(tf, $"x{(tx * 10.16f):F3}y{(ty * 10.16f):F3}z{z:F3}"), compress); autd.TransTest(idx, 0, 0); idx++; } devIdx++; } Console.WriteLine(); }
static void Scan(AUTD3Cnt autd, PicoCnt pico, Conditions cond, string prefix, bool trig, Action <AUTD3Cnt, int> func, bool compress = false) { var dataFolder = Utils.CreateFolderTimeStamped(prefix); cond.Save(dataFolder); for (int i = 0; i <= byte.MaxValue; i++) { Console.Write("{0}: {1, 3:d0}/{2, 3:d0} ({3, 3:f0}%)", prefix, i, byte.MaxValue, 100.0 * i / byte.MaxValue); Console.SetCursorPosition(0, Console.CursorTop); func(autd, i); Thread.Sleep(500); pico.MeasureAndSave(trig, Path.Join(dataFolder, $"{prefix}{i}"), compress); autd.TransTest(0, 0, 0); Thread.Sleep(60 * 1000); } Console.WriteLine(); autd.Stop(); }
static void Scan(AUTD3Cnt autd, PicoCnt pico, (float, float, float) focus, IEnumerable <int> dutyies, string dataFolder, bool compress = false)
static void Main(string[] args) { int NUM_AUTD_X = 3; int NUM_AUTD_Y = 3; float W = 192f; float H = 151.4f; float xc = W * NUM_AUTD_X / 2f; float yc = H * NUM_AUTD_Y / 2f; float Z = 200; var compress = true; var cond = new Conditions() { SampleRateHz = 10_000_000, SampleLen = 10_000, Temp = 22.8f, Humidity = 13f, Amplifer = 10, X = 0, Y = 0, Z = Z }; using var robo = new RobotController(); if (!robo.Connect("172.16.99.57")) { Console.WriteLine("Failed to connect to robot."); return; } robo.MoveTo(0, 0, Z); using var pico = new PicoCnt(); pico.SetChannel(0, 50, 1, null); pico.SetChannel(1, 5000, 10, 1000); pico.SetCondition(cond); using var autd = new AUTD3Cnt(); for (int y = 0; y < NUM_AUTD_Y; y++) { for (int x = 0; x < NUM_AUTD_X; x++) { autd.AddDevice(x * W, y * H, 0); } } var ifname = AUTD3Cnt.GetIfname(); autd.Open(ifname); autd.Clear(); autd.Calibrate(); autd.StaticMod(0xFF); Scan(autd, 10, pico, robo, cond, NUM_AUTD_X, NUM_AUTD_Y, Z, compress); Console.WriteLine("Finish."); autd.Stop(); robo.Finish(); } }
static void Main(string[] args) { using var robo = new RobotController(); if (!robo.Connect("172.16.99.57")) { Console.WriteLine("Failed to connect to robot."); return; } robo.MoveTo(0, 0, 200); using var pico = new PicoCnt(); using var autd = new AUTD3Cnt(); autd.AddDevice(0, 0, 0); var ifname = AUTD3Cnt.GetIfname(); autd.Open(ifname); autd.Clear(); autd.Calibrate(); autd.StaticMod(0xFF); var compress = false; var cond = new Conditions() { SampleRateHz = 2_000_000, SampleLen = 2_000, Temp = 23.0f, Humidity = 19f, Amplifer = 10, X = 0, Y = 0, Z = 200 }; pico.SetChannel(0, 500, 1, null); pico.SetCondition(cond); Console.WriteLine("Connect Ch. A to microphone. conditions are ..."); cond.Check(); Scan(autd, pico, cond, "amp", false, (autd, i) => autd.TransTest(0, (byte)i, 0), compress); cond.SampleRateHz = 10_000_000; cond.SampleLen = 20000; pico.SetChannel(0, 50000, 10, null); pico.SetCondition(cond); Console.WriteLine("Connect Ch. A to microphone. conditions are ..."); cond.Check(); Scan(autd, pico, cond, "input", false, (autd, i) => autd.TransTest(0, (byte)i, 0), compress); pico.SetChannel(0, 500, 1, null); pico.SetChannel(1, 5000, 10, 1000); pico.SetCondition(cond); Console.WriteLine("Connect Ch. A to microphone and Ch. B to 40kHz reference signal. conditions are ..."); cond.Check(); Scan(autd, pico, cond, "phase", true, (autd, i) => autd.TransTest(0, 0xFF, (byte)i), compress); Console.WriteLine("Finish."); robo.Finish(); } }