質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

mbed

mbed(エンベッド)は、Webサイト上でC++を使って開発を行う、ワンボードマイコンのプロトタイピングツールです。PCに開発環境をインストールする必要がなく、Webにアクセスできればどこにいても開発を行うことができます。

Q&A

解決済

1回答

7769閲覧

MbedによるPWM制御を用いたサーボモータの制御について。

Amey

総合スコア17

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

mbed

mbed(エンベッド)は、Webサイト上でC++を使って開発を行う、ワンボードマイコンのプロトタイピングツールです。PCに開発環境をインストールする必要がなく、Webにアクセスできればどこにいても開発を行うことができます。

2グッド

0クリップ

投稿2015/12/04 00:25

編集2015/12/04 00:35

アンドロイドから加速度を受け取り対象物を水平に制御するプログラムを
作成したのですが、思った以上にプログラムが短くなってしまったので、
何か改善するところがあれば教えていただきたいです。
このプログラムは右に45、左に45度まで補正するプログラムです。

  1. #include "mbed.h"
  2. #include <iostream>
  3. #include "TextLCD.h"
  4. TextLCD lcd(p24, p26, p27, p28, p29, p30);
  5. Serial pc(USBTX, USBRX);
  6. PwmOut pwm(p21);
  7. using namespace std;
  8. int main() {
  9. double x=0; //変換先
  10. int Angle; //角度
  11. int p,start=1500,min=1050,max=1950;
  12. p = start; //モータ初期位置
  13. pwm.pulsewidth_us(p);
  14. wait_ms(40);
  15. while(1) {
  16. cin >> x ; //加速度受け取り
  17. lcd.cls();
  18. if(x>=0)
  19. Angle = x/0.109 + 0.5; //相対角度算出
  20. else if(x<0){
  21. Angle = x/0.109 - 0.5;
  22. }
  23. lcd.printf("X=%6.2f",x); //LCDにうけっとた値
  24. lcd.locate(0,1); //相対角度表示
  25. lcd.printf("Angle=%d",Angle);
  26. if(Angle == 0){ //角度が0なら初期位置に
  27. p = start;
  28. pwm.pulsewidth_us(p);
  29. }else if(Angle >45){ //45度以上はmaxで固定
  30. p = max;
  31. pwm.pulsewidth_us(p);
  32. }else if(Angle <-45){ //-45度以下はminで固定
  33. p = min;
  34. pwm.pulsewidth_us(p);
  35. }else{ //それいがいは指定角度へ
  36. p=start-Angle*10;
  37. pwm.pulsewidth_us(p);
  38. }
  39. }
  40. }
izkn, John_syado👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

こんにちは。

何か改善するところがあれば教えていただきたいです。

アンケート的なものと理解しましたので、「改善した方がよいと私が感じるところ」を書いてみます。
質問の主旨が異なっていたらごめんなさい。

C++

1#include "mbed.h" 2#include <iostream>

個人的にはこの順序は好みません。
""で囲まれたヘッダ・ファイルは通常、自プロジェクト内のヘッダです。そして、<>で囲まれたヘッダ・ファイルは他から入手したライブラリ等に用いられます。つまり、<>側は修正できないけど""側は修正できるケースが一般的です。
もしも、シンポルや定義が被った場合、""側を後にしておけば修正するべきところがコンパイル・エラーになるので、デバッグが楽です。
あと、優先順位が高いものを先に#includeした方がスマートに感じます。

C++

1 if(x>=0) 2 Angle = x/0.109 + 0.5; //相対角度算出 3 else if(x<0){ 4 Angle = x/0.109 - 0.5; 5 }

このif文はメンテナンス性的にかなり好ましくないです。
if (x<0)はあっても悪さはしませんが、if(x>=0)側を修正した時、一緒に修正が必要になります。
修正を忘れるとAngleに値が設定されないタイミングが出てくる可能性もあり危険です。
普通に、if(x>=0) ... else ...の構文を用いた方が良いです。

最後に31~44のif文は、全ての条件分岐の最後で、pwm.pulsewidth_us(p);を呼び出してます。
また、この制御ループ的にその呼び出しは本質的なものと思います。
であれば、pwm.pulsewidth_us(p);はif文が終了した直後に1つ置いた方が良いと思います。

投稿2015/12/04 12:52

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Amey

2015/12/07 04:37

何も考えずソースコードを作っていた様なところがあり、簡潔に書くことができるとしれて良かったです。やはり、自分の確認だけでなく他の人にソースコードを見てもらうのは大事なことだと思いました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問