1

私のプロジェクトは、私が作成した Visual Basic プログラムを使用して LED ライトを制御しています。

arduinoプロジェクトに少し問題があります。PC からコマンドをさらに送信するにはどうすればよいですか?

例えば、

これは私がアップロードしたArduinoコードです:

{int ledPin = 13; // the number of the LED pin
void setup() {
Serial.begin(9600); // set serial speed
pinMode(ledPin, OUTPUT); // set LED as output
digitalWrite(ledPin, LOW); //turn off LED
}
}


{void loop(){
while (Serial.available() == 0); // do nothing if nothing sent
int val = Serial.read() - '0'; // deduct ascii value of '0' to find numeric value of sent number

if (val == 1) { // test for command 1 then turn on LED
Serial.println("LED on");
digitalWrite(ledPin, HIGH); // turn on LED
}
}

if (val == 0) // test for command 0 then turn off LED
{
Serial.println("LED OFF");
digitalWrite(ledPin, LOW); // turn off LED
}

ご覧のとおり、( Val = 1 ) は LED 1 をオンにし、( Val = 2) は LED 1 をオフにし、さらに 2 つの LED ライトを同じarduinoスケッチに追加したので、( val = 3 ) は LED 2 をオンにしますon, (val = 4 ) は LED 2 をオフにし、同じプロセスをもう一方の LED に適用します。

しかし、LED をもう 1 つ追加して ( val = 10 ) と入力すると、LED 1 がオンになり、

val = 10 を指定したときに LED 1 が点灯した理由がわかりません。

vbで作成したプログラムから(Val)を送信する方法は次のとおりです。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click
    SerialPort1.Open()
    SerialPort1.Write("1")                                   'this will turn LED 1 On 
    SerialPort1.Close()
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click
    SerialPort1.Open()
    SerialPort1.Write("0")                                   'this will turn LED 1 off 
    SerialPort1.Close()

End Sub   

Valに応じて、他のLEDについても同じプロセスが続きます。

コード

この問題を解決するには?

4

1 に答える 1

0

ブルートクイックフィックスは、数値を使用してライトをオン/オフするのではなく、単一の文字を arduino に渡し、それをオンとオフとして定義します (例: A --> 1 をオンにし、B --> 1 をオフにする)。少なくとも、個別にオン/オフできる 26/2 = 13 (大文字のアルファベットの場合) のライトがあります。

serialEvent を使用し、データをキャストし、arduino でスイッチを使用します。

void serialEvent() {
  while (Serial.available() > 0) {
    // get the new byte:
    inChar = (char)Serial.read();

    switch(inChar){

    case 'A':
      digitalWrite(ledPin, HIGH); //turn ON
      break;

    case 'B':
      digitalWrite(ledPin, LOW); //turn OFF
      break;

    //add more lights here

    }

  }
}

コードを使用してトリガーします。

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click

    With SerialPort1
        If Not .IsOpen Then
                .Open()
            End If
            .Write("A")                                   'this will turn LED 1 On 
            .Close()
        End Sub
    End With

この助けを願っています。

于 2014-06-02T19:27:07.247 に答える