Код (Text): #include "etherShield.h" #include "ETHER_28J60.h" int DPin3 = 3; int DPin4 = 4; int DPin5 = 5; int DPin6 = 6; int DPin7 = 7; int DPin8 = 8; int DPin9 = 9; static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; // this just needs to be unique for your network, static uint8_t ip[4] = {192, 168, 1, 100}; // IP address for the webserver static uint16_t port = 80; // Use port 80 - the standard for HTTP ETHER_28J60 e; void setup() { e.setup(mac, ip, port); pinMode(DPin3, OUTPUT); pinMode(DPin4, OUTPUT); pinMode(DPin5, OUTPUT); pinMode(DPin6, OUTPUT); pinMode(DPin7, OUTPUT); pinMode(DPin8, OUTPUT); pinMode(DPin9, OUTPUT); } void loop() { char* params; if (params = e.serviceRequest()) { e.print("<H1>JKS home</H1>"); if (strcmp(params, "?led1=on") == 0) { if (!digitalRead(DPin4)) { digitalWrite(DPin4, HIGH); } } else if (strcmp(params, "?led2=on") == 0) { if (!digitalRead(DPin5)) { digitalWrite(DPin5, HIGH); } } else if (strcmp(params, "?led3=on") == 0) { if (!digitalRead(DPin6)) { digitalWrite(DPin6, HIGH); } } else if (strcmp(params, "?led4=on") == 0) { if (!digitalRead(DPin7)) { digitalWrite(DPin7, HIGH); } } else if (strcmp(params, "?led5=on") == 0) { if (!digitalRead(DPin8)) { digitalWrite(DPin8, HIGH); } } else if (strcmp(params, "?led6=on") == 0) { if (!digitalRead(DPin9)) { digitalWrite(DPin9, HIGH); } } else if (strcmp(params, "?led7=on") == 0) { if (!digitalRead(DPin3)) { digitalWrite(DPin3, HIGH); } } else if (strcmp(params, "?led1=off") == 0)// Modified -- 2011 03 15 # Ben Schueler { if (digitalRead(DPin4)) { digitalWrite(DPin4, LOW); } } else if (strcmp(params, "?led2=off") == 0)// Modified -- 2014 03 15 # Ben Schueler { if (digitalRead(DPin5)) { digitalWrite(DPin5, LOW); } } else if (strcmp(params, "?led3=off") == 0)// Modified -- 2014 03 15 # Ben Schueler { if (digitalRead(DPin6)) { digitalWrite(DPin6, LOW); } } else if (strcmp(params, "?led4=off") == 0)// Modified -- 2014 03 15 # Ben Schueler { if (digitalRead(DPin7)) { digitalWrite(DPin7, LOW); } } else if (strcmp(params, "?led5=off") == 0) // Modified -- 2014 03 15 # Ben Schueler { if (digitalRead(DPin8)) { digitalWrite(DPin8, LOW); } } else if (strcmp(params, "?led6=off") == 0) // Modified -- 2014 03 15 # Ben Schueler { if (digitalRead(DPin9)) { digitalWrite(DPin9, LOW); } } else if (strcmp(params, "?led7=off") == 0) // Modified -- 2014 03 15 # Ben Schueler { if (digitalRead(DPin3)) { digitalWrite(DPin3, LOW); } } if (digitalRead(DPin4)) { e.print("<a href='?led1=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>Printer ON</button></a>"); } else { e.print("<a href='?led1=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>Printer OFF</button></a>"); } if (digitalRead(DPin5)) { e.print("<h1><a href='?led2=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED 2 ON</button></a><h1>"); } else { e.print("<h1><a href='?led2=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED 2 OFF</button></a><h1>"); } if (digitalRead(DPin6)) { e.print("<h1><a href='?led3=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED 3 ON</button></a><h1>"); } else { e.print("<h1><a href='?led3=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED 3 OFF</button></a><h1>"); } e.respond(); delay(50); } }
рабочий на 7 выходов, 3 веб кнопки, остальное только через адресс. Хелп, как добавить кнопок? при добавлении в таком виде то нано виснет.
Извините, немного выбыл из темы, последние 2 дня, покупал осциллограф + др у друга. Сейчас изучаю его. Попробую глянуть, но с первого взгляда, вроде норм. Даже как-то странно.
кстати на кану думал с китая осцилограф с генератором частоты в одной коробке взять, но в связи с калапсом приостановил закупки.
Попробуйте этот код, если он заработает, можно будет строить предположения Код (Text): #include "etherShield.h" #include "ETHER_28J60.h" int DPin3 = 3; int DPin4 = 4; int DPin5 = 5; int DPin6 = 6; int DPin7 = 7; int DPin8 = 8; int DPin9 = 9; static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; // this just needs to be unique for your network, static uint8_t ip[4] = {192, 168, 1, 100}; // IP address for the webserver static uint16_t port = 80; // Use port 80 - the standard for HTTP ETHER_28J60 e; void setup() { e.setup(mac, ip, port); pinMode(DPin3, OUTPUT); pinMode(DPin4, OUTPUT); pinMode(DPin5, OUTPUT); pinMode(DPin6, OUTPUT); pinMode(DPin7, OUTPUT); pinMode(DPin8, OUTPUT); pinMode(DPin9, OUTPUT); } void loop() { char* params; if (params = e.serviceRequest()) { e.print("<H1>JKS home</H1>"); if (strcmp(params, "?led1=on") == 0) { if (!digitalRead(DPin4)) { digitalWrite(DPin4, HIGH); } } else if (strcmp(params, "?led2=on") == 0) { if (!digitalRead(DPin5)) { digitalWrite(DPin5, HIGH); } } else if (strcmp(params, "?led3=on") == 0) { if (!digitalRead(DPin6)) { digitalWrite(DPin6, HIGH); } } else if (strcmp(params, "?led4=on") == 0) { if (!digitalRead(DPin7)) { digitalWrite(DPin7, HIGH); } } else if (strcmp(params, "?led5=on") == 0) { if (!digitalRead(DPin8)) { digitalWrite(DPin8, HIGH); } } else if (strcmp(params, "?led6=on") == 0) { if (!digitalRead(DPin9)) { digitalWrite(DPin9, HIGH); } } else if (strcmp(params, "?led7=on") == 0) { if (!digitalRead(DPin3)) { digitalWrite(DPin3, HIGH); } } else if (strcmp(params, "?led1=off") == 0)// Modified -- 2011 03 15 # Ben Schueler { if (digitalRead(DPin4)) { digitalWrite(DPin4, LOW); } } else if (strcmp(params, "?led2=off") == 0)// Modified -- 2014 03 15 # Ben Schueler { if (digitalRead(DPin5)) { digitalWrite(DPin5, LOW); } } else if (strcmp(params, "?led3=off") == 0)// Modified -- 2014 03 15 # Ben Schueler { if (digitalRead(DPin6)) { digitalWrite(DPin6, LOW); } } else if (strcmp(params, "?led4=off") == 0)// Modified -- 2014 03 15 # Ben Schueler { if (digitalRead(DPin7)) { digitalWrite(DPin7, LOW); } } else if (strcmp(params, "?led5=off") == 0) // Modified -- 2014 03 15 # Ben Schueler { if (digitalRead(DPin8)) { digitalWrite(DPin8, LOW); } } else if (strcmp(params, "?led6=off") == 0) // Modified -- 2014 03 15 # Ben Schueler { if (digitalRead(DPin9)) { digitalWrite(DPin9, LOW); } } else if (strcmp(params, "?led7=off") == 0) // Modified -- 2014 03 15 # Ben Schueler { if (digitalRead(DPin3)) { digitalWrite(DPin3, LOW); } } if (digitalRead(DPin4)) { e.print("<a href='?led1=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>Printer ON</button></a>"); } else { e.print("<a href='?led1=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>Printer OFF</button></a>"); } if (digitalRead(DPin5)) { e.print("<h1><a href='?led2=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED 2 ON</button></a><h1>"); } else { e.print("<h1><a href='?led2=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED 2 OFF</button></a><h1>"); } if (digitalRead(DPin6)) { e.print("<h1><a href='?led3=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED 3 ON</button></a><h1>"); } else { e.print("<h1><a href='?led3=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED 3 OFF</button></a><h1>"); } if (digitalRead(DPin6)) { e.print("<h1><a href='?led3=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED 3 ON</button></a><h1>"); } else { e.print("<h1><a href='?led3=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED 3 OFF</button></a><h1>"); } if (digitalRead(DPin6)) { e.print("<h1><a href='?led3=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED 3 ON</button></a><h1>"); } else { e.print("<h1><a href='?led3=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED 3 OFF</button></a><h1>"); } e.respond(); delay(100); } } Не боитесь, вдруг бракованный или повредят при транспортировке UPD. Это Вы о чем?
такая же ситуация с Вашим кодом, в вебке только три кнопки нажать низя, через адрес можно включить 5 выходов и потом полностью висит
Вставляйте в код вывод отладочных сообщений и анализируйте, в каком именно месте происходит зависание.
Сочувствую у самого много друзей и знакомых там. Будем исправятся. Очень странно. Все что было добавлено к Вашему последнему коду, это всего лишь кнопки. При этом я сознательно добавлял с пином 6, как проверенный. Даже не знаю, за что ухватится. Да наверно только так, можно вставлять Serial.println("0"), Serial.println("1") и т.д. Еще как вариант. Может быть дело в нестабильной библиотеки. Как вариант, попробовать поискать другие, просто ума не приложу, что может быть еще.
Код (Text): #include "etherShield.h" #include "ETHER_28J60.h" int DPin3 = 3; int DPin4 = 4; int DPin5 = 5; int DPin6 = 6; int DPin7 = 7; int DPin8 = 8; int DPin9 = 9; static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24}; // this just needs to be unique for your network, static uint8_t ip[4] = {192, 168, 1, 100}; // IP address for the webserver static uint16_t port = 80; // Use port 80 - the standard for HTTP ETHER_28J60 e; void setup() { e.setup(mac, ip, port); pinMode(DPin3, OUTPUT); pinMode(DPin4, OUTPUT); pinMode(DPin5, OUTPUT); pinMode(DPin6, OUTPUT); pinMode(DPin7, OUTPUT); pinMode(DPin8, OUTPUT); pinMode(DPin9, OUTPUT); Serial.begin(9600); } void loop() { char* params; if (params = e.serviceRequest()) { e.print("<H1>JKS home</H1>"); Serial.println("1"); if (strcmp(params, "?led1=on") == 0) { Serial.println("2"); if (!digitalRead(DPin4)) { digitalWrite(DPin4, HIGH); Serial.println("3"); } } else if (strcmp(params, "?led2=on") == 0) { Serial.println("4"); if (!digitalRead(DPin5)) { Serial.println("5"); digitalWrite(DPin5, HIGH); } } else if (strcmp(params, "?led3=on") == 0) { Serial.println("6"); if (!digitalRead(DPin6)) { Serial.println("7"); digitalWrite(DPin6, HIGH); } } else if (strcmp(params, "?led4=on") == 0) { Serial.println("8"); if (!digitalRead(DPin7)) { Serial.println("9"); digitalWrite(DPin7, HIGH); } } else if (strcmp(params, "?led5=on") == 0) { Serial.println("10"); if (!digitalRead(DPin8)) { Serial.println("11"); digitalWrite(DPin8, HIGH); } } else if (strcmp(params, "?led6=on") == 0) { Serial.println("12"); if (!digitalRead(DPin9)) { Serial.println("13"); digitalWrite(DPin9, HIGH); } } else if (strcmp(params, "?led7=on") == 0) { Serial.println("14"); if (!digitalRead(DPin3)) { Serial.println("15"); digitalWrite(DPin3, HIGH); } } else if (strcmp(params, "?led1=off") == 0)// Modified -- 2011 03 15 # Ben Schueler { Serial.println("16"); if (digitalRead(DPin4)) { Serial.println("17"); digitalWrite(DPin4, LOW); } } else if (strcmp(params, "?led2=off") == 0)// Modified -- 2014 03 15 # Ben Schueler { Serial.println("18"); if (digitalRead(DPin5)) { Serial.println("19"); digitalWrite(DPin5, LOW); } } else if (strcmp(params, "?led3=off") == 0)// Modified -- 2014 03 15 # Ben Schueler { Serial.println("20"); if (digitalRead(DPin6)) { Serial.println("21"); digitalWrite(DPin6, LOW); } } else if (strcmp(params, "?led4=off") == 0)// Modified -- 2014 03 15 # Ben Schueler { Serial.println("22"); if (digitalRead(DPin7)) { Serial.println("23"); digitalWrite(DPin7, LOW); } } else if (strcmp(params, "?led5=off") == 0) // Modified -- 2014 03 15 # Ben Schueler { Serial.println("24"); if (digitalRead(DPin8)) { Serial.println("25"); digitalWrite(DPin8, LOW); } } else if (strcmp(params, "?led6=off") == 0) // Modified -- 2014 03 15 # Ben Schueler { Serial.println("26"); if (digitalRead(DPin9)) { Serial.println("27"); digitalWrite(DPin9, LOW); } } else if (strcmp(params, "?led7=off") == 0) // Modified -- 2014 03 15 # Ben Schueler { Serial.println("28"); if (digitalRead(DPin3)) { Serial.println("29"); digitalWrite(DPin3, LOW); } } if (digitalRead(DPin4)) { Serial.println("30"); e.print("<a href='?led1=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>Printer ON</button></a>"); } else { Serial.println("31"); e.print("<a href='?led1=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>Printer OFF</button></a>"); } if (digitalRead(DPin5)) { Serial.println("32"); e.print("<h1><a href='?led2=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED 2 ON</button></a><h1>"); } else { Serial.println("33"); e.print("<h1><a href='?led2=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED 2 OFF</button></a><h1>"); } if (digitalRead(DPin6)) { Serial.println("34"); e.print("<h1><a href='?led3=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED 3 ON</button></a><h1>"); } else { Serial.println("35"); e.print("<h1><a href='?led3=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED 3 OFF</button></a><h1>"); } if (digitalRead(DPin6)) { Serial.println("36"); e.print("<h1><a href='?led3=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED 3 ON</button></a><h1>"); } else { Serial.println("37"); e.print("<h1><a href='?led3=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED 3 OFF</button></a><h1>"); } if (digitalRead(DPin6)) { Serial.println("38"); e.print("<h1><a href='?led3=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>LED 3 ON</button></a><h1>"); } else { Serial.println("39"); e.print("<h1><a href='?led3=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>LED 3 OFF</button></a><h1>"); } e.respond(); Serial.println("40"); delay(100); } Serial.println("41"); delay(40); }
Заливаете код, открываете монитор порта. Открываете страницу в браузере. И смотрите, что приходит. Если ардуина повиснет, то передача прекратится. По цифрам, можно увидеть последнюю операцию, которая прошла успешно. Это общая схема отладки, но ступил, спасибо Megakoteyka напомнил. Включается сериал Serial.begin(9600); в setup и потом после каждой операции прописывается Serial.println с цифрой к примеру, для понимания, где происходит остановка. UPD. В Serial.println можно так же вставлять переменные, константы и тем самым проверять их значения. Не удобный, но все же способ отладки. Сам ищу нормальный как в C#. Но, все что нашел, только под AVR на котом построены почти все ардуины, но там знаний пока не хватает.
Можно выводить разбираемую строку и вставлять в ветки условий вывод строчек с описанием сработавшего условия. Просто "0" и "1" не особо информативно, лучше "что-то случилось". Есть классический подход к отладке программ с использованием условной компиляции. В начале программы определяем метку DEBUG Код (Text): #define DEBUG В "интересных" местах кода вставляем Код (Text): #if(DEBUG) Serial.println("программа сделала то-то и то-то"); #endif Теперь мы можем просматривать лог работы программы в мониторе последовательного порта. Если закомментируем объявление метки DEBUG, компилятор пропустит весь код, находящийся между #if(DEBUG) и #endif и мы получим версию программы без логов.
Открываете страницу в браузере, я не правильно выразился. Сделайте запрос, попробуйте включить какой-то пин