Вопрос по синтаксису

Тема в разделе "Arduino & Shields", создана пользователем Ariadna-on-Line, 17 май 2021.

  1. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Не знаю как сформулировать вопрос Гуглу, потому объясняю чего хочу-
    Понадобилось в библиотеку ввести функцию выделения двух максимумов.
    За исходник в библиотеке взята функция на один максимум. Три аргумента + два результата на выходе.

    FFT.MajorPeak(vReal, samples, samplingFrequency, &x, &v); // x - Частота пика., v - Магнитуда пика.

    Понадобилось две частоты и их магнитуды - Три аргумента + четыре результата на выходе. Сделал функцию -

    FFT.DTMFPeak(vReal, samples, samplingFrequency, &x, &v, &Px, &Pv); // Частота НЧ, частота ВЧ, магнитуда НЧ, магнитуда ВЧ.

    Все работает, но на будущее возник один вопрос - сколько вообще можно задавать в функцию аргументов и результатов вот именно такой формой записи строки команды, чтобы компилятор "прожевал" ? С уважением.
     
    Последнее редактирование: 17 май 2021
  2. akl

    akl Гуру

    да наверно сколько угодно можно. но лучше запихать всё в структуру и передавать адрес этой структуры
     
    Un_ka, Andrey12 и Ariadna-on-Line нравится это.
  3. b707

    b707 Гуру

    вообще считается хорошим тоном. чтобы число аргументов функции не превышало трех-четырех.Исключение - конструкторы - там иногда строчка вызова оастягивается на десяток строк :)
     
    Ariadna-on-Line нравится это.
  4. Ariadna-on-Line

    Ariadna-on-Line Гуру

    $57$AB$15$06 - Четыре шестнадцатеричных значения . В программе Termival v1.9b передается нормально - устройство (не Ардуина) отвечает. Как должна в Мониторе порта Ардуино выглядеть эта строка чтобы так же передалось и ответилось ?
    С уважением.
     
  5. b707

    b707 Гуру

    так же $57$AB$15$06
     
  6. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Ответа в Мониторе - 51 15 - не видно. Может "голых" бабйт Монитор не показывает ?
     

    Вложения:

    • Term.png
      Term.png
      Размер файла:
      9,1 КБ
      Просмотров:
      117
    Последнее редактирование: 2 июн 2021
  7. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Пытаюсь заставить работать модуль на микре CH376S. Модуль слышит Ардуину, правильно отвечает.

    Код (C++):
    #define ANSWTIMEOUT 1000 // waiting for data from CH

    #include <Ch376msc.h>
    #include <SoftwareSerial.h>

    uint8_t Ch376msc::readSerDataUSB(){
       uint32_t oldMillis = millis();
         while (!_comPort->available()){ // wait until data is arrive (!_comPort->available())
           if ((millis()- oldMillis) > ANSWTIMEOUT){
             setError(CH376_ERR_TIMEOUT);
             return 0x00; // Timeout valasz
           }//end if
         }//end while
       return _comPort->read();
    }
    Байт данных от модуля приходит правильный, Это видно терминалом. Но Ардуина его не замечает. То бишь действует как при -
    (!_comPort->available()) == 1
    Соответственно выдерживает таймаут, а после таймаута выдает ошибку неполучения данных..
    Замечал по библиотекам, что конструкции с участием "->" компилируются, но не работают У МЕНЯ просто никак.
    Вопрос. Как переписать код, чтобы победить эту проблему.
     
    Последнее редактирование: 8 июн 2021
  8. akl

    akl Гуру

    для начала надо разобраться че такео _comPort и откуда оно взялось. это типа должен быть указатель на экземпляр класса SoftwareSerial или типа того.
     
    Feofan нравится это.
  9. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Это SoftSerial порт. Программа в него правильно выводит данные (отслеживаются терминалом), но не видит входящих данных (тоже отслеживаются терминалом)..
     
  10. akl

    akl Гуру

    если бы это был сам объект, то надо было бы делать _comPort.available()
    а если там ->, то это значит указатель. но по идее если бы было неправильно, то оно не компилировалось бы, так что фиг знает.
     
  11. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Заставить Монитор Порта Ардуино передать подобную запись как значения 4-х байт, а не как строку символов - не удается. Уже исчерпал фантазию. Хоть свет клином на Ардуинном мониторе не сошелся, буду признателен если кто подскажет, - ради любопытства.
     
    Последнее редактирование: 8 июн 2021
  12. b707

    b707 Гуру

    вы так и не написали. откуда там взялся _comPort и почему вы не работаетt с ним через бычную библиотеку SoftwareSerial
     
  13. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Это пример basicUsageSoftSerial из комплекта библиотеки, в котором ничего не менял. Библа сама работает через "SoftSerial". Реальный модуль "общается" с виртуальной Ардуиной (Протеус). Реагирует. Терминалы Протеуса видят команды от Ардуины модулю, видят правильные ответы модуля, но код их не видит. Не видит вообще никаких ответов. Пишет - подключите модуль.
     

    Вложения:

    Последнее редактирование: 8 июн 2021
  14. akl

    akl Гуру

    неплохо бы увидеть скетч целиком

    _comPort это указатель на поток. должен быть нацелен на софтсериал через соответствующую функцию. причем этот _comPort приватный и вроде не должен использоваться в скетче непосредственно
    https://github.com/djuseeq/Ch376msc/blob/master/src/Ch376msc.cpp
    https://github.com/djuseeq/Ch376msc/blob/master/src/Ch376msc.h

    по идее оно вообще не должно компилиться, потому что _comPort приватный. но это не точно, я по си++ еще только первые 300 страниц книжки прочитал и ничего нового не узнал, там пока почти все про обычный си идет, до классов не дошло.
     
    Последнее редактирование: 8 июн 2021
    b707 нравится это.
  15. b707

    b707 Гуру

    а где в этом коде чтение ответов?
     
  16. b707

    b707 Гуру

    приведенный в #7 кусок - это метод класса, внутри методов доступ к полям своего класса, естесственно, полный.

    Другой вопрос. нафига Ариадна полез в код библиотеки. особенно если, как я понимаю, в С++ он волокет не особо :)
     
  17. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Вот
    Партизан бояться - в лес не ходить.
    ПС. В FFT библиотеку ввел функцию выделения пиков ДТМФ. Ниче - работает отлично. Не ждать же у моря погоды. Научусь понемногу.
     

    Вложения:

    Последнее редактирование: 8 июн 2021
  18. akl

    akl Гуру

    а зачем там в сетапе while(1);?
    хотя тогда бы ваще ниче не работало.

    короче если я правильно понял что железный модуль флешки уже имеется, то предложу тупо потестить на железной ардуине
     
    Feofan нравится это.
  19. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Дико извиняюсь. Это затычка, вставил для разборок, чтобы код не сыпал в Терминалы лишнего. Поскольку модуль игнорят, нет смысла во всем остальном. Естественно ее нужно убрать.
    ПС. В FFT библе есть почти дубли - функции написанные с применением "->" и без. Причем откомментировано было, что функции без стрелки - устаревшие и не рекомендуются к применению. Когда выбирал функции с присутствием "->" - все компилилось без ошибок, работало, кроме этих функций - они просто не подавали признаков жизни. В коде в этой ветке - та же песня. Может это их компилятор Ардуины игнорит ?.
     
    Последнее редактирование: 8 июн 2021
  20. b707

    b707 Гуру

    -> - это разименование ссылок, никто этого в С++ не отменял.
    не работать эти функции могут только потому. что неправильно написаны или неверно используются