Контроль скорости бесщеточного двигателя постоянного тока
Я не могу понять код управления скоростью бесщеточного двигателя постоянного тока с помощью WiFi-модуля ESP8266.
Я нашел его на https://ubidots.com. /блог/управление-скоростью-для-бесщеточных-двигателей-с-ан-esp8266-2/
То, что я не могу понять, это-
float btof(byte * payload, unsigned int length) { char * demo = (char *) malloc (sizeof (char) * 10); for (int i = 0; i < длина; i++) { демо[i] = полезная нагрузка[i]; } плавающее значение = atof (демо); бесплатно (демо); возвращаемое значение; } // Обратный вызов для обработки подписки обратный вызов void (тема char*, полезная нагрузка byte*, длина беззнакового целого числа) { значение = btof (полезная нагрузка, длина); значение = карта (значение, 0, 1023, 0, 180); // Сопоставьте значения 0-100 с ползунка с 0-180, чтобы использовать библиотеку сервоприводов. ESC.записать (значение); //Отправляем значение (PWM) в ESC }
Пожалуйста, помогите мне с кодом!
@laks929, 👍0
Обсуждение1 ответ
Лучший ответ:
Функция обратного вызова
должна передавать данные с сервера на ESP.Полезная нагрузка
– это байт данных, отправленный с сервера.Длина
– это размер данных в байтах.BTOF
— это преобразователь байтов в числа с плавающей запятой, который преобразует все полученные байты данных в одну переменную с плавающей запятой и возвращает это значение с плавающей запятой.ECS.write
должна быть функцией, которая записывает значение в микросхему Н-моста контроллера серводвигателя. Он принадлежит сервобиблиотеке.- Диапазон значений, которые можно сопоставить с этим файлом ECS.write, находится в диапазоне от 0 до 180, поэтому функция
map
будет использовать его для преобразованияданных с плавающей запятой
, полученных от. функция btof
. - Основное определение функции
map()
:
Функция сопоставления
сопоставляет число из одного диапазона с другим. То есть значение fromLow будет сопоставлено с toLow, значение fromHigh — с toHigh, промежуточные значения — с промежуточными значениями и т. д.
Не ограничивает значения в пределах диапазона, поскольку значения вне диапазона иногда являются предполагаемыми и полезными. Функцию constrain() можно использовать до или после этой функции, если желательны ограничения диапазонов.
Обратите внимание, что «нижние границы» любого диапазона могут быть больше или меньше «верхних границ», поэтому функцию map() можно использовать для обращения диапазона чисел.
Синтаксис:
map(value, fromLow, fromHigh, toLow, toHigh)
Затем ECS.write(value)
запишет сопоставленное значение в H-Bridge контроллера сервопривода.
Хорошо, большое спасибо, что прояснили большую часть этого. Тем не менее, у меня мало сомнений- 1)char * demo = (char *) malloc(sizeof(char) * 10);
Значение этой строки. 2) Является ли полезная нагрузка определенной функцией? Какой библиотеке он принадлежит? (3) Также я хотел бы узнать о функции подписки и клиенте в коде: client.begin(callback);
client.ubidotsSubscribe(DEVICE_LABEL, VARIABLE);
, @laks929
В этом случае вам нужно поделиться своим полным эскизом здесь. 1. char * demo = (char *) malloc(sizeof(char) * 10);
**Значение этой строки**. Вам следует прояснить свои основные понятия C. При этом вы назначаете некоторое пространство памяти этому указателю char размером 10 байт;, @Vaibhav
Полный эскиз здесь по ссылке- https://ubidots.com/blog/speed-control-for-brushless-motors-with-an-esp8266-2/, @laks929
Полезная нагрузка — это указатель массива байтового типа. Это объявлено в библиотеке ESP8266. Остальное — это особенности протокола связи TCP. Вам следует изучить, как работает протокол TCP. Концепция клиентского сервера, что такое публикация и подписка, а также HTTP-запрос Post and Get. Тогда вы будете знать об этих функциях лучше., @Vaibhav
Хорошо, спасибо большое!!, @laks929
Было бы здорово с вашей стороны, сэр, если бы вы также предоставили несколько полезных ресурсов, если они у вас есть?, @laks929
это простой документ, в котором рассказывается об esp8266 и содержится ссылка на другие протоколы, а также [документ](https://tttapa.github.io/ESP8266/Chap05%20-%20Network%20Protocols.html)., @Vaibhav
Большое спасибо, сэр, за помощь! :), @laks929
- Как читать и записывать EEPROM в ESP8266
- Как исправить: Invalid conversion from 'const char*' to 'char*' [-fpermissive]
- ошибка: espcomm_upload_mem failed при загрузке скетча
- Как определить размер Flash?
- Несколько клиентских серверов через Wi-Fi
- Передача функции-члена класса в качестве аргумента
- В ESP-12E NodeMCU, какой выход PIN A0?
- Esp8266 Vin контакт
Какой аспект кода вы не можете понять? Без конкретики трудно вам помочь., @MichaelT
Вся созданная функция btof и обратного вызова. Зачем они были созданы, какова полезная нагрузка и длина, почему мы создаем btof и функцию обратного вызова, какова логика, лежащая в основе этого, и как они связаны с управлением скоростью бесщеточного двигателя постоянного тока., @laks929