Перейти к содержанию

Scanmatik 2 pro, установка Bluetooth модуля.


Рекомендуемые сообщения

  • Ответов 76
  • Создана
  • Последний ответ

Топ авторов темы

#include "BluetoothSerial.h"
#include "driver/uart.h"

#define BAUD_RATE  115200 * 8
#define SIZE_BUFFER  256
#define SIZE_FIFO   SIZE_BUFFER * 8
#define SAVE_MODE
//#define DEBUG_MODE

//#define USE_PIN
#ifdef USE_PIN
const char* pin = "1234";
#endif
const String device_name = "SCANMATIK #A111788";
BluetoothSerial SerialBT;
uint8_t buffer[SIZE_BUFFER];
unsigned int available=0;
unsigned int availableBT=0;
size_t bytesRead=0;
size_t bytesWrite=0;

#ifdef SAVE_MODE
  uint32_t min_delay = 1;
  uint32_t max_delay = min_delay * 1024;  
  uint32_t cur_delay = min_delay;
  uint32_t critical_size = SIZE_FIFO / 2;
#endif

#ifdef DEBUG_MODE
  #include <chrono>
  using namespace std::chrono;
  auto timePointSerial = high_resolution_clock::now();
  auto timePointBT = high_resolution_clock::now();
#endif


void setup() {
  Serial.setRxBufferSize(SIZE_FIFO);
  Serial.setTxBufferSize(SIZE_FIFO);
  Serial.begin(BAUD_RATE);  

  memset(buffer, 0, sizeof(buffer));
  
  // setup UART from hardware (RTS/CTS)
  uart_set_pin(UART_NUM_0, 1, 3, 22, 19); // UART, TX, RX, RTS, CTS
  uart_set_hw_flow_ctrl(UART_NUM_0, UART_HW_FLOWCTRL_CTS_RTS, 64);
  uart_set_mode(UART_NUM_0, UART_MODE_UART);
  
  SerialBT.begin(device_name);
  #ifdef USE_PIN
    SerialBT.setPin(pin);
  #endif
  
  Serial.print("AT-AB -BypassMode-\n");
}

void loop() {  
  available = Serial.available();
  if (available > 0) {    
    bytesRead = Serial.readBytes(buffer, min(available, sizeof(buffer)));    
    bytesWrite = SerialBT.write(buffer, bytesRead);
#ifdef SAVE_MODE
    if (cur_delay > min_delay) {
        cur_delay /= 2;
    }
#endif
#ifdef DEBUG_MODE
    auto timeoutSerial = high_resolution_clock::now() - timePointSerial;
    Serial.printf("\n\rAvailable from Serial %u, cur_delay %u , timeout %u\n", available, cur_delay, duration_cast<microseconds>(timeoutSerial).count());
    Serial.printf("\n\rFrom Serial to BT Read = %u, Write = %u\n", bytesRead, bytesWrite);      
    timePointSerial = high_resolution_clock::now();
#endif       
  }  
  availableBT = SerialBT.available();
  if (availableBT > 0) {    
    bytesRead = SerialBT.readBytes(buffer, min(availableBT, sizeof(buffer)));
    bytesWrite = Serial.write(buffer, bytesRead);   
#ifdef SAVE_MODE
    if (cur_delay > min_delay) {
        cur_delay /= 2;
    }
#endif
#ifdef DEBUG_MODE
    auto timeoutBT = high_resolution_clock::now() - timePointBT;
    Serial.printf("\n\rAvailable from BT %u, cur_delay %u, timeout %u\n", availableBT, cur_delay, duration_cast<microseconds>(timeoutBT).count());
    Serial.printf("\n\rFrom BT to Serial Read = %u, Write = %u\n", bytesRead, bytesWrite);
    timePointBT = high_resolution_clock::now();
#endif         
  }
#ifdef SAVE_MODE 
  if ((available < critical_size) && (availableBT < critical_size)) {
    delay(cur_delay);
  }
  if ((available <= 0) && (availableBT <= 0)) {
    if (cur_delay < max_delay) {
      cur_delay *= 2;
    }
  }
#endif  
}

 

для визуального контроля работы интерфейсов раскоментировать //#define DEBUG_MODE

Это для экспериментов до установки в сканматик. Устанавливать с включенным DEBUG лучше не надо

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   2 пользователя онлайн

×
  • Создать...