Terminate Character

gva62
Offline
Зарегистрирован: 03.07.2019

Ребята, подскажите пож, можно ли в скетче сделать переопределение (как?) для признака конца команды, переданой через COM-port?

 

"По умолчанию" предполагается, что используется Line feed (\n), но __хотелось__бы__ чтобы скетч юзал \r на входе.

Итак, если ДА, то как настроить?

sadman41
Offline
Зарегистрирован: 19.10.2016

if (Serial.read() == '\r') {...}

gva62
Offline
Зарегистрирован: 03.07.2019

спасибо за такую оперативность))

да-да, все было бы хорошо, если бы задача распадалось на такие подробные куски.
Однако, скетч написан по другому принципу (писался не мной, потому и пришлось идти на форум со своими вопросами):

В скетче задается новая команда (та самая, что придет через COM-port >>>> :DATA?), т.е. идет обращение к встроенной процедуре cmd.addCommand создать новую команду и описан код по ее обработке cmd_data

cmd.addCommand(":DATA?", cmd_data);

----

На этом этапе К СОЖАЛЕНИЮ нет ни одного места, где можно было бы модифицировать ТО, о чем я пишу(((
Отсюда у меня и возник вопрос КАК изменить некие "дефолтные" установки, чтобы процедура, которую вызывает мой скетч, юзала не \n, а \r ???

Ну, или как вариант, ЭТО НЕ ВОЗМОЖНО в данной конкретной ситуации...

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ничо не понял. Но, вполне вероятно, это я просто непроходимо туп.

sadman41
Offline
Зарегистрирован: 19.10.2016

Вы хотите, чтобы кто-то подсказал, как исправить дефолтные установки скетча, который в глаза не видел - я правильно понимаю?

gva62
Offline
Зарегистрирован: 03.07.2019
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#include <SerialCommand.h>

#define SERIAL_BAUD_RATE 115200
#define DHTSENSOR_DATA_PIN 2
#define DHTSENSOR_TYPE DHT22


// State
float temperature = 0.0;
float humidity = 0.0;

DHT_Unified dhtsensor(DHTSENSOR_DATA_PIN, DHTSENSOR_TYPE);
SerialCommand cmd;

void setup() {
  // Disable builtin LED
  pinMode(LED_BUILTIN, OUTPUT);
  digitalWrite(LED_BUILTIN, LOW);

  Serial.begin(SERIAL_BAUD_RATE);
  dhtsensor.begin();

  cmd.addCommand(":DATA?", cmd_data);

  Serial.println("OK");
}


void loop() {
  cmd.readSerial();

  sensors_event_t event;

  dhtsensor.temperature().getEvent(&event);
  if (!isnan(event.temperature)) {
    temperature = event.temperature;
  }

  dhtsensor.humidity().getEvent(&event);
  if (!isnan(event.relative_humidity)) {
    humidity = event.relative_humidity;
  }
}


void cmd_data() {
  Serial.print(temperature, 2);
  Serial.print(",");
  Serial.println(humidity, 2);
}

 

Вот - привел код )))

gva62
Offline
Зарегистрирован: 03.07.2019

Вы понимаете правильно, но акцент выставляете неверный)))

Я не даром поставил слово ДЕФОЛТНЫЕ настройки в кавычки.
Если идет обращение к стандартным библилтекам, то можно было бы от них ожидать некоторой гибкости...

Поэтому я и спросил: возможно ли как-то повлиять на эту ситуацию извне (может есть какой-то дополнительный необязательный параметр, или еще нечто)?

sadman41
Offline
Зарегистрирован: 19.10.2016

Первая ссылка на библиотеку из гугля https://github.com/kroimon/Arduino-SerialCommand/blob/master/SerialCommand.cpp , навскидку - строка #33. 

Глобальных дефолтовых настроек на этот счёт нет.

kalapanga
Offline
Зарегистрирован: 23.10.2016

gva62 пишет:

"По умолчанию" предполагается, что используется Line feed (\n), но __хотелось__бы__ чтобы скетч юзал \r на входе.

Ссылку на используемую библиотеку Вы не дали. Но судя по той, что я видел, там в одном месте заменить '\n' на '\r', промахнуться негде.

gva62
Offline
Зарегистрирован: 03.07.2019

Да, sadman41, я уже тоже глянул на это и готов-таки пойти этим путем (переделать "под себя" библиотеку).

Но меня очень смутила ремарка:

" // default terminator for commands, newline character "

... как раз в ключе моего топика: казалось бы, если есть такое понятие, как дефолтное значение, то должен быть и способ воздействия на него (не столь брутальный, что мы щас обсуждаем)!

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Неизвестно, что имел в виду автор. Может он был пьян. См. строку #80

gva62
Offline
Зарегистрирован: 03.07.2019

а-ха-ха! )))
строка 80 - просто шедевральна...
Ладно, буду идти на таран (хотя это и не красиво) - просто заменю библиотеку...

b707
Offline
Зарегистрирован: 26.05.2017

gva62 пишет:

Ладно, буду идти на таран (хотя это и не красиво) - просто заменю библиотеку...

что в этом "некрасивого"? Библиотеки зачастую пишут такие же чайники, как вы или я - и поменять что-то в библиотеке под свои нужды вовсе не подвиг, я так постоянно делаю :)

gva62
Offline
Зарегистрирован: 03.07.2019

Все, ребята, все сделал - работает...

)))

Всем спасибо за конструктивное обсуждение и успехов!