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

carmasteruser

Начинающий
  • Постов

    1
  • Зарегистрирован

  • Посещение

Информация

  • Город
    Kurganinsk
  • Имя
    Sergej
  • Страна
    Russia

Достижения carmasteruser

Новичок

Новичок (1/3)

0

Репутация

  1. #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 лучше не надо
×
  • Создать...