Sv-610 uart помогите с кодом!

Тема в разделе "Проводная и беспроводная связь", создана пользователем prohor-nastya, 15 дек 2020.

  1. prohor-nastya

    prohor-nastya Нерд

    Есть такие модули:
    https://drive.google.com/file/d/1wV1At9rJcVUQEyCPcBJwIaCk6AwXtw_q/view?usp=sharing
    или
    http://docs.voltbro.ru/gorocket/devices/sv610_Datasheet.pdf

    Примеров для ArduinoIDE для них нет.
    Как передать и принять данные вроде понятно, НО как зашить в них настройки не понятно.
    К этим радиомодулям идет программка и USB преобразователь, через который можно вбить настройки с ПК.
    Но нам необходимо менять канал в полевых условиях (по условию соревнований). Модуль уже будет впаян.
    В даташите есть описание команд, при подтяжке разъема S к земле, команда отправляется в Serial и назад приходит ответ типа Ок или Ошибка.
    Примеры из даташита:
    Command : Read module name and version:
    Instruction format: AA FA AA
    Return value is:“SV610_VERx.x\r\n”
    For example:
    Instruction: AA FA AA
    Return: SV610_Ver4.6 \r\n.
    Command: Set the group parameters
    Length of the command is 17 bytes, set 14 bytes of the parameters into the module, and format as follows:
    Instruction format: AA FA 03 RF Channel / RF Band / RF Rate / RF Power / Serial transmission date
    / data bits / stop bits / parity / NET ID / NODE ID
    The return is: "OK \ r \ n" or "ERROR \ r \ n"
    Подскажите пожалуйста как это записать в коде. Как отправить эти 17 байт настроек и прочитать ответ.

    Вот что я сам написал, но это явно дичь, знакомый говорит ответы надо парсить, а как это делать я не знаю. и он не знает, потому, что из под ассемблера программирует, и не знает С++.
    Пожалуйста помогите.
    Код (C++):
    #define Set  3
    #define СS   4
    byte setGrouParam[17]{AA,FA,03,14,01,01,07,03,02,01,01};
    char nameVersion ;
    char setParam ;

    void setup() {
      // put your setup code here, to run once:
      Serial.begin(9600);                  // Инициируем аппаратный последовательный порт
      Serial1.begin(9600);                 // Инициируем программный последовательный порт

      pinMode(CS, OUTPUT);                  // Переводим вывод CS модуля в режим выход
      digitalWrite(CS, HIGH);                // Назначаем выводу уровень логической единицы - включаем модуль
      delay(3000);        
      pinMode(Set, OUTPUT);                  // Переводим вывод S модуля в режим выход
      digitalWrite(S, LOW);                // Назначаем выводу уровень логического нуля
      delay(2000);
             
       nameVersion = Serial1.write(AA FA AA);
       delay(100);
       Serial.write(nameVersion);
       Serial.write('\n');
                                 
       setParam = Serial1.write(setGrouParam,sizeof(setGrouParam)); //передаем настроечные байты из массива в Serial
       delay(100);
       Serial.print("Set the group parameters is ---");
       Serial.write(setParam);

      }

    void loop() {
      // put your main code here, to run repeatedly:

    }
     
  2. parovoZZ

    parovoZZ Гуру

    Цапани к нему обычный TTL - USB и поиспражняйся прямо в командной строке.

    брат, это тупик(
     
    Рокки1945 нравится это.
  3. Рокки1945

    Рокки1945 Гуру

    Для начала надо соединиться с модулем по уарту - у тебя он есть (переходник) - и заслать стандартные команды - посмотреть что модуль отвечает - используй в ардуине иде - просмотр ком порта. После этого засылай команду на смену канала и смотри что пришло. Далее вывод для программирования садишь на вывод Ардуино - и устанавливаешь какой тебе надо логический уровень. Ну а в скетче алгоритм прост - отсылаешь команду и в цикле while ждёшь "OK" - если не пришло - ещё раз шлёшь команду. Можешь вывести светодиод - чтобы визуально наблюдать благополучный ответ от модуля. Далее перегруз и пробуй общаться по другому каналу который установил.
     
  4. prohor-nastya

    prohor-nastya Нерд

    Спасибо!
     
  5. Daniil

    Daniil Гуру

    что делает эта строка?
    Начните с приема, откройте в примерах все про Serial
     
  6. prohor-nastya

    prohor-nastya Нерд

    Наверное возвращает количество отправленных байт. Но может и нет.
    С отправкой и приемом в общих чертах уже понятно. Получилось отправить и получить от модуля ответ.
    Осталось понять как отправить в модуль 17 байт, если из документации известно:
    RF Channel = 1 - 40/ RF Rate = 0 - 9/ Serial transmission date = 0 - 9/ parity = 1 NODE ID = 00 00
    RF Band = 01 - 04 / RF Power = 0 - 7/ data bits = 1 - 3 / NET ID = 00 00 00 00

    Length of the command is 17 bytes, set 14 bytes of the parameters into the module, and format as follows:
    Instruction format: AA FA 03 RF Channel / RF Band / RF Rate / RF Power / Serial transmission date
    / data bits / stop bits / parity / NET ID / NODE ID

    У меня вызывают затруднения параметры которые в документации указаны целым числом. например, RF Rate должно равняться 3, а RF Band по документации должно равняться 01. Данные, как я понял из описания, должны отправляться в виде байт.

    Я предположил, что это может выглядеть таким образом, первые три байта это хедер, а остальное настройки.
    byte setGrouParam[17] {0xAA, 0xFA, 0x03, 0x14, 0x01 ,0x03, 0x07, 0x03, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
    Serial1.write(setGrouParam, sizeof(setGrouParam));

    Пожалуйста, подскажите, если я не правильно записал, как это будет правильно. [​IMG][​IMG][​IMG]
     
  7. Рокки1945

    Рокки1945 Гуру

    Пробуй - зачем купил малоизвестный модуль? - lora же есть nrf jdy40 hc12
     
  8. prohor-nastya

    prohor-nastya Нерд

    Это не покупка, дети участвуют в соревновании и им выдаётся набор компонентов.
     
  9. akl

    akl Гуру

    Instruction format: AA FA AA
    Return value is:“SV610_VERx.x\r\n”

    а где собственно написано что AA FA AA это 0xAA 0xFA 0xAA?
    вдруг это просто строчка "AA FA AA"?
    или уже посылалось так и он правильно отвечал?
    как уже выше писали - надо поключить его к компу и там через терминал теребонькать. ну или ардуину использовать как переходник если это леонардо.

    тогда лучше ваще забить. всё равно победят те у кого папа программист
     
    Последнее редактирование: 17 дек 2020
  10. prohor-nastya

    prohor-nastya Нерд

    Из контекста в описании модуля понятно, что это именно байты.
    Кроме того, сегодня короткие команды из 3х байт отправили и он(SV-610) ответил.

    Я только не понимаю как например 1 отправить или 3 в виде байта, я подумал, что в виде 0x01 или 0x03...

    ну и, побеждают те, кто не сдаётся...