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: GainImmediateのみサポートしている.

遷移先のループの挙動を指定する場合は, FiniteLoopを参照されたい.

データの書き込みのみを行い, Segmentを切り替えたくない場合はtransition_modeLaterを指定する.

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

ModulationFociSTM, GainSTMWithFiniteLoopを送信することでループの挙動を制御できる.

ループ挙動の指定は, セグメントを切り替えたときにのみ有効であることに注意.

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(),
)