Можно ли добавить кнопки?
- Войдите на сайт для отправки комментариев
Пнд, 21/12/2020 - 20:10
Хочу доработать скетч бегущей строки на ESP8266,
#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> #include <SPI.h> // эти две библиотеки нужно скачать под роликом иначе кирилица работать не будет. #include <Adafruit_GFX.h> #include <Max72xxPanel.h> /// подкючение матрицы // VCC - 5V // GND - GND :) // DIN - IO13 - d7 // CS - IO15 - d8 (можно переназначить) // CLK - IO14 - d5 const char* ssid = "drevo"; const char* pwd = "vika99999"; // пароль для WiFi точки ESP8266WebServer server(80); // 192.168.4.1 // количество и подключение матриц, в моем случае матриы подключены в 4 строки по 1 в каждой строке... видимо под иероглифы Max72xxPanel matrix = Max72xxPanel(15, 1, 4);// тут можно переназначить CS, в данный момент - io15 unsigned long ticker_next; String tape = "z"; int spacer = 1; int width = 5 + spacer; const char page[] = "<html>" "<meta charset=\"utf-8\">" "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">" "<title>Ticker control</title>" "<body>" "<form action=\"\" method=\"post\">" "<input type=\"text\" name=\"text\"/>" "<input type=\"submit\" value=\"Set text\">" "</form>" "</body>" "</html>"; String utf8rus(String source){ int i,k; String target; unsigned char n; char m[2] = { '0', '\0' }; k = source.length(); i = 0; while (i < k) { n = source[i]; i++; if (n >= 0xC0) { switch (n) { case 0xD0: { n = source[i]; i++; if (n == 0x81) { n = 0xA8; break; } if (n >= 0x90 && n <= 0xBF) n = n + 0x2F; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB7; break; } if (n >= 0x80 && n <= 0x8F) n = n + 0x6F; break; } } } // switch m[0] = n; target = target + String(m); } return target; } void handleSubmit() { tape = utf8rus(server.arg("text")); server.send(200, "text/html", page); } void handleRoot() { if (server.hasArg("text")) { handleSubmit(); } else { server.send(200, "text/html", page); } } void setup(void) { tape = utf8rus("я");// текст по деволту delay(1000); WiFi.softAP(ssid, pwd); server.on("/", handleRoot); server.begin(); matrix.setIntensity(7); // яркость матрицы от 0 до 15 matrix.setRotation(matrix.getRotation()+1); // направление движения. 1 - 90 2 - 180 3 - 270 } void handleTicker() { for ( int i = 0 ; i < width * tape.length() + matrix.width() - 1 - spacer; i++ ) { matrix.fillScreen(LOW); int letter = i / width; int x = (matrix.width() - 1) - i % width; int y = (matrix.height() - 8) / 2; while ( x + width - spacer >= 0 && letter >= 0 ) { if ( letter < tape.length() ) { matrix.drawChar(x, y, tape[letter], HIGH, LOW, 1); server.handleClient(); } letter--; x -= width; } matrix.write(); delay(50); } } void loop(void) { server.handleClient(); handleTicker(); }
чтобы в нем менялись значения (скорость и яркость)
Рассматривая несколько вариантов:
1. Через интерфейс на той же странице с использованием ползунков.
2. Кнопок +/-
3. Обычных кнопок, припаянных к выводам.
Константы, которые нужно заменить переменными, я уже нашел!
Для яркости
matrix.setIntensity(7); // яркость матрицы от 0 до 15
Для скорости (время задержки)
matrix.write();
delay(50); // задержка
uint8_t light=5; // яркость матрицы от 0 до 15 matrix.setIntensity(light); uint16_t interval=50; // задержка delay(interval);
Функции для изменения уже написал
uint8_t changeLight{ // для яркости if (light > 1 && light < 16) { // ограничение if (button1)light++; if (button2)light--; } return light; } uint16_t changeSpeed(){ // для скорости if (interval > 20 && interval < 100) { // ограничение if (button3)interval+=10; if (button4)interval-=10; } return interval; }
Помогите пожалуйста разобраться, как их "прикрутить"?
И что мешает вставить их в цикл loop()?
Там всего одна кнопка "Set text". Работает она с формой отправки запроса методом POST? Я правильно понял?
а вот функции
Если сервер получил аргумент "text", выполняется преобразование текста и он присваивается переменной "tape"?
Наверно вызов функций изменения яркости и скорости нужно тоже запихнуть в handleRoot() ? Или нет?
Я думаю, что кнопки добавить можно...
Но лучше у Клапауция спросить.
Наконец-то добавил кнопки! Работает, так как и хотел!
Кому интересно, можете оценить код:
Спасибо всем, кто помог!