web-dev-qa-db-ja.com

C#のArduino UNOの基本

こんにちは、USB接続でハードウェアを制御するのは初めてです。私はArduino UNOマイクロコントローラーを持っていて、始めるためのリソースを探していました。私はC#(Visual Studio 2010)でプログラミングしていて、接続のセットアップ/テストに使用できる基本がいくつかあるかどうか疑問に思っていました。 ArduinoのデジタルI/Oピンをハイとローの間で切り替える、WinFormのチェックボックスのような単純なものを探しています。始めるために多くを見つけることができませんでした。

前もって感謝します。

18
ikathegreat

ArduinoにはC#で使用できるいくつかのサンプルがあることはご存じでしょう。

これはC#ページです

7
Sandeep Bansal

PCからArduinoにコマンドを送信する方法はたくさんあります。 Sandeep Bansilは、シリアルポートの接続と読み取りの良い例です。

以下は、AMDからのWindowsのチェックボックスの状態に基づいてシリアルポートに書き込む方法の実際の例で、arduinoのPCからの要求を処理する方法です。

これは冗長な例であり、より明確な解決策がありますが、これはより明確です。

この例では、arduinoはPCからの「a」または「b」のいずれかを待ちます。チェックボックスがチェックされている場合、PCは「a」を送信し、チェックボックスがオフの場合は「b」を送信します。この例では、arduinoのデジタルピン4を想定しています。

Arduinoコード

_#define DIGI_PIN_SOMETHING 4
unit8_t commandIn;
void setup()
{
    //create a serial connection at 57500 baud
    Serial.begin(57600);
}

void loop()
{
    //if we have some incomming serial data then..
    if (Serial.available() > 0)
    {
        //read 1 byte from the data sent by the pc
        commandIn = serial.read();
        //test if the pc sent an 'a' or 'b'
        switch (commandIn)
        {
            case 'a':
            {
                //we got an 'a' from the pc so turn on the digital pin
                digitalWrite(DIGI_PIN_SOMETHING,HIGH);
                break;
            }
            case 'b':
            {
                //we got an 'b' from the pc so turn off the digital pin
                digitalWrite(DIGI_PIN_SOMETHING,LOW);
                break;
            }
        }
    }
}
_

Windows C#

このコードはフォームの.csファイルにあります。この例では、OnOpenForm、OnCloseForm、およびOnClickイベントのフォームイベントをチェックボックスに添付していることを前提としています。各イベントから、以下のそれぞれのメソッドを呼び出すことができます。

_using System;
using System.IO.Ports;

class fooForm and normal stuff
{
    SerialPort port;

    private myFormClose()
    {
        if (port != null)
        port.close();
    }

    private myFormOpen()
    {
        port = new SerialPort("COM4", 57600);
        try
        {
            //un-comment this line to cause the arduino to re-boot when the serial connects
            //port.DtrEnabled = true;

            port.Open();
        } 
        catch (Exception ex)
        {
            //alert the user that we could not connect to the serial port
        }
    }

    private void myCheckboxClicked()
    {
        if (myCheckbox.checked)
        {
            port.Write("a");
        } 
        else
        {  
            port.Write("b");    
        }
    }
}
_

ヒント:

Arduinoからメッセージを読みたい場合は、_50_または_100_ミリ秒の間隔でタイマーをフォームに追加します。

タイマーのOnTickイベントでは、次のコードを使用してデータを確認する必要があります。

_//this test is used to see if the arduino has sent any data
if ( port.BytesToRead > 0 )

//On the arduino you can send data like this 
Serial.println("Hellow World") 

//Then in C# you can use 
String myVar = port.ReadLine();
_

readLine()の結果は、myVarに_Hello World_が含まれることになります。

14
Visual Micro

Visual Studioを使用しているので、Arduino開発用のこのクールなVisual Studioプラグインに興味があるかもしれません。 http://www.visualmicro.com

5
sbonkosky

私はArduinosとのインターフェースをとるためにc#ライブラリに取り組んできました。そこには優れたコード例がたくさんあり、物事が意味をなすのに十分コメントされているはずです。

githubリポジトリ: https://github.com/qwertykeith/ArduinoLibrary

1
keef

PCとArduino間の通信の基本的な方法は、PCに2つのボタンを作成し、Arduinoのライトをオン/オフにすることです。 portwrite();を使用します

これが最も簡単なデモです: https://www.instructables.com/id/C-Serial-Communication-With-Arduino/ それが絶対にあなたが望むものです!

C#コード:

using System;
using System.Windows.Forms;
using System.IO.Ports;
namespace ledcontrol
{
    public partial class Form1 : Form
    {
        SerialPort port;
        public Form1()
        {
            InitializeComponent();
            this.FormClosed += new FormClosedEventHandler(Form1_FormClosed);
            if (port==null)
            {
                port = new SerialPort("COM7", 9600);//Set your board COM
                port.Open();
            }
        }
        void Form1_FormClosed(object sender,FormClosedEventArgs e)
        {
            if(port !=null &&port.IsOpen)
            {
                port.Close();
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            PortWrite("1");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            PortWrite("0");
        }
        private void PortWrite(string message)
        {
            port.Write(message);
        }
    }
}

Arduinoのスケッチ:

const int LedPin = 13;  
int ledState = 0;  

void setup()  
{   
  pinMode(LedPin, OUTPUT);  

  Serial.begin(9600);    
}  

void loop()  
{   
    char receiveVal;     

    if(Serial.available() > 0)  
    {          
        receiveVal = Serial.read();  

       if(receiveVal == '1')      
          ledState = 1;     
       else  
          ledState = 0;       
    }     

    digitalWrite(LedPin, ledState);   

    delay(50);      
}
0
haoming weng