Помощь подключить кнопку к имеющемуся скетчу
- Войдите на сайт для отправки комментариев
Пнд, 06/02/2017 - 20:36
Доброго времени суток ардуинщики, второй день мучаюсь над вопросом о подключении кнопки к моему скетчу!
Помогите пожалуйста, как вписать код с кнопкой в скетч, к примеру у меня уже подключена кнопка (на пин 10) в скетче я могу управлять светодиодами (pin 6,7,8,9) но очень хотелось бы к примеру (пусть это будет pin 6) включать pin 6 через web-интерфейс а выключать с кнопки и обратно!
Прикрепляю код, буду очень признателен если обьясните мне подробно или вдруг найдутся заметки по улучшению кода в плане компактности буду тоже очень признателен!
/* Ethernet Web Server Управление реле при нажатии кнопки on/off (вводе разных URL адресов) в браузере Адрес включения светодиода: IP-АДРЕС - тот IP, полученный при запуске примера DhcpAdressPrinter <a href="/$1">http://IP-АДРЕС/$1</a> Для того, чтобы выключить: <a href="/$2">http://IP-АДРЕС/$2</a> и так далее.... */ #include <EEPROM.h> //библиотека энергонезависимой памяти #include <SPI.h> //библиотека для работы с SPI #include <Ethernet.h> //библиотека для работы с Ethernet boolean newInfo = 0; //переменная для новой информации //MAC адрес вашего Ethernet-модуля, если его у вас нет, введите любой //или оставьте тот, что в примере (если не работает вставте сюда свой MAC адресс byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //указываем IP адрес //будьте внимательны! IP адрес указывается тот, который вы получили запустив пример DhcpAdressPrinter IPAddress ip(192, 168, 0, 99); //пример МОЕГО IP адреса, вы вводите сюда СВОЙ //инифиализация библиотеки Ethernet server library EthernetServer server(80); int i; //Для циклов for void setup() { pinMode(1, OUTPUT); //инициализируем 7 пин как выход для реле pinMode(6, OUTPUT); //инициализируем 7 пин как выход для реле pinMode(7, OUTPUT); //инициализируем 7 пин как выход для реле pinMode(8, OUTPUT); //инициализируем 8 пин как выход для реле pinMode(9, OUTPUT); //инициализируем 9 пин как выход для реле if ( EEPROM.read(4) ) {digitalWrite(6, HIGH);} else {digitalWrite(6, LOW);} //проверяем состояние 6 реле и возвращаем его состояние if ( EEPROM.read(3) ) {digitalWrite(7, HIGH);} else {digitalWrite(7, LOW);} //проверяем состояние 7 реле и возвращаем его состояние if ( EEPROM.read(1) ) {digitalWrite(8, HIGH);} else {digitalWrite(8, LOW);} //проверяем состояние 8 реле и возвращаем его состояние if ( EEPROM.read(2) ) {digitalWrite(9, HIGH);} else {digitalWrite(9, LOW);} //проверяем состояние 9 реле и возвращаем его состояние //запускаем сервер с указанными ранее MAC и вашим IP Ethernet.begin(mac, ip); server.begin(); Serial.begin(9600); } void loop() { //принимаем данные, посылаемые клиентом EthernetClient client = server.available(); if (client) { //если запрос оканчивается пустой строкой boolean currentLineIsBlank = true; //ставим метку об окончании запроса (дословно: текущая линия чиста) while (client.connected()) { //пока есть соединение с клиентом if (client.available()) { //если клиент активен char c = client.read(); //считываем посылаемую информацию в переменную "с" if (newInfo && c == ' ') { //если переменная новой информации = 1 и "с", в которой записан запрос, равен пустой строке newInfo = 0; //то обнуляем переменную поступления новой информации } if (c == '$') { //если переменная "с", несущая отправленный нам запрос, содержит символ $ //(все новые запросы) - "$" подразумевает разделение получаемой информации (символов) newInfo = 1; //то пришла новая информация, ставим метку новой информации в 1 } /************************************************************************************************ Примечание: Символ $ используется как обычный символ, который разделяет 1 от 2 и так далее... На практике применяют символ &, который разделяет новые переменные от последующих Это использьуется, например, в GET-запросах, которые выглядят подобным образом: client.print("GET /controlbar/wp-content/data.php?uid=" + ID + "&type=" + type + "&value=" + value); как видите, знак & разделяет значение переменной - ID и переменную type ***************************************************************************************************/ //Проверяем содержание URL - присутствует $1 или $2 Реле №1 if (newInfo == 1) { //если есть новая информация Serial.println(c); if (c == '2') { //и "с" содержит 2 Serial.println("ON"); digitalWrite(8, HIGH); //гасим реле EEPROM.write(1, 1); //записываем данные о выключенном реле } if (c == '1') { //если "с" содержит 1 Serial.println("OFF"); digitalWrite(8, LOW); //то зажигаем реле EEPROM.write(1, 0); //записываем данные о включенном реле } } //Проверяем содержание URL - присутствует $3 или $4 Реле №2 if (newInfo == 1) { //если есть новая информация Serial.println(c); if (c == '4') { //и "с" содержит 4 Serial.println("ON"); digitalWrite(9, HIGH); //гасим реле EEPROM.write(2, 1); //записываем данные о выключенном реле } if (c == '3') { //если "с" содержит 3 Serial.println("OFF"); digitalWrite(9, LOW); //то зажигаем реле EEPROM.write(2, 0); //записываем данные о включенном реле } } //Проверяем содержание URL - присутствует $5 или $6 Реле №3 if (newInfo == 1) { //если есть новая информация Serial.println(c); if (c == '6') { //и "с" содержит 6 Serial.println("ON"); digitalWrite(7, HIGH); //гасим реле EEPROM.write(3, 1); //записываем данные о выключенном реле } if (c == '5') { //если "с" содержит 5 Serial.println("OFF"); digitalWrite(7, LOW); //то зажигаем реле EEPROM.write(3, 0); //записываем данные о включенном реле } } //Проверяем содержание URL - присутствует $7 или $8 Реле №4 if (newInfo == 1) { //если есть новая информация Serial.println(c); if (c == '8') { //и "с" содержит 8 Serial.println("ON"); digitalWrite(6, HIGH); //гасим реле EEPROM.write(4, 1); //записываем данные о выключенном реле } if (c == '7') { //если "с" содержит 7 Serial.println("OFF"); digitalWrite(6, LOW); //то зажигаем реле EEPROM.write(4, 0); //записываем данные о включенном реле } } if (c == '\n') { //если "с" равен символу новой строки currentLineIsBlank = true; //то начинаем новую строку } else if (c != '\r') { //иначе, если "с" не равен символу возврата курсора на начало строки currentLineIsBlank = false; //то получаем символ на текущей строке } if (c == '\n' && currentLineIsBlank) { //выводим HTML страницу // ==============================================Формируем HTML-страницу================================================= client.println("HTTP/1.1 200 OK"); //заголовочная информация client.println("Content-Type: text/html; charset=utf-8"); //тип и кодировка страницы client.println("Connection: close"); client.println("Refresh: 30"); //автоматическое обновление каждые 30 сек (можно выставить любое удобное в секундах client.println(); client.println("<!DOCTYPE HTML>"); //HTML тип документа //===============================================Вывод значений на Web-страницу============================ client.println("<html>"); //открытие тега HTML client.print("<title>Arduino Web Server</title>"); //название страницы client.print("<body>"); client.print("<H1>Управление освещением через Реле</H1>"); //заголовк на странице client.println("=============================="); //линия из символов = client.println("<br />"); //Переходим на новую строку // Далее идут кнопки... client.print("<table border=\"1\">"); client.println("<tr>"); client.println("<th>Выходы</th>"); client.println("<th>Состояние</th>"); client.println("</tr>"); client.println("<tr>"); client.println("<td>"); client.print("<div><center>pin 6</center></div>"); client.print("<a href=\"/$8\"><button>On</button></a>"); client.print("<a href=\"/$7\"><button>Off</button></a>"); client.println("</td>"); if ( EEPROM.read(4) ) {client.println("<td>Включено</td>");} else {client.println("<td>Выключено</td>");} client.println("</tr>"); client.println("<tr>"); client.println("<td>"); client.print("<div><center>pin 7</center></div>"); client.print("<a href=\"/$6\"><button>On</button></a>"); client.print("<a href=\"/$5\"><button>Off</button></a>"); client.println("</td>"); if ( EEPROM.read(3) ) {client.println("<td>Включено</td>");} else {client.println("<td>Выключено</td>");} client.println("</tr>"); client.println("<tr>"); client.println("<td>"); client.print("<div><center>pin 8</center></div>"); client.print("<a href=\"/$2\"><button>On</button></a>"); client.print("<a href=\"/$1\"><button>Off</button></a>"); client.println("</td>"); if ( EEPROM.read(1) ) {client.println("<td>Включено</td>");} else {client.println("<td>Выключено</td>");} client.println("</tr>"); client.print("<tr>"); client.print("<td>"); client.print("<div><center>pin 9</center></div>"); client.print("<a href=\"/$4\"><button>On</button></a>"); client.print("<a href=\"/$3\"><button>Off</button></a>"); client.print("</td>"); if ( EEPROM.read(2) ) {client.println("<td>Включено</td>");} else {client.println("<td>Выключено</td>");} client.print("</tr>"); client.println("</table>"); client.println("<br />"); client.print("<a href=\"/$7\&/$5\&/$1\&/$3\"><button>Выключить все</button></a>"); client.println("<br />"); client.println("<br />"); client.print("<a href=\"/$8\&/$6\&/$2\&/$4\"><button>Включить все</button></a>"); client.println("</body>"); client.println("</html>"); //закрываем тег HTML break; //выход из цикла } } } delay(1); //время на получение новых данных client.stop(); //закрываем соеднение } }
к моему скетчу!
Точно, не к чужому? Был бы Ваш скетч такого размера, уж кнопку бы как-нибудь подключили бы.
второй день мучаюсь
Ну, и зачем так сразу сдаваться? Помучайтесь хотя бы недельку, мож чего и получится, заодно и научитесь. Что ж Вы как младенец, только-только обозначилась проблема, сразу "Вя-я-я, давай сиську!". Будьте мужчиной, работайте, решайте проблемы.
Евгений, да скетч изначально я взял на просторах интернета, скетч был совсем прост, с помощью него можно было управлять только одной реле, без проверки на состояние, без записи в енергонезависимую память, так же в скетче не было управления через web, я переделал этот скетч, пусть правда немного коряво, но мне сейчас не до его усовершенствования до красивого вида, я не на выставку его готовлю! Поэтому у меня есть право называть его моим скетчем, особенно в данном случае. Где вы видели что я написал что-то подобное типа "Я сдаюсь я не могу ничего сделать, все бросаю это дело" Я попросил помощи у более опытных людей. Я конечно рад что меня критикуют, пусть даже такой как вы, но все же, есть стимул. А если вы можете только критиковать а не помогать людям, то можете идти!
Я с Вашего позволения (или без оного) сам буду решать молу ли я идти, или не могу, и куда именно.