Segment/FiniteLoop
Segment
Modulation, Gain, FociSTM, GainSTMのデータ領域にはそれぞれ, Segmentが2つ用意されている.
特に指定しない限りは, Segment::S0が使用される.
データを書き込むSegmentを変更する場合は, WithSegmentを送信する.
use autd3::prelude::*;
fn main() {
let _ =
WithSegment {
inner: Static::default(),
segment: Segment::S1,
transition_mode: transition_mode::Immediate,
};
}
#include<autd3.hpp>
int main() {
using namespace autd3;
WithSegment(Static{}, Segment::S1, transition_mode::Immediate());
return 0; }
using AUTD3Sharp;
using AUTD3Sharp.TransitionMode;
using AUTD3Sharp.Modulation;
new WithSegment(
inner: new Static(),
segment: Segment.S1,
transitionMode: new Immediate()
);
from pyautd3 import Segment, Static, transition_mode, WithSegment
WithSegment(
inner=Static(),
segment=Segment.S1,
transition_mode=transition_mode.Immediate(),
)
transition_modeには, Segmentの切り替え条件を指定する.
-
遷移先セグメントが無限ループ時にのみ使用可能
Immediate: 直ちに切り替えるExt: 直ちに切り替え, 拡張モードにする (各Segmentのデータを出力後, 自動でSegmentを切り替えるモード)
-
遷移先セグメントが有限ループ時にのみ使用可能
SyncIdx: 遷移先のSegmentのデータインデックスがになったときに切り替えるSysTime(DcSysTime): 指定した時刻になったときに切り替えるGPIO(GPIOIn): 指定したGPIOピンに信号が入力されたときに切り替える
NOTE:
GainはImmediateのみサポートしている.
遷移先のループの挙動を指定する場合は,
FiniteLoopを参照されたい.
データの書き込みのみを行い, Segmentを切り替えたくない場合はtransition_modeにLaterを指定する.
Segmentの切り替え
Segmentを切り替えたいだけの場合は, SwapSegmentを送信する.
use autd3::prelude::*;
fn main() {
SwapSegmentModulation(Segment::S1, transition_mode::Immediate);
}
#include<autd3.hpp>
#include<autd3/link/nop.hpp>
int main() {
using namespace autd3;
SwapSegmentModulation(Segment::S1, transition_mode::Immediate());
return 0; }
using AUTD3Sharp;
using AUTD3Sharp.TransitionMode;
new SwapSegmentModulation(Segment.S1, new Immediate());
from pyautd3 import Segment, SwapSegmentModulation, transition_mode
SwapSegmentModulation(Segment.S1, transition_mode.Immediate())
FiniteLoop
ModulationとFociSTM, GainSTMはWithFiniteLoopを送信することでループの挙動を制御できる.
ループ終了時は最終インデックスのデータが出力され続ける.
ループ挙動の指定は, セグメントを切り替えたときにのみ有効であることに注意.
use std::num::NonZeroU16;
use autd3::prelude::*;
fn main() {
let _ =
WithFiniteLoop {
inner: Static::default(),
loop_count: NonZeroU16::new(1).unwrap(),
segment: Segment::S1,
transition_mode: transition_mode::SyncIdx,
};
}
#include<autd3.hpp>
int main() {
using namespace autd3;
WithFiniteLoop(Static{}, 1, Segment::S1, transition_mode::SyncIdx());
return 0; }
using AUTD3Sharp;
using AUTD3Sharp.TransitionMode;
using AUTD3Sharp.Modulation;
new WithFiniteLoop(
inner: new Static(),
loopCount: 1,
segment: Segment.S1,
transitionMode: new SyncIdx()
);
from pyautd3 import Segment, Static, transition_mode, WithFiniteLoop
WithFiniteLoop(
inner=Static(),
loop_count=1,
segment=Segment.S1,
transition_mode=transition_mode.SyncIdx(),
)