Код не выполняется, когда команда приходит через Bluetooth - PullRequest
0 голосов
/ 29 июня 2019

Я использую устройство HC-05 Bluetooth и Arduino Mega ( не фокус, но я подумал, что включу его ).

Я хочу, чтобы светодиод включался и выключался нажатием кнопки в processing.Мой processing код:

import processing.serial.*;

Serial myPort;

String state = "Turn On";

void setup() {
    size(600, 600);

    myPort = new Serial(this, Serial.list()[0], 9600);
}

void draw() {
  background(255);
  fill(0, 150, 150);
  rectMode(CENTER);
  rect(width/2, height/2, 200, 75, 50);

  textSize(32);
  fill(0);
  text(state , width/2 - textWidth(state) / 2, height/2 + 16);
}

void mousePressed() {

 if (mouseX < 400 && mouseX > 200 && mouseY < 333.5 && mouseY > 266.5) {

   if (state == "Turn On") {
     state = "Turn Off";
     myPort.write('1');
   } else {
     state = "Turn On"; 
     myPort.write('0');

   } 

  }

}

, а мой код Arduino:

const int ledPin = 7;
char ledState;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
}

void loop() {
  // put your main code here, to run repeatedly:
  if (Serial.available() > 0) {
    ledState = Serial.read();
  }

  if (ledState == '0') {
    digitalWrite(ledPin, LOW);
    ledState = '3';
  }

  if (ledState == '1') {
    digitalWrite(ledPin, HIGH);
    ledState = '3';
  }

}

Тем не менее, светодиод никогда не включается.Я знаю, что сигнал Bluetooth проходит, потому что мигает индикатор RX на Arduino, что означает, что он прошел, но индикатор никогда не включается.

В чем проблема с кодом?Я подозреваю, что я неправильно читаю данные в программе Arduino, за исключением того, что этот метод работал несколько дней назад ...

Заранее спасибо, ура!

Ответы [ 2 ]

2 голосов
/ 30 июня 2019

Я понял (через 5 дней - сразу не задавал вопрос)!

Не выполняйте никаких подключений, если Arduino подключен к компьютеру, потому что данные уже проходят через кабель к Arduino, через контакты RX и TX, в противном случае контакты RX и TX отрицательно повлияют на ваши результаты. , Но, если вы получаете внешнее питание, подключите контакты RX и TX (так как нет кабеля). Модуль кажется довольно привередливым, и, возможно, у меня что-то не так, но после стольких дней отладки я сомневаюсь в этом. Надеюсь, это поможет! Ура!


РЕДАКТИРОВАТЬ : Это на самом деле связано с кодом, и проблема в коде заставляет работать выше. Проблема в Serial.list()[0], это находит вещь вверху списка. Который, на самом деле USB-кабель Arduino! Итак, Обработка связывалась с Arduino через кабель. Вот почему это работает, чтобы извлечь контакты RX и TX, они не использовались. Причина, по которой я думаю, что это не сработало, когда контакты RX и TX были в том, что я думаю, что контакты RX и TX Arduino имеют приоритет над кабелем USB, что означает, что Arduino был только вид прослушивание кабеля, поэтому мигает индикатор RX.

Итак, все заработало, когда я отключил его от компьютера, потому что исчез Arduino COM, что означало, что верхним COM был сам Bluetooth. Таким образом, он на самом деле связался с модулем Bluetooth, который отправил информацию по его выводу TX на вывод RX Arduino, и Arduino выполнил команду.

Итак, в конечном итоге, лучше заглянуть в диспетчер устройств, узнать COM модуля и использовать его вместо Serial.list()[0], что может привести к неожиданным результатам. Итак, в последний раз ... Ура!


ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ : Мое последнее утверждение было подтверждено моими тестами, поэтому в последний, последний раз ... Приветствия!

0 голосов
/ 30 июня 2019

В вашем коде arduino есть флаг, который содержит 0 или 1, и вы сравниваете его с символом «0» (что эквивалентно 48).

if (ledState == "0") {

Потеряйте кавычкина 0 есть.Это инт.Число.Не строка

Также обратите внимание, что для ledState установлено значение 0 в обоих случаях.У меня такое чувство, что это тоже ошибка.

...