Есть такие модули: 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: }
Для начала надо соединиться с модулем по уарту - у тебя он есть (переходник) - и заслать стандартные команды - посмотреть что модуль отвечает - используй в ардуине иде - просмотр ком порта. После этого засылай команду на смену канала и смотри что пришло. Далее вывод для программирования садишь на вывод Ардуино - и устанавливаешь какой тебе надо логический уровень. Ну а в скетче алгоритм прост - отсылаешь команду и в цикле while ждёшь "OK" - если не пришло - ещё раз шлёшь команду. Можешь вывести светодиод - чтобы визуально наблюдать благополучный ответ от модуля. Далее перегруз и пробуй общаться по другому каналу который установил.
Наверное возвращает количество отправленных байт. Но может и нет. С отправкой и приемом в общих чертах уже понятно. Получилось отправить и получить от модуля ответ. Осталось понять как отправить в модуль 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)); Пожалуйста, подскажите, если я не правильно записал, как это будет правильно.
Instruction format: AA FA AA Return value is:“SV610_VERx.x\r\n” а где собственно написано что AA FA AA это 0xAA 0xFA 0xAA? вдруг это просто строчка "AA FA AA"? или уже посылалось так и он правильно отвечал? как уже выше писали - надо поключить его к компу и там через терминал теребонькать. ну или ардуину использовать как переходник если это леонардо. тогда лучше ваще забить. всё равно победят те у кого папа программист
Из контекста в описании модуля понятно, что это именно байты. Кроме того, сегодня короткие команды из 3х байт отправили и он(SV-610) ответил. Я только не понимаю как например 1 отправить или 3 в виде байта, я подумал, что в виде 0x01 или 0x03... ну и, побеждают те, кто не сдаётся...