Отправить больше команд (Val) для Arduino?

Мой проект управляет светодиодной подсветкой с помощью созданной мной программы Visual Basic.

У меня есть небольшая проблема в моем проекте, как я могу отправить больше команд arduino с моего компьютера?

Например,

Это код 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) включит светодиод 1, ( Val = 2) выключит светодиод 1, и я также добавил еще 2 светодиодных индикатора к тому же arduino эскиз, поэтому теперь ( val = 3) включит светодиод 2, (val = 4) выключит светодиод 2, и тот же процесс переходит на другой светодиод.

Но когда я добавляю еще один светодиод и когда я печатаю ( val = 10), светодиод 1 загорится,

Я не знаю, почему светодиод 1 загорелся, когда я указал val = 10.

Вот как отправить (Val) из моей программы, которую я сделал в vb:

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   

То же самое происходит и для других светодиодов в зависимости от их значения.

Код

Как решить эту проблему?

1 ответ

Грубое быстрое исправление будет состоять не в том, чтобы использовать числовые значения для включения / выключения света, а в том, чтобы передать один символ в arduino и определить его как включенное и выключенное (например, A -> включить 1, B -> выключить 1), по крайней мере, у вас будет 26/2 = 13 (для заглавной буквы) лампочек, которые можно включать / выключать по отдельности.

Используй serialEvent, приведи данные и используй switch в 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

Надеюсь, это поможет.

Другие вопросы по тегам