Когда контакты TX и RX для Bluetooth подключены, LCD-экран не обновляется. Почему так?

Я подключил экран Bluetooth и ЖК-экран к Arduino Uno. У меня есть две активные кнопки нижнего уровня для увеличения или уменьшения переменной desiredTemp. Это значение предназначено для отображения на ЖК-экране и на моем смартфоне через последовательное соединение Bluetooth.

Это работает так, как задумано для моего смартфона, однако, когда мои контакты передачи и приема подключены к плате, ЖК-экран зависает до тех пор, пока контакты не будут удалены. Кроме того, я не могу обновить переменную desiredTemp через последовательное соединение Bluetooth.

Прикреплен мой код:

#include <LiquidCrystal.h>
#include <SoftwareSerial.h>

LiquidCrystal LCD(10,9,3,2,1,0);
double inIRPin = A0;
double inThermPin = A1; 

int LED = 4;
char recvChar;

int increaseTemp = 7;
int decreaseTemp = 6;
int increaseTempState = 0;
int decreaseTempState = 0;

#define RxD         13
#define TxD         12
SoftwareSerial BTSerial(RxD,TxD);

double valIR = 0;
double valTherm = 0;
double val = 0;
double temp = 0;
double const tempRatio = 0.125;
double desiredTemp = 40; //Градусов Цельсия

void setup() {
 // поместите сюда свой код установки для однократного запуска:

 pinMode(increaseTemp,INPUT);
 pinMode(decreaseTemp,INPUT);

pinMode(RxD, INPUT);
pinMode(TxD, OUTPUT);
pinMode(LED, OUTPUT);
setupBlueToothConnection();

pinMode(inIRPin, INPUT);
pinMode(inThermPin, INPUT);
LCD.begin(16,2); 
LCD.setCursor(0,0);

}

void loop() {
  // поместите сюда свой основной код для многократного запуска:
   valIR = analogRead(inIRPin); //Выход ИК-датчика
  valTherm = analogRead(inThermPin);

   increaseTempState = digitalRead(increaseTemp);
   decreaseTempState = digitalRead(decreaseTemp);

   if(increaseTempState == LOW){
    desiredTemp++;
  }
   if(decreaseTempState == LOW){
     desiredTemp--;
   }
   if(BTSerial.available()){
      recvChar = BTSerial.read();
      Serial.print(recvChar);
      BTSerial.println(desiredTemp);
      if(increaseTempState == LOW){
         desiredTemp++;
         updateLCD();
       }
       if(decreaseTempState == LOW){
         desiredTemp--;
         updateLCD();
       }
       if(recvChar == '1'){
         BTSerial.println("Increasing Temp");
         desiredTemp++;
       }
       if(recvChar == '0'){
         BTSerial.println("Decreasing Temp");
         desiredTemp--;
       }
   }
    updateLCD();
  }

 void setupBlueToothConnection()
 {  
    BTSerial.begin(9600);  

    BTSerial.print("AT");
    delay(400); 

    BTSerial.print("AT+DEFAULT");             // Восстанавливаем все значения настроек
    factory setup
    delay(2000); 

    BTSerial.print("AT+NAMESmartCoaster");    // устанавливаем имя Bluetooth
    delay(400);

    BTSerial.print("AT+PIN0000");             // устанавливаем код пары для подключения
    delay(400);

    BTSerial.print("AT+AUTH1");             //
    delay(400);    

    BTSerial.flush();

  }

 void updateLCD(){
      LCD.setCursor(0,0);
      LCD.print("Current Temp:");
      LCD.println(temp);
      LCD.setCursor(0,1);
      LCD.print("Desired Temp:");
      LCD.println(desiredTemp);
      delay(100);
  }

, 👍1

Обсуждение

Итак, вы подключили ЖК-дисплей к контактам RX и TX и задаетесь вопросом, почему ЖК-дисплей выходит из строя, когда последовательный порт что-то отправляет?, @gre_gor

Нет, ЖК-экран использует контакты 10,9,3,2,1,0. Rx использует контакт 13, а Tx использует контакт 12., @Neil

Serial.print(recvChar); отправляет данные на контакты 0 и 1., @gre_gor

Мне нужна помощь с последовательной связью Arduino. Не могли бы вы сказать мне одну вещь: если я хочу подключить два последовательных канала связи с контактами 2, 3 Arduino Uno и обычным аппаратным последовательным соединением 0, 1, и два устройства - одно из них Bluetooth, а другое - одно. это GPS, поэтому у меня вопрос, возникнут ли какие-либо проблемы во время приема и передачи данных по Bluetooth? И следующий вопрос: какую последовательную связь мы можем использовать для проектов такого типа?, @BUBAI NAYAK


1 ответ


Лучший ответ:

3

Вы подключили ЖК-модуль к последовательным аппаратным контактам 0 (RX) и 1 (TX).

Когда вы получаете данные от модуля Bluetooth через программный последовательный порт, вы отправляете их на аппаратный последовательный порт.

if(BTSerial.available()){
      recvChar = BTSerial.read();
      Serial.print(recvChar);
...

Это портит связь с ЖК-модулем. Удалите Serial.print(recvChar); и это должно заработать.


Более разумным решением было бы использовать аппаратный последовательный порт для модуля Bluetooth, а остальные контакты — для модуля ЖК-дисплея.

Программный последовательный порт следует использовать только в том случае, если вы действительно не можете использовать аппаратный последовательный порт, например, вам нужен аппаратный последовательный порт для связи с другим устройством (ПК или каким-либо другим модулем).

,