Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
| products:laboratory_iot_c:exp63 [2024/12/06 22:10] – создано labuser30 | products:laboratory_iot_c:exp63 [2024/12/06 22:44] (текущий) – [Программный код эксперимента] labuser30 | ||
|---|---|---|---|
| Строка 12: | Строка 12: | ||
| {{ : | {{ : | ||
| - | Поэтому нам необходимо конвертировать цвет из формата записи в HTML в наш формат трех чисел от 0 до 1023. | + | Поэтому нам необходимо конвертировать цвет из формата записи в HTML в наш формат трех чисел от 0 до 255. |
| ==== Схема эксперимента ==== | ==== Схема эксперимента ==== | ||
| Строка 33: | Строка 33: | ||
| </ | </ | ||
| </ | </ | ||
| - | |||
| - | <WRAP center round important 60%> | ||
| - | Сохрани эту страницу в корне файловой системы микроконтроллера под именем color.html | ||
| - | </ | ||
| Код программы: | Код программы: | ||
| Строка 53: | Строка 49: | ||
| void indexPage() { | void indexPage() { | ||
| - | String html_color = " | + | String html_color = "#4AD686"; |
| if (server.hasArg(" | if (server.hasArg(" | ||
| - | | + | |
| - | int duty_r = number >> 16; | + | int duty_g = strtol(html_color.substring(3,5).c_str(), NULL, 16); |
| - | int duty_g = number >> 8 & 0xFF; | + | |
| - | int duty_b = number & 0xFF; | + | |
| - | + | ||
| - | Serial.println(html_color); | + | |
| - | Serial.println(duty_r); | + | |
| - | | + | |
| - | Serial.println(duty_b); | + | |
| analogWrite(PIN_LED_R, | analogWrite(PIN_LED_R, | ||
| analogWrite(PIN_LED_G, | analogWrite(PIN_LED_G, | ||
| Строка 119: | Строка 109: | ||
| <WRAP center round important 60%> | <WRAP center round important 60%> | ||
| - | Первым делом в коде программы нужно заменить '' | + | Первым делом в коде программы нужно заменить '' |
| </ | </ | ||
| - | Рассмотрим алгоритм преобразования цвета. Веб форма отправляет на наш сервер цвет в формате #FFFFFF. При этом символ # трансформируется в код символа %23. Поэтому в программе | + | Рассмотрим алгоритм преобразования цвета. Веб форма отправляет на наш сервер цвет в формате #FFFFFF и получает аналогичный ответ. |
| - | <code python[enable_line_numbers=" | + | |
| - | html_color = params[' | + | |
| - | </ | + | |
| - | Теперь в переменной '' | + | < |
| - | < | + | |
| - | | + | if (server.hasArg(" |
| - | g = html_color[2:4] | + | |
| - | b = html_color[4: | + | |
| </ | </ | ||
| - | Теперь в переменных r, g и b у нас | + | Теперь в переменной '' |
| + | Для получения нужной пары | ||
| - | < | + | < |
| - | r = int(r, 16) | + | int duty_r = strtol(html_color.substring(1, |
| - | g = int(g, 16) | + | int duty_g = strtol(html_color.substring(3, |
| - | b = int(b, 16) | + | int duty_b = strtol(html_color.substring(5).c_str(), |
| </ | </ | ||
| - | Теперь мы получили три числа, которые могут быть | + | Теперь мы имеем данные для управления ШИМ |
| - | <code python[enable_line_numbers=" | + | <code python[enable_line_numbers=" |
| - | r = int(r * 1023 / 255) | + | |
| - | g = int(g * 1023 / 255) | + | |
| - | b = int(b * 1023 / 255) | + | |
| </ | </ | ||
| - | Теперь мы имеем данные для управления ШИМ сигналом светодиода. Остается только не забыть, | + | При выводе страницы в браузер мы должны заменить метку в шаблоне страницы на актуальный цвет. |
| - | <code python[enable_line_numbers=" | + | < |
| - | LedR.duty(1023-r) | + | page.replace("< |
| - | LedG.duty(1023-g) | + | |
| - | LedB.duty(1023-b) | + | |
| - | </ | + | |
| - | + | ||
| - | При выводе страницы в браузер мы должны заменить метку в шаблоне страницы на актуальный цвет, но в формате HTML. | + | |
| - | < | + | |
| - | html = html.replace('< | + | |
| </ | </ | ||