私はステッパーを50で割り込みタイマーの間に踏み込んでいて、シリアルコマンドを2文字以上読み込もうとするまで、すべてのコードが割り込みの間で働いています。Arduinoの割り込み間でシリアルを読み取るにはどうすればよいですか?
私の文字列には4〜5文字ごとに文字が欠けています。私は一日中研究を試みて解決策を見つけたが、何も出てこなかった。割り込みを使用しない場合、ステッパーは2秒間停止し、1文字のシリアル入力を文字列として読み込みます。
私の目標は、リモコンアプリにスピードコマンドを送信させることです。私はこの問題を解決する助けが必要です。 Accelstepperライブラリを使用して
https://sourceforge.net/p/open-slider/code/ci/master/tree/OpenSliderFirmware/
String incomingString = "";
if (Serial.available() > 0) {
incomingString = Serial.readString();
Serial.println(incomingString);
}
割り込み:
//Interrupt Timer1
void ISR_stepperManager() {
Slide.runSpeed();
Xaxis.runSpeed();
Yaxis.runSpeed();
}
ソフトウェア(bit-banged?)シリアルポートを使用していますか?シリアルデータレートとステッパー割り込みのレートはどのくらいですか? – barny
割り込みは50msです。ボーレートはシリアル0 USBで115200です。最終的に私はソフトウェアシリアルを2番ピンと3番ピンで実行していますが、私はブルートゥースを信じています(もし私がそれを理解できれば) マーリンファームウェアがステッピングとシリアルを確実に達成する方法を説明できる人物を探しています。マーリンは一度に1つの文字を読みますが、他のものをブロックしないように私は元に戻すつもりです。私は彼らがステッパーを運転するために割り込みを使用したと思ったが、私はもはやそれについてはわからない。私は2560とRAMPSを使用しています。私はまだ高度なものについては少し初心者です。 – naps1saps
シリアルボーレートを減らすことをお勧めします:115200ボーはバイトあたり約80マイクロ秒です。したがって、ステッパー割り込みサービスルーチンが80usを超えると、直ちにシリアルチャンクが失われる危険性があります。 9600ボー(またはそれより遅い)を試してみてください。それは1バイトあたり約1ミリ秒です。ISRがどれくらい時間がかかり、有効範囲があるかわからない場合は、ISRの出力をISRの開始点の1に、最後を0にして、パルスの幅とその量を調べますそれは変化する。ビットバンギングの場合は、間違いなくシリアルデータレートを遅くする必要があります。 – barny