Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
9 years, 11 months ago.
サーボモータの制御問題,よかったら教えていただきたい.もう一週間ぐらい全然進んでない><
二つのサーボを動かせたいですけど. 数値の差により,モータ1とモータ2を回転させたい. http://developer.mbed.org/users/changzhe8387/code/temp/ 詳細はこのプログラムの101行から問題が発生した 数値の差をパルス幅に変換し,そのパルス幅をサーボに代入.コード98と99行目のaとbの値はパルス幅に変換した,pwm1とpwm2(サーボ)に代入した.しかし実際にやってみたら,pwm1しか動かない. これは何故だろうか?教えてください.
1 Answer
9 years, 11 months ago.
こんにちは。
Quote:
しかし実際にやってみたら,pwm1しか動かない. これは何故だろうか?教えてください.
動かないとの事ですが、もう少し現象を詳しく教えて頂けないでしょうか? どのような波形が出ることを期待されていて、実際の出力がどうなっているかなど。 printf() で変数の値を出力されているようなので、動かない場合のログを頂けると何か分かるかも知れません。
少し気になったのですが、for ループで実行されるコードは意図されたものでしょうか? for ループのブロックの外側にある wait_ms() 関数の呼び出しは、for ループ内で実行されません。
while(1){ sampleTemp(); float k=getAvgTemp1()-getAvgTemp2(); float i=getAvgTemp3()-getAvgTemp4(); pc.printf("Temp1:%f\nTemp2:%f\n",getAvgTemp1(),getAvgTemp2()); pc.printf("Temp3:%f\nTemp4:%f\n",getAvgTemp3(),getAvgTemp4()); a = k * 2; b = i * 2; { for(int p = start; p < end; p += a) pwm1.pulsewidth_us(p); wait_ms(10); } { for(int q = start; q < end; q += b) pwm2.pulsewidth_us(q); wait_ms(10); } }
オンラインIDEで、コードを整形すると分かりやすいと思います(HELP アイコンの隣の Format Code)。
for ループ内から wait_ms() 関数呼び出しを行うのであれば、以下のようになると思います。
while(1){ sampleTemp(); float k=getAvgTemp1()-getAvgTemp2(); float i=getAvgTemp3()-getAvgTemp4(); pc.printf("Temp1:%f\nTemp2:%f\n",getAvgTemp1(),getAvgTemp2()); pc.printf("Temp3:%f\nTemp4:%f\n",getAvgTemp3(),getAvgTemp4()); a = k * 2; b = i * 2; for(int p = start; p < end; p += a) { pwm1.pulsewidth_us(p); wait_ms(10); } for(int q = start; q < end; q += b) { pwm2.pulsewidth_us(q); wait_ms(10); } }