C#のフォームアプリケーションとArduinoでシリアル通信を行っています。
1.フォームアプリケーションから情報を送信する
2.サーボモータを動かす
3.動かした後の角度の情報をフォームアプリケーションで表示する
上記のことを行いたいのですが、
フォームアプリケーションで表示する情報が途切れています。
(想定:1500、実際:15、など)
フォームアプリケーションで情報を受け取った際には既に途切れているので、
スケッチに問題があると考えているのですが特定できません。
どなたかご指導をお願いいたします。
Form1.cs
1namespace KakudoCheck 2{ 3 public partial class Form1 : Form 4 { 5 private string data; 6 7 public Form1() 8 { 9 InitializeComponent(); 10 } 11 12 private void Form1_Load(object sender, EventArgs e) 13 { 14 serialPort1.Open(); 15 } 16 17 private void button1_Click(object sender, EventArgs e) 18 { 19 serialPort1.Write("A"); 20 // ボタンを押した直後、利用不能にしておく 21 button1.Enabled = false; 22 } 23 24 private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) 25 { 26 try 27 { 28 // ポートから文字列を受信する 29 data = serialPort1.ReadExisting(); 30 31 if (!string.IsNullOrEmpty(data)) 32 { 33 // 受信用スレッドから切り替えてデータを書き込む 34 Invoke((MethodInvoker)(() => 35 { 36 Thread.Sleep(1000); 37 38 label1.Text = "servo1の角度:" + data; 39 40 41 })); 42 } 43 } 44 catch (Exception ex) 45 { 46 MessageBox.Show(ex.Message); 47 } 48 } 49 } 50}
kakudo.ino
1#include <VarSpeedServo.h> 2 3VarSpeedServo servo1; 4 5void setup() { 6 servo1.attach(8); 7 Serial.begin(9600); 8} 9 10void loop() { 11 if(Serial.available() > 0){ 12 int inByte = Serial.read(); // データを読み込む 13 14 // Aの場合 15 if(inByte==65){ 16 int angle = servo1.readMicroseconds(); 17 angle = angle - 1; 18 servo1.writeMicroseconds(angle); 19 servo1.wait(); 20 Serial.print(servo1.readMicroseconds()); 21 Serial.flush(); 22 } 23 } 24}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/27 14:32
2018/09/29 09:06