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

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

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

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

Q&A

解決済

1回答

1114閲覧

Arduinoでのシリアル通信を使用して複数のサーボモーターを制御したい

HDKIAEI

総合スコア13

C++

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

0グッド

0クリップ

投稿2018/10/02 06:19

Arduinoを使用して複数のサーボモーターの制御がしたいです。

0~180度迄動作するサーボモーターで1台で角度のみの動作は正常動作する事を確認しています。

Arduinoを使用してサーボモーターを2つを
シリアル通信でP(パン)とT(チルト)を角度指定で制御したいです。
P100ならばパン用サーボ100度
T90ならばチルト用サーボ90度
になるように動作させたいです。

下記のソースコードでエラーはでないのですが、思ったように動作しません。
シリアル通信で受け取った文字列の最初の文字とそれ以外を分割し、
最初の文字で動かすサーボを選択
それ以降の文字で角度を指定したいと考えています。

参考になるサイトや情報など教えていただけると嬉しいです。

### 該当のソースコード #include <Servo.h> // サーボのピン番号 const int SERVO_PIN_P = 9; const int SERVO_PIN_T = 10; // サーボのインスタンス Servo servop; Servo servot; // INITがtrueの時は、モーターの位置を0にするだけ //const bool INIT = true; const bool INIT = false; void setup() { // put your setup code here, to run once: servop.attach(SERVO_PIN_P); servop.write(90); servot.attach(SERVO_PIN_T); servot.write(90); Serial.begin( 9600 ); } void loop() { // put your main code here, to run repeatedly: if (INIT) return; char servo_no; int deg1; int deg2; if ( Serial.available() > 0 ) { servo_no = '0'; char c[ 10 ] = "0"; char deg[ 5 ] = "0"; int work; for ( int i = 0; i < 5; i++ ) { c[ i ] = Serial.read(); if ( c[ i ] == '\0' ){ break; } } for ( int i = 0; i < 6; i++ ) { if (i >=1 ){ deg[i-1]=c[i]; } if (i == 0){ if ( c[ 0 ] == 'p'){ servo_no = ('1'); }else if ( c [ 0 ] == 't' ){ servo_no = ('2'); }else{ } } } //Serial.println(c); Serial.print("servo_no: "); Serial.println(servo_no); work = atoi( deg ); Serial.println(deg); Serial.println(work); if(servo_no == '1'){ if ( work >= 0 && work <= 180 ){ servop.write(work); delay(10000); } } else if (servo_no == '2'){ if ( work >= 0 && work <= 180 ){ servot.write(work); delay(10000); } } else { } } }

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

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

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

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

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

guest

回答1

0

ベストアンサー

とりあえず、一つのメッセージの受信が終わった時点の受信データを表示するようにしましょう。

メッセージの区切りを'\0'を受信したとき、としてるようですが、送信側はどうなってますか?
なんかダメダメな匂いがプンプンしますが。

投稿2018/10/02 07:36

y_waiwai

総合スコア87719

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

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

HDKIAEI

2018/10/07 05:06

ありがとうございます。送信側の確認をしてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問