/// <summary> /// draw cicle with dots /// </summary> /// <param name="laser"></param> /// <param name="rtc"></param> /// <param name="radius"></param> /// <param name="durationMsec"></param> private static bool DrawCircleWithDots(ILaser laser, IRtc rtc, float radius, float durationMsec) { if (rtc.CtlGetStatus(RtcStatus.Busy)) { return(false); } Console.WriteLine("WARNING !!! LASER IS BUSY ... DrawCircleWithDots"); timer = Stopwatch.StartNew(); bool success = true; success &= rtc.ListBegin(laser); for (float angle = 0; angle < 360; angle += 1) { double x = radius * Math.Sin(angle * Math.PI / 180.0); double y = radius * Math.Cos(angle * Math.PI / 180.0); success &= rtc.ListJump(new Vector2((float)x, (float)y)); //laser signal on during specific time (지정된 짧은 시간동안 레이저 출사) success &= rtc.ListLaserOn(durationMsec); if (!success) { break; } } success &= rtc.ListEnd(); if (success) { success &= rtc.ListExecute(true); } Console.WriteLine($"Processing time = {timer.ElapsedMilliseconds / 1000.0:F3}s"); return(success); }
/// <summary> /// 원(호)를 따라 매 1도마다 점 찍기 /// </summary> /// <param name="rtc"></param> /// <param name="radius"></param> /// <param name="durationMsec"></param> private static void DrawCircleWithDots(ILaser laser, IRtc rtc, double radius, double durationMsec) { rtc.ListBegin(laser); for (double angle = 0; angle < 360; angle += 1) { double x = radius * Math.Sin(angle * Math.PI / 180.0); double y = radius * Math.Cos(angle * Math.PI / 180.0); rtc.ListJump(new Vector2((float)x, (float)y)); rtc.ListLaserOn(durationMsec); } rtc.ListEnd(); }
private static bool DrawCircle(ILaser laser, IRtc rtc) { bool success = true; var rtcExt = rtc as IRtcExtension; //리스트 시작 success &= rtc.ListBegin(laser); //아나로그1 에 5V 출력 success &= rtc.ListWriteData <float>(ExtensionChannel.ExtAO2, 0.5f); //1 초 동안 대기 success &= rtc.ListWait(1000); //아나로그1 에 0V 출력 success &= rtc.ListWriteData <float>(ExtensionChannel.ExtAO2, 0); //점프 success &= rtc.ListJump(new Vector2(10, 0)); //레이저 출력 15핀에 있는 출력 2접점중 첫번째 비트 켜기 success &= rtc.ListWriteData <int>(ExtensionChannel.ExtDO2, 0x01); //레이저 출력 시작 success &= rtc.ListLaserOn(); //0.5 초 동안 대기 success &= rtc.ListWait(500); //레이저 출력 중지 success &= rtc.ListLaserOff(); //레이저 출력 15핀에 있는 출력 2접점중 첫번째 비트 끄기 success &= rtc.ListWriteData <int>(ExtensionChannel.ExtDO2, 0x00); //점프 success &= rtc.ListJump(new Vector2(-10, 0)); //매 100us 마다 X 방향으로 0.1 mm 이동하면서 아나로그 1번 출력으로 픽셀 출력(Raster Operation)을 준비 (100개) success &= rtcExt.ListPixelLine(100, new Vector2(0.1F, 0), 100, ExtensionChannel.ExtAO2); for (int i = 0; i < 100; i++) { success &= rtcExt.ListPixel(10, 0.5f); //10us 펄스 생성및 아나로그2 에 5V 출력 } if (success) { //리스트 종료 success &= rtc.ListEnd(); //나머지 데이타 가공 완료 대기 success &= rtc.ListExecute(true); } return(success); }