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

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

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

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

0回答

1184閲覧

arduinoの変数の値をMATLABからシリアル通信で受け取って実行したい 

SASKE

総合スコア10

MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2022/12/09 22:54

編集2022/12/10 02:03

現在..
arduino UNOとMATLAB(2021b)を使ってサーボモーターを制御しています。

背景
より正確にサーボモータを制御するためにarduinoにあるライブラリ(varspeedservo.h)を使う必要があることがわかっています。
(MATLABだけでarduinoを制御することも可能ですがサーボの精度が落ちます..)

実現したいこと
arduino IDEのソースコードの変数[servoAngle]をMATLABから値を送って実行したいです。(まずは一つの変数で)

arduino IDEの通信用コードーーーーーーーーーーーーーーーーーーーー

arduino

1#include <VarSpeedServo.h> // ライブラリのインクルード 2VarSpeedServo myservo; // サーボオブジェクトの作成 3 4 5// グローバル変数の宣言 6char input[4]; // 文字列格納用 7int i = 0; // 文字数のカウンタ 8int val = 0; // 受信した数値 9int deg = 100; // サーボの角度 10 11// 初期設定 12void setup() { 13 Serial.begin(9600); // シリアルポートを9600 bps[ビット/秒]で初期化 14 myservo.attach(9); // 制御信号を送る出力ピンの設定 15} 16 17// シリアル通信で受信したデータを数値に変換 18int serialNumVal(){ 19 // データ受信した場合の処理 20 if (Serial.available()) { 21 input[i] = Serial.read(); 22// 文字数が3以上 or 末尾文字がある場合の処理 23 if (i > 2 || input[i] == '\0') { 24 val = atoi(input); // 文字列を数値に変換 25 Serial.write(input); // 文字列を送信 26 Serial.write("\n"); 27 i = 0; // カウンタの初期化 28 } 29 else { i++; } 30 } 31 return val; 32} 33 34// メインループ 35void loop() { 36 deg = serialNumVal(); 37 myservo.write(deg, 30, true); // deg度まで速度30で回転 38 //myservo.write(180, 255, true); // 180°まで速度255で動かし完了をまつ 39} 40

matlab

1serialportlist("available") 2arduinocom=serialport("COM9",9600); 3configureTerminator(arduinocom,"CR/LF"); 4 5a=1; 6while a==1 7 8 % 入力待機(回転させたい角度を入力) 9 deg = input("回転角度"); 10 % eが入力されたら終了 11 if deg == 0 12 arduinocom.close() 13 break; 14 end 15 16 % 回転角と終端文字を送信 17 arduinocom.write(deg,"uint8") 18 19end

エラーは出ていないのですがサーボが動いてくれません...どなたかアドバイスなど頂けると嬉しいです。

イメージ説明

参考URL
シリアル通信

Pythonで似た例

MATLABとarduino通信

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

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

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

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

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

y_waiwai

2022/12/09 23:26

で、しつもんはなんでしょうか
SASKE

2022/12/09 23:30

ありがとうございます! 大きく言うと arduino IDEのソースコードの変数[servoAngle],[servospeed]をMATLABから値を送って実行したい なんですが、そもそも可能かどうか知りたいです..
y_waiwai

2022/12/09 23:40

> arduinoの変数の値をMATLABからシリアル通信で受け取って実行したい ってことならば、できる、ということになろうかと思いますが、まずは実際にやってみたらどうでしょう。
SASKE

2022/12/09 23:43

ありがとうございます! 色々試してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問