Вот, это уже слова МУЖА )))
Это не мне, это всему радиолюбительскому сообществу...
Ещё бы и для ICOM и KENWOOD...
Как ты угадал, о каком глобальном косяке я говорю...
К девайсу может быть подключен один из аппаратов, то-есть занимать они будут один и тот же
мягкий серийный порт, при таком подходе и подключаться будет та библиотека, под которую плата
сконфигурирована до стадии компиляции...а если будут свободные пины то можно и всё что угодно,
правда мягкий серийный вроде как два экземпляра класса не комильфо, (лично не проверял)
А если сподобишься переписать, буду благодарен...(отпишу Андрюхе чтобы обещанную мне бутылочку собственно приготовленного коньяка в бочке из колотого Кавказского дуба отправил тебе, да он и сам питает к тебе щенячью сыновью любовь как видишь...так что думаю благоволит...)
Я на github создам проект, ссылку дам, будешь качать оттудова и проверять, у мня такого трасивера нету, придётся тебе быть моими проверяющими руками
да без проблем, их есть у меня, сейчас посмотрю английский мануал, что там
там аналогично, на CLAR стоит энкодер, то-есть команда задает максимальную частоту расстройки, вращением вправо или влево задаётся шаг расстройки, видимо до этого максимального значения...
используется экспедициями для работы на разнесённых частотах, чтобы оперативность раз в пять поднять
К девайсу может быть подключен один из аппаратов, то-есть занимать они будут один и тот же
мягкий серийный порт, при таком подходе и подключаться будет та библиотека, под которую плата
сконфигурирована
Вот честно говоря не понимаю зачем для этого вся эта обьектная хрень и тем более зачем подобная библиотека тюнеру. Какая то красивость ради красивости.
если будет библиотека можно реализовать красивый выносной дисплей к этим аппаратам, он там конечно маловат, а аппарат очень распространённый, универсальный ведь, и КВ и УКВ и через спутники и цифровая связь, а коль объектно будет реализовано, можно и сплиттер замутить, принять софтовым отдать хардовым сериалом, а если использовать 328PB там два хардовых сериала, можно подключить будет и тюнер и усилитель
кстати библиотека даже в том виде рабочая, есть еще одна библиотека Кубинца, она имитирует FT-897, так вот в связке они работают, мне надо было только частоту от имитатора, всё отрабатывало как надо
Вот честно говоря не понимаю зачем для этого вся эта обьектная хрень
Если, как ТС сказал, у него есть еще трансиверы ICOM и KENWOOD, и, если управляются оне примерно одинаково, можно написать интерфейсный абстрактный класс, и от него унаследовать эти 3 трансивера, тогда переключать их можно лиарьно 1 кнопкой.
кстати библиотека даже в том виде рабочая, есть еще одна библиотека Кубинца, она имитирует FT-897, так вот в связке они работают
Дак если работают, нахрена тада новую пилить?
1. Да кто её досконально проверял? Там куча ошибок, первой мыслью когда находил и видел, что делается было - если они также и барышень танцуют, как код пишут, бедные их барышни, да даже элиментарное, когда инициализация физических портов идёт внутри библиотеки говорит само за себя
2. 80-90 процентов на рынке шарманок - yaesu ft-817/ft-857/ft-897
3. по интерфейсу, можно наверно сделать абстрактный класс, так как для стыковки разной аппаратуры и ПО используется программа OMNI-RIG, она небольшая, 1.5мгб, а конфигурацию для выбора конкретной модели она берёт из ini файла, но там всё таки не всё пушисто
4. у ICOM сделано идеологически более правильно, интерфейс CI-V, физически своя передача замыкается на свой приём через диод, а также сигнал TX через резистор 470 ом - выход на общую шину, то-есть интерфейс получается однопроводный, каждый девайс имеет свой именной адрес устройства, это позволяет подцепить к общей шине до 127 разных устройств, пакет команды разной длины, но есть начальные синхронизирующие байты, тело пакета и конечный завершающий байт
5. я уже задумку под твою библиотеку намерился делать, для себя )))
Да, кстати, не забудь предусмотреть дублирование всего, что приходит из софтового порта на сериальный и наоборот, дуина будет забирать только то, что ей надо или это в скетче надо организовывать?
Я пишу только передачу комманд трансиверу с ардуино. Если надо управлять им еще и с компа, то это не ко мне. А вообще, напиши, не жалея слов, что ты сделать хочешь. Можно даже внапочту.
Я пишу только передачу комманд трансиверу с ардуино. Если надо управлять им еще и с компа, то это не ко мне. А вообще, напиши, не жалея слов, что ты сделать хочешь. Можно даже внапочту.
у меня есть Тюнер LDG AT-897, у него два гнезда, одно вход с трансивера, другое выход на компьютер, тюнер забирает себе с трансивера частоту, а всё остальное сквозняком, там в библиотеке есть функция приёма с трансивера, ей сейчас и пользуюсь, принимаю только частоту, но чтобы принять что-то с трансивера, его надо поросить отдать тебе это
Может пока суть дело вынесешь в исходной библиотеке инициализацию SoftwareSerial за рамки библиотеки, как у тебя сделано? Если там можно это поправить
Хотя, лучше использовать базовый класс (Print), тогда пофик будет, железный ты сериал пользуешь, или софтовый.
какие подвижки есть, а то что-то на гитхабе всё по старому...
я тут IDE одолел, всё что правишь сливается на ГИТхаб, заодно попробовал личный развернуть,на сервере, чтобы можно было прятать свой недокод от посторонних глаз )))
IDE одолел, всё что правишь сливается на ГИТхаб, заодно попробовал личный развернуть,на сервере, чтобы можно было прятать свой недокод от посторонних глаз )))
IDE одолел, всё что правишь сливается на ГИТхаб, заодно попробовал личный развернуть,на сервере, чтобы можно было прятать свой недокод от посторонних глаз )))
Внимательно слушаем инструкцию !
Если на GITHUB то всё просто, ставишь их клиента GitHub Desktop, он правда только 64 битный, который создаст папочку в Документах - GitHub, проекты в этой папке и будут консолидировать с твоими проектами на Gihub.
В IDE открываю скетчи в этих проектах, делаешь Commit и Push и всё
ссылка не открылась, нашёл на гитхабе и форкнул, для полноты щастя я напишу файл ключевых слов и с тебя описание, привожу в вид, чтобы было как библиотека, добавил файл ключевых слов, посмотрел, не все команды реализованы, нет getMode и getFreqMode, чё так?
Это же рабочие моменты по созданию библиотеки, может кому интересно будет, под Линуксом ключевые слова не увиделись, версия там 1.8.13 и в примерах не отобразилось, надо добавить два файла в каталог библиотеки, и сделать два каталога src и examples, библиотеку в сырцы, пример в примеры, только в каталог с именем примера,
тогда будет работать из коробки и пример доступен в примерах
name=Yaesu FT897D CAT
version=0.01
author=Dmitry, DetSimen, <dap68@mail.com>
maintainer=Victor, UA6EM, <ua6em@yandex.ru>
sentence=Control various functions of your radio via an Arduino micro-controller a Yaesu FT-897D(817,857) radio from the CAT point of view.
paragraph=This library will will give you basic control over FT897D (FT-817d, FT-857d) via CAT serial commands.
category=Other
url=https://github.com/detsimen/FT879D
architectures=*
По нормальному есть объект FT897D (так называется библиотека)
Это не библиотека, это срань гассподня. Давай тебе другую запилим, с краплёными картами и неразборчивыми бл.дями. Типа такого чонить:
dtsFT897D.h
// Не совсем трезвый аффтар DetSimen сентябрь 2020 // #pragma once #include <Arduino.h> #include <SoftwareSerial.h> const bool ON = true; const bool OFF = false; #pragma pack(push,1) struct FT897DCommand { // буфер команд union { struct { uint8_t Byte0; uint8_t Byte1; uint8_t Byte2; uint8_t Byte3; }; uint8_t AsBytes[4]; }; uint8_t Command; }; const uint8_t COMMAND_SIZE = sizeof(FT897DCommand); #pragma pack(pop) enum class OperatingMode : uint8_t { LSB = 0x00, USB = 0x01, CW = 0x02, CWR = 0x03, AM = 0x04, FM = 0x08, DIG = 0x0A, PKT = 0x0C, FMN = 0x88 }; const uint8_t CMD_LOCK_ON = 0x00; // блокировка вкл/выкл const uint8_t CMD_LOCK_OFF = 0x80; const uint8_t CMD_PTT_ON = 0x08; // тангента вкл/выкл const uint8_t CMD_PTT_OFF = 0x88; const uint8_t CMD_SET_OPERATING_MODE = 0x07; const uint8_t CMD_CLAR_ON = 0x05; // Подстройка частоты (ON | OFF) const uint8_t CMD_CLAR_OFF = 0x85; const uint8_t CMD_SET_MAIN_FREQ = 0x01; // установка частоты PLL class dtsFT897D { protected: SoftwareSerial& FPort; FT897DCommand FCommand; dtsFT897D() = delete; dtsFT897D(dtsFT897D& rvalue) = delete; void ClearCmdBuffer(void); // Очищает(обнуляет) буфер комманд. Для внутреннего использования. void SendCommand(void) const; // Посылает 5 байт команд и данных в устройство public: dtsFT897D(SoftwareSerial& ASerialPort); // конструктор. Принимает ранее созданный SoftwareSerial void Init(const uint32_t ABaudRate = 9600); // инициализация класса void SetLock(const bool AValue); // AValue == (ON | OFF) блокировка вкл/выкл void SetPTT(const bool AValue); // AValue == (ON | OFF) тангента вкл/выкл void SetMode(const OperatingMode AMode = OperatingMode::CW); // по умолчанию рабочий режим - ключ void SetCLAR(const bool AValue); // AValue == (ON | OFF) подстройка частоты вкл/выкл void SetMainFreq(const float AMainFreq); // Установка частоты в понятных цифрах, например 14.1234 MHz };dtsFT897D.cpp
#include "dtsFT897D.h" void dtsFT897D::ClearCmdBuffer(void) { memset(&FCommand, 0, COMMAND_SIZE); } void dtsFT897D::SendCommand(void) const { FPort.write((uint8_t *)(&FCommand), COMMAND_SIZE); } void dtsFT897D::Init(const uint32_t ABaudRate) { FPort.begin(ABaudRate); // настроить скорость Software порта. По умолчанию == 9600 delay(20); SetMode(); // после инициализации переключить рабочий режим на ключ (по умолчанию) } void dtsFT897D::SetLock(const bool AValue) { ClearCmdBuffer(); FCommand.Command = (AValue == ON) ? CMD_LOCK_ON : CMD_LOCK_OFF; SendCommand(); } void dtsFT897D::SetPTT(const bool AValue) { ClearCmdBuffer(); FCommand.Command = (AValue == ON) ? CMD_PTT_ON : CMD_PTT_OFF; SendCommand(); } void dtsFT897D::SetMode(const OperatingMode AMode) { ClearCmdBuffer(); FCommand.Byte0 = static_cast<uint8_t>(AMode); FCommand.Command = CMD_SET_OPERATING_MODE; SendCommand(); } void dtsFT897D::SetCLAR(const bool AValue) { ClearCmdBuffer(); FCommand.Command = (AValue == ON) ? CMD_CLAR_ON : CMD_CLAR_OFF; SendCommand(); } void dtsFT897D::SetMainFreq(const float AMainFreq) { const uint8_t BUFFER_LENGTH = 11; static char OutStr[BUFFER_LENGTH+1]; memset(OutStr, '0', BUFFER_LENGTH); OutStr[BUFFER_LENGTH] = 0x00; const uint32_t MAX_FREQUENCY = 99999999; uint32_t WorkFreq = round(AMainFreq * 1000000); if (WorkFreq > MAX_FREQUENCY) WorkFreq = MAX_FREQUENCY; char* ptr = &OutStr[2]; if (AMainFreq > 10.0) ptr--; if (AMainFreq > 100.0) ptr--; ltoa(WorkFreq, ptr, 10); ClearCmdBuffer(); uint8_t *cmdptr = &FCommand.AsBytes[0]; uint8_t index = 0; for (uint8_t i = 0; i < 4; ++i) { cmdptr[i] = ((OutStr[index] - '0') << 4) | (OutStr[index + 1] - '0'); index += 2; } FCommand.Command = CMD_SET_MAIN_FREQ; SendCommand(); } dtsFT897D::dtsFT897D(SoftwareSerial& ASerialPort) : FPort(ASerialPort) { ClearCmdBuffer(); }использование
/* Name: Test_FT897D.ino Created: 25.09.2020 7:06:13 Author: DtS */ #include <SoftwareSerial.h> #include "dtsFT897D.h" SoftwareSerial RadioPort(8,7); dtsFT897D Radio(RadioPort); void setup() { Radio.Init(9600); Radio.SetMainFreq(14.256); } void loop() { }Дальше продолжать, или нуёнах?
По нормальному есть объект FT897D (так называется библиотека)
Это не библиотека, это срань гассподня. Давай тебе другую запилим, с краплёными картами и неразборчивыми бл.дями. Типа такого чонить:
dtsFT897D.h
// Не совсем трезвый аффтар DetSimen сентябрь 2020 // #pragma once #include <Arduino.h> #include <SoftwareSerial.h> const bool ON = true; const bool OFF = false; #pragma pack(push,1) struct FT897DCommand { // буфер команд union { struct { uint8_t Byte0; uint8_t Byte1; uint8_t Byte2; uint8_t Byte3; }; uint8_t AsBytes[4]; }; uint8_t Command; }; const uint8_t COMMAND_SIZE = sizeof(FT897DCommand); #pragma pack(pop) enum class OperatingMode : uint8_t { LSB = 0x00, USB = 0x01, CW = 0x02, CWR = 0x03, AM = 0x04, FM = 0x08, DIG = 0x0A, PKT = 0x0C, FMN = 0x88 }; const uint8_t CMD_LOCK_ON = 0x00; // блокировка вкл/выкл const uint8_t CMD_LOCK_OFF = 0x80; const uint8_t CMD_PTT_ON = 0x08; // тангента вкл/выкл const uint8_t CMD_PTT_OFF = 0x88; const uint8_t CMD_SET_OPERATING_MODE = 0x07; const uint8_t CMD_CLAR_ON = 0x05; // Подстройка частоты (ON | OFF) const uint8_t CMD_CLAR_OFF = 0x85; const uint8_t CMD_SET_MAIN_FREQ = 0x01; // установка частоты PLL class dtsFT897D { protected: SoftwareSerial& FPort; FT897DCommand FCommand; dtsFT897D() = delete; dtsFT897D(dtsFT897D& rvalue) = delete; void ClearCmdBuffer(void); // Очищает(обнуляет) буфер комманд. Для внутреннего использования. void SendCommand(void) const; // Посылает 5 байт команд и данных в устройство public: dtsFT897D(SoftwareSerial& ASerialPort); // конструктор. Принимает ранее созданный SoftwareSerial void Init(const uint32_t ABaudRate = 9600); // инициализация класса void SetLock(const bool AValue); // AValue == (ON | OFF) блокировка вкл/выкл void SetPTT(const bool AValue); // AValue == (ON | OFF) тангента вкл/выкл void SetMode(const OperatingMode AMode = OperatingMode::CW); // по умолчанию рабочий режим - ключ void SetCLAR(const bool AValue); // AValue == (ON | OFF) подстройка частоты вкл/выкл void SetMainFreq(const float AMainFreq); // Установка частоты в понятных цифрах, например 14.1234 MHz };dtsFT897D.cpp
#include "dtsFT897D.h" void dtsFT897D::ClearCmdBuffer(void) { memset(&FCommand, 0, COMMAND_SIZE); } void dtsFT897D::SendCommand(void) const { FPort.write((uint8_t *)(&FCommand), COMMAND_SIZE); } void dtsFT897D::Init(const uint32_t ABaudRate) { FPort.begin(ABaudRate); // настроить скорость Software порта. По умолчанию == 9600 delay(20); SetMode(); // после инициализации переключить рабочий режим на ключ (по умолчанию) } void dtsFT897D::SetLock(const bool AValue) { ClearCmdBuffer(); FCommand.Command = (AValue == ON) ? CMD_LOCK_ON : CMD_LOCK_OFF; SendCommand(); } void dtsFT897D::SetPTT(const bool AValue) { ClearCmdBuffer(); FCommand.Command = (AValue == ON) ? CMD_PTT_ON : CMD_PTT_OFF; SendCommand(); } void dtsFT897D::SetMode(const OperatingMode AMode) { ClearCmdBuffer(); FCommand.Byte0 = static_cast<uint8_t>(AMode); FCommand.Command = CMD_SET_OPERATING_MODE; SendCommand(); } void dtsFT897D::SetCLAR(const bool AValue) { ClearCmdBuffer(); FCommand.Command = (AValue == ON) ? CMD_CLAR_ON : CMD_CLAR_OFF; SendCommand(); } void dtsFT897D::SetMainFreq(const float AMainFreq) { const uint8_t BUFFER_LENGTH = 11; static char OutStr[BUFFER_LENGTH+1]; memset(OutStr, '0', BUFFER_LENGTH); OutStr[BUFFER_LENGTH] = 0x00; const uint32_t MAX_FREQUENCY = 99999999; uint32_t WorkFreq = round(AMainFreq * 1000000); if (WorkFreq > MAX_FREQUENCY) WorkFreq = MAX_FREQUENCY; char* ptr = &OutStr[2]; if (AMainFreq > 10.0) ptr--; if (AMainFreq > 100.0) ptr--; ltoa(WorkFreq, ptr, 10); ClearCmdBuffer(); uint8_t *cmdptr = &FCommand.AsBytes[0]; uint8_t index = 0; for (uint8_t i = 0; i < 4; ++i) { cmdptr[i] = ((OutStr[index] - '0') << 4) | (OutStr[index + 1] - '0'); index += 2; } FCommand.Command = CMD_SET_MAIN_FREQ; SendCommand(); } dtsFT897D::dtsFT897D(SoftwareSerial& ASerialPort) : FPort(ASerialPort) { ClearCmdBuffer(); }использование
/* Name: Test_FT897D.ino Created: 25.09.2020 7:06:13 Author: DtS */ #include <SoftwareSerial.h> #include "dtsFT897D.h" SoftwareSerial RadioPort(8,7); dtsFT897D Radio(RadioPort); void setup() { Radio.Init(9600); Radio.SetMainFreq(14.256); } void loop() { }Дальше продолжать, или нуёнах?
Вот, это уже слова МУЖА )))
Это не мне, это всему радиолюбительскому сообществу...
Ещё бы и для ICOM и KENWOOD...
Как ты угадал, о каком глобальном косяке я говорю...
К девайсу может быть подключен один из аппаратов, то-есть занимать они будут один и тот же
мягкий серийный порт, при таком подходе и подключаться будет та библиотека, под которую плата
сконфигурирована до стадии компиляции...а если будут свободные пины то можно и всё что угодно,
правда мягкий серийный вроде как два экземпляра класса не комильфо, (лично не проверял)
А если сподобишься переписать, буду благодарен...(отпишу Андрюхе чтобы обещанную мне бутылочку собственно приготовленного коньяка в бочке из колотого Кавказского дуба отправил тебе, да он и сам питает к тебе щенячью сыновью любовь как видишь...так что думаю благоволит...)
Про конкретно этого Андрюху, с коньяком, не знаю.
Буду пилить по вечерам.
Проясни момент, страница 62 русского мануала
То, что красным обведено, это ашыпка или нет? P1 = 0 и при +OFFSET и при -OFFSET, так и должно быть?
В Дедокоде разберешься?
Я на github создам проект, ссылку дам, будешь качать оттудова и проверять, у мня такого трасивера нету, придётся тебе быть моими проверяющими руками
Я на github создам проект, ссылку дам, будешь качать оттудова и проверять, у мня такого трасивера нету, придётся тебе быть моими проверяющими руками
да без проблем, их есть у меня, сейчас посмотрю английский мануал, что там
там аналогично, на CLAR стоит энкодер, то-есть команда задает максимальную частоту расстройки, вращением вправо или влево задаётся шаг расстройки, видимо до этого максимального значения...
используется экспедициями для работы на разнесённых частотах, чтобы оперативность раз в пять поднять
К девайсу может быть подключен один из аппаратов, то-есть занимать они будут один и тот же
мягкий серийный порт, при таком подходе и подключаться будет та библиотека, под которую плата
сконфигурирована
Вот честно говоря не понимаю зачем для этого вся эта обьектная хрень и тем более зачем подобная библиотека тюнеру. Какая то красивость ради красивости.
Один объект - один тюнер. Инкапсуляция, панимаешь...
если будет библиотека можно реализовать красивый выносной дисплей к этим аппаратам, он там конечно маловат, а аппарат очень распространённый, универсальный ведь, и КВ и УКВ и через спутники и цифровая связь, а коль объектно будет реализовано, можно и сплиттер замутить, принять софтовым отдать хардовым сериалом, а если использовать 328PB там два хардовых сериала, можно подключить будет и тюнер и усилитель
кстати библиотека даже в том виде рабочая, есть еще одна библиотека Кубинца, она имитирует FT-897, так вот в связке они работают, мне надо было только частоту от имитатора, всё отрабатывало как надо
кстати библиотека даже в том виде рабочая, есть еще одна библиотека Кубинца, она имитирует FT-897, так вот в связке они работают
Дак если работают, нахрена тада новую пилить?
сейчас посмотрю английский мануал, что там
там аналогично
Нихрена. Если -OFFSET, то P1 == 1; если +OFFSET, то P1 == 0;
Если, как ТС сказал, у него есть еще трансиверы ICOM и KENWOOD, и, если управляются оне примерно одинаково, можно написать интерфейсный абстрактный класс, и от него унаследовать эти 3 трансивера, тогда переключать их можно лиарьно 1 кнопкой.
Это уже какой то монстр получается )
Это полиморфизм и все прелести разделяемого кода.
кстати библиотека даже в том виде рабочая, есть еще одна библиотека Кубинца, она имитирует FT-897, так вот в связке они работают
Дак если работают, нахрена тада новую пилить?
1. Да кто её досконально проверял? Там куча ошибок, первой мыслью когда находил и видел, что делается было - если они также и барышень танцуют, как код пишут, бедные их барышни, да даже элиментарное, когда инициализация физических портов идёт внутри библиотеки говорит само за себя
2. 80-90 процентов на рынке шарманок - yaesu ft-817/ft-857/ft-897
3. по интерфейсу, можно наверно сделать абстрактный класс, так как для стыковки разной аппаратуры и ПО используется программа OMNI-RIG, она небольшая, 1.5мгб, а конфигурацию для выбора конкретной модели она берёт из ini файла, но там всё таки не всё пушисто
4. у ICOM сделано идеологически более правильно, интерфейс CI-V, физически своя передача замыкается на свой приём через диод, а также сигнал TX через резистор 470 ом - выход на общую шину, то-есть интерфейс получается однопроводный, каждый девайс имеет свой именной адрес устройства, это позволяет подцепить к общей шине до 127 разных устройств, пакет команды разной длины, но есть начальные синхронизирующие байты, тело пакета и конечный завершающий байт
5. я уже задумку под твою библиотеку намерился делать, для себя )))
сейчас посмотрю английский мануал, что там
там аналогично
Нихрена. Если -OFFSET, то P1 == 1; если +OFFSET, то P1 == 0;
где вычитал? я смотрел 847/857/897 - там как на картинке
сейчас посмотрю английский мануал, что там
там аналогично
Нихрена. Если -OFFSET, то P1 == 1; если +OFFSET, то P1 == 0;
где вычитал? я смотрел 847/857/897 - там как на картинке
в твоём коде из сообщения #51
// set the clarifier frequency void FT897D::clarFreq(long freq) { // will come back to this later byte clarOfst[5] = {0x00,0x00,0x00,0x00,0x00}; if (freq >= 0 ) clarOfst[0] = 0x00;//offset > 0 if (freq < 0 ) clarOfst[0] = 0x01; // offset < 0 clarOfst[1] = 0x00;//default clarOfst[4] = CAT_CLAR_SET;//command byte unsigned char tempWord[2]; converted = to_bcd_be(tempWord, abs(freq), 4); for (byte i=0; i<2; i++){ clarOfst[i+2] = converted[i]; } sendCmd(clarOfst,5); getByte(); }О значит канадец пользовался закрытыми для обывателя источниками )))
Да, назад дороги нет, я уже и плату придумал, библиотека будет внутри...
Да, кстати, не забудь предусмотреть дублирование всего, что приходит из софтового порта на сериальный и наоборот, дуина будет забирать только то, что ей надо или это в скетче надо организовывать?
Я пишу только передачу комманд трансиверу с ардуино. Если надо управлять им еще и с компа, то это не ко мне. А вообще, напиши, не жалея слов, что ты сделать хочешь. Можно даже внапочту.
Я пишу только передачу комманд трансиверу с ардуино. Если надо управлять им еще и с компа, то это не ко мне. А вообще, напиши, не жалея слов, что ты сделать хочешь. Можно даже внапочту.
у меня есть Тюнер LDG AT-897, у него два гнезда, одно вход с трансивера, другое выход на компьютер, тюнер забирает себе с трансивера частоту, а всё остальное сквозняком, там в библиотеке есть функция приёма с трансивера, ей сейчас и пользуюсь, принимаю только частоту, но чтобы принять что-то с трансивера, его надо поросить отдать тебе это
Может пока суть дело вынесешь в исходной библиотеке инициализацию SoftwareSerial за рамки библиотеки, как у тебя сделано? Если там можно это поправить
Ага. Я то тебе предлагал переписать тока:
Ага. Я то тебе предлагал переписать тока:
ну перепиши что сможешь )))
подскажи:
Есть библиотека работающая с сериалом к примеру YYY.
Как создать два экземпляра работающих с разными хардовыми сериальными портами?
в классе заводишь protected переменную, как ссылка на Serial. Создаешь до Setup два сериала, передаешь их в конструктор нужного тебе класса
HardwareSerial Serial1; HardwareSerial Serial2; class TRadio { protected: Serial &FPort; public: TRadio(Serial &APort) { FPort=APort;}; } TRadio Radio1(Serial1); TRadio Radio2(Serial2);теперь у тебя 2 экземпляра класса с разными Сериалами
Хотя, лучше использовать базовый класс (Print), тогда пофик будет, железный ты сериал пользуешь, или софтовый.
Хотя, лучше использовать базовый класс (Print), тогда пофик будет, железный ты сериал пользуешь, или софтовый.
какие подвижки есть, а то что-то на гитхабе всё по старому...
я тут IDE одолел, всё что правишь сливается на ГИТхаб, заодно попробовал личный развернуть,на сервере, чтобы можно было прятать свой недокод от посторонних глаз )))
IDE одолел, всё что правишь сливается на ГИТхаб, заодно попробовал личный развернуть,на сервере, чтобы можно было прятать свой недокод от посторонних глаз )))
Внимательно слушаем инструкцию !
какие подвижки есть
Никаких, я пока тенпературу сбиваю народными срецтвами.
IDE одолел, всё что правишь сливается на ГИТхаб, заодно попробовал личный развернуть,на сервере, чтобы можно было прятать свой недокод от посторонних глаз )))
Внимательно слушаем инструкцию !
Если на GITHUB то всё просто, ставишь их клиента GitHub Desktop, он правда только 64 битный, который создаст папочку в Документах - GitHub, проекты в этой папке и будут консолидировать с твоими проектами на Gihub.
В IDE открываю скетчи в этих проектах, делаешь Commit и Push и всё
какие подвижки есть
Никаких, я пока тенпературу сбиваю народными срецтвами.
а я антибиотиками последнего поколения, как будто ты медвежьим жиром намазался и в шкуру завернулся )))
Ня
Ня
ссылка не открылась, нашёл на гитхабе и форкнул, для полноты щастя я напишу файл ключевых слов и с тебя описание, привожу в вид, чтобы было как библиотека, добавил файл ключевых слов, посмотрел, не все команды реализованы, нет getMode и getFreqMode, чё так?
Это я на подумать оставил, как проще реализовать. Еще хочу сделать софтсериал прозрачный, но пока думаю как. Подожди дня три.
И этта, чтоб тут форум не засирать, про все рабочие моменты пишы в электропочту. Потом, когда отладим, выкладем здеся.
Это же рабочие моменты по созданию библиотеки, может кому интересно будет, под Линуксом ключевые слова не увиделись, версия там 1.8.13 и в примерах не отобразилось, надо добавить два файла в каталог библиотеки, и сделать два каталога src и examples, библиотеку в сырцы, пример в примеры, только в каталог с именем примера,
тогда будет работать из коробки и пример доступен в примерах
keywords.txt
library.properties
Какта мне на стандартную IDE - пофик. У мня в VS intellisence хаошый. :-) Все понимает.
Какта мне на стандартную IDE - пофик. У мня в VS intellisence хаошый. :-) Все понимает.
я поставил под Линукс, пока не одолел твою VS, IDE попроще будет )))
Короче, пока отлаживаемса, пишы на электропочту. Думаю, никому это неинтересно. :-)
Седня уже не пишы, мы со с котом лечимся. :-)
Посмотри, что я не так делаю?
/* Name: Test_FT897D.ino Created: 25.09.2020 7:06:13 Author: DtS */ float ftFreq; #include <SoftwareSerial.h> #include "dtsFT897D.h" SoftwareSerial RadioPort(2,3); // RX, TX dtsFT897D Radio(RadioPort); void setup() { Serial.begin(115200); delay(250); Serial.println("Start..."); Radio.Init(4800); } void loop() { ftFreq = Radio.GetFrequency(); Serial.print("Freq = "); Serial.println(ftFreq); delay(1000); }А где ты частоту устанавливаешь сначала, чтоб ее читать потом?
А где ты частоту устанавливаешь сначала, чтоб ее читать потом?
Я подключил ардуину к девайсу, из него читаю
И чо выводится?
И чо выводится?
0.00
Ну так, или он не настроен, или 5 байт отдавать не хотит. Завтра поразбира
Ок!
Значить, найди в срр файле функцию
bool dtsFT897D::ReadLongStatus(const uint16_t ATimeoutMS)
и у ей унутре удали или закоментируй строчку
FPort.flush();
и пропробуй снова.
Значить, найди в срр файле функцию
bool dtsFT897D::ReadLongStatus(const uint16_t ATimeoutMS)
и у ей унутре удали или закоментируй строчку
FPort.flush();
и пропробуй снова.
сейчас она у меня выглядит так, но ничего не изменилось, верну взад все как было, проверить, что интерфейс рабочий, дам знать
bool dtsFT897D::ReadLongStatus(const uint16_t ATimeoutMS) { const uint8_t ANSWER_LENGTH = 5; ClearCmdBuffer(); FCommand.Command = CMD_READ_LONG_STATUS; SendCommand(); delay(20); FPort.flush(); uint32_t now = millis(); uint8_t* buf = (uint8_t*)(&FCommand); while (FPort.available() < ANSWER_LENGTH) { if (millis() - now > ATimeoutMS) return false; } FPort.readBytes(buf, ANSWER_LENGTH); return false; }9 строчку убери нахрен
Я очень прошу пардону, но вот это
19returnfalse;надо заменить на
:) Это я спьяну не заметил.
9 строчку убери нахрен
Я очень прошу пардону, но вот это
19returnfalse;надо заменить на
:) Это я спьяну не заметил.
Всё сложнее, как говорил DIMAX - "если что-то имеет теоретическую возможность не заработать. оно у тебя (то-есть меня) не заработает" )))
Сейчас испытую в рамках связки двух ардуин, одна имитирует трансивер, другая - девайс подключенный к трансиверу (то биш твой скетч), в качестве трансивера программа и библиотека FT-857d
Девайс оживил, есть глюк понять который я не в силах
И непонятно, как вывести в сериал текущий режим?
radio.GetOperatingMode();
говорила мне мама, не режь аппендицит по телефону...
И непонятно, как вывести в сериал текущий режим?
Это-то как раз проще всего. Был бы ты настоящий сталевар, даже вопроса бы не возникло :)
void ModeToSerial(const TOperatingMode AMode) { switch (AMode) { case TOperatingMode::AM: Serial.println("AM"); break; case TOperatingMode::CW: Serial.println("CW"); break; // . // . // . case TOperatingMode::USB: Serial.println("USB"); break; default: Serial.println("Unknown mode"); break; } }