3

少し混乱しています。Arduinoに接続したLEDをON/OFFするVBコードを書いてみました。(シリアル モニタの代わりに) COM ポート経由で VB アプリからデータを送信していますが、データは LED オンの場合は '1'、オフの場合は '0' です。ここでは、RF-433 モジュールを介してこの信号を送信します。ArduinoのTXピンをRFモジュールのデータピンに接続しました。一方、2 番目の Arduino は、ピン 12 の LED を使用して RF レシーバーに接続されています。TX 側の Arduino が RF 経由でデータを送信するためのコードを記述する方法がわかりません。つまり、シリアル モニターを使用してデータを送信すると、キーボードを使用してシリアル モニター経由でデータSerial.available()Serial.read()送信できますが、ここでは VB アプリからそのデータを送信しています。では、Arduino の TX ピンに接続された RF TX をアクティブにする Arduino のコードは何ですか?

これが私のVBコードです:

Imports System.IO
Imports System.IO.Ports
Imports System.Threading

Public Class Form1

    Shared _continue As Boolean
    Shared _serialPort As SerialPort

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        SerialPort1.Close()
        SerialPort1.PortName = "com12" 'change com port to match your Arduino port
        SerialPort1.BaudRate = 9600
        SerialPort1.DataBits = 8
        SerialPort1.Parity = Parity.None
        SerialPort1.StopBits = StopBits.One
        SerialPort1.Handshake = Handshake.None
        SerialPort1.Encoding = System.Text.Encoding.Default 'very important!
    End Sub

    Private Sub btnOn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOn.Click
        picOn.Visible = True
        SerialPort1.Open()
        SerialPort1.Write("1")
        SerialPort1.Close()
    End Sub

    Private Sub btnOff_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOff.Click
        picOn.Visible = False
        SerialPort1.Open()
        SerialPort1.Write("0")
        SerialPort1.Close()
    End Sub
End Class
4

3 に答える 3

2

うーん....やっとやった...次のコードは正常に動作しています。SoftwareSerial ライブラリを使用しました。Tx コードはシンプルで、ライブラリなしで実装できます。ArduinoのRXピンでVBアプリからデータを取得し、RFモジュールが接続されているArduinoのTXに送信しました。受信機にはソフトウェア シリアル ライブラリが必要です。

送信コード:

  1. ライブラリなし。

    (ライブラリなし)

        int inByte;
        void setup()
        {
          Serial.begin(2400);
        }
        void loop()
        {
          if(Serial.available()>0)
          {
            inByte=Serial.read();
            switch(inByte)
            {
              case '0':
                  Serial.write(inByte);
                  break;
              case '1':
                  Serial.write(inByte);
                  break;               
               default:
                  break;
            delay(100);
            } 
          } 
        }
    
  2. ライブラリ付き。

    #include <SoftwareSerial.h>
    #define rxPin 10
    #define txPin 11
    SoftwareSerial mySerial(10,11); //RX & TX
    int ch;
    
    void setup()
    {
      pinMode(rxPin,INPUT);
      pinMode(txPin,OUTPUT);
      Serial.begin(9600);
      //Serial.println("Hi");
    
      mySerial.begin(2400);
      //mySerial.println("Hello");
    } 
    void loop()
    {
      if(Serial.available()>0)
      {
        ch=Serial.read();
        mySerial.write(ch);
      }
    }
    

受信コード:

 #include <SoftwareSerial.h>
    #define rxPin 10
    #define txPin 11
    SoftwareSerial mySerial(10,11); //RX & TX
    int ch=0;

    void setup()
    {
      pinMode(rxPin,INPUT);
      pinMode(13,OUTPUT);
      //pinMode(txPin,OUTPUT);
      Serial.begin(9600);
      //Serial.println("Hi");

      mySerial.begin(2400);
      //mySerial.println("Hello");
    } 
    void loop()
    {
      if(mySerial.available()>0)
      {
        ch=mySerial.read();
        //Serial.write(ch);
        switch(ch)
        {
          case '0':
              digitalWrite(13,LOW);
              break;
          case '1':
              digitalWrite(13,HIGH);
              break;

          default:
              break;
        }
      }
    }

ところで、ガイダンスと、このコードを完成させるために私に与えてくれた時間について、@Yveに感謝します... :)実装。

于 2013-07-08T09:39:05.253 に答える