Прошу помощи в анализе проблемы

smoker_vvo
Offline
Зарегистрирован: 14.02.2013

Доброго всем времени, Уважаемые.

Прошу оказать помощь в поиске ошибок в скетче.

Суть проблемы:

Имеется Arduina Mega 2650, Eth Sh W5100 и желание собрать некое подобие "полуумного дома".

Что сделано: с помощью рук, головы и Интернета написан код, который до определенного времени работал, но в процессе реализации "хотелок" он, код, стал давать сбои.

1. Почему то при "совпадении" номеров PIN (такого типа 3, 23, 33) начинают срабатывать несколько "кнопок".

2. В приложенном коде, есть закомментированные строки, в этом случае код грузится и все работает, но если снять комметы - код грузится - но ни чего не происходит, даже не удается зайдти на страницу, хотя сам шилд пингуется.

3. Возможно код написан сумбурно, прошу строго не судить - StartUp.

Собственно сам "больной"

/*

Original Version by Poldi
modified by Katsu
the functions readString.append() and readString.contains() where replaced
*/
#include <SPI.h>  // insert by Katsu
//#include <WString.h> removed by Katsu yt не трогаем
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  // entspricht einer MAC von 84.85.88.16.0.36
byte ip[]  = { 192, 168, 0, 89 };                  // IP-Adresse
byte gateway[] = { 192, 168, 0, 1 };                // Gateway
byte subnet[]  = { 255, 255, 255, 0 };
// Датчик температуры DS18B20 подключен на 9 пин Arduino
#define ONE_WIRE_BUS 9
// Инициализация 1-ware
OneWire oneWire(ONE_WIRE_BUS);
EthernetServer server(80);
DallasTemperature sensors(&oneWire);
//----------Outdoor--------
int Pin3 = 3;
int Pin4 = 4;
int Pin5 = 5;
int Pin6 = 6;
//----------1-st floor--------
int Pin22 = 22;
int Pin27 = 27;
int Pin28 = 28;
int Pin29 = 29;
//------------Grelki---------
int Pin30 = 30; // Зал
int Pin31 = 31; // Спальня
int Pin32 = 32; // Кухня
//----------2-d floor--------
//int Pin_33 = 33; //2-d floor
//int Pin_34 = 34; //2-d spalnya
//int Pin_35 = 35; //2-d kladovka
//int Pin_36 = 36; //garag

String readString = String(100);      // string for fetching data from address
//----------Outdoor--------
boolean Pin3ON = false;                  // Status flag
boolean Pin4ON = false;
boolean Pin5ON = false;                  // Status flag
boolean Pin6ON = false;
//----------1-st floor--------
boolean Pin22ON = false;                  // Status flag
boolean Pin27ON = false;
boolean Pin28ON = false;                  // Status flag
boolean Pin29ON = false;
//------------Grelki---------
boolean Pin30ON = false;
boolean Pin31ON = false;
boolean Pin32ON = false;
//----------2-d floor--------
//boolean Pin_33ON = false;
//boolean Pin_34ON = false;
//boolean Pin_35ON = false;
//boolean Pin_36ON = false;


void setup(){
  
// Инициализация the sensor library
sensors.begin();
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
//----------Outdoor--------
pinMode(Pin3, OUTPUT);
pinMode(Pin4, OUTPUT);
pinMode(Pin5, OUTPUT);
pinMode(Pin6, OUTPUT);
//----------1-st floor--------
pinMode(Pin22, OUTPUT);
pinMode(Pin27, OUTPUT);
pinMode(Pin28, OUTPUT);
pinMode(Pin29, OUTPUT);
//------------Grelki---------
pinMode(Pin30,OUTPUT);
pinMode(Pin31,OUTPUT);
pinMode(Pin32,OUTPUT);
//------------2-d floor---------
//pinMode(Pin_33, OUTPUT);
//pinMode(Pin_34, OUTPUT);
//pinMode(Pin_35, OUTPUT);
//pinMode(Pin_36, OUTPUT);

Serial.begin(9600); 
}

void loop(){
  char b = 176;
  sensors.requestTemperatures(); // Send the command to get temperatures
// Create a client connection
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
//read char by char HTTP request
if (readString.length() < 100) {
//store characters to string
// readString.append(c);  removed by Katsu
readString = readString + c; // insert by Katsu
// very simple but it works...
}
Serial.print(c);  //output chars to serial port
if (c == '\n') {  //if HTTP request has ended
// readString.contains() replaced with readString.indexOf(val) > -1  by Katsu
// indexOf locates a character or String within another String.
// Returns the index of val within the String, or -1 if not found.

//---------------------Controll Grelki Start---------------------------

float celsius;
celsius = sensors.getTempCByIndex(2);
  //fahrenheit = celsius * 1.8 + 32.0;
  Serial.println("  Temperature Zal = ");
  Serial.print(celsius);
  Serial.println(" C ");
if (celsius <22 && celsius <30){
  digitalWrite(Pin30, HIGH);
  Serial.println("Rellay 30 ON");
  Pin30ON=true;
}
else
{
  digitalWrite(Pin30, LOW);
  Serial.println("Rellay 30 OFF");
  Pin30ON=false;
}
celsius = sensors.getTempCByIndex(0);
  //fahrenheit = celsius * 1.8 + 32.0;
  Serial.println("  Temperature Spalnya = ");
  Serial.print(celsius);
  Serial.println(" C ");
if (celsius >20 && celsius <24){
  digitalWrite(Pin31, HIGH);
  Serial.println("Rellay 31 ON");
  Pin31ON=true;
}
else
{
  digitalWrite(Pin31, LOW);
  Serial.println("Rellay 31 OFF");
  Pin31ON=false;
}
celsius = sensors.getTempCByIndex(1);
  //fahrenheit = celsius * 1.8 + 32.0;
  Serial.println("  Temperature Kuhnya = ");
  Serial.print(celsius);
  Serial.println(" C ");
if (celsius < 22){
  digitalWrite(Pin32, HIGH);
  Serial.println("Rellay 32 ON");
  Pin32ON=true;
}
else
{
  digitalWrite(Pin32, LOW);
  Serial.println("Rellay 32 OFF");
  Pin32ON=false;
}
//---------------------Controll Grelki End---------------------------

//----------------Button Outside-------------------------------------
if(readString.indexOf("3=ON") > -1) {
 digitalWrite(Pin3, HIGH);
 Serial.println("Pin 3 eingeschaltet!");
 Pin3ON = true;
}
if(readString.indexOf("3=OFF") > -1){
 digitalWrite(Pin3, LOW);
 Serial.println("Pin 3 ausgeschaltet!");
 Pin3ON = false;
}
if(readString.indexOf("4=ON") > -1) {
 digitalWrite(Pin4, HIGH);
 Serial.println("Pin 4 eingeschaltet!");
 Pin4ON = true;
}
if(readString.indexOf("4=OFF") > -1){
 digitalWrite(Pin4, LOW);
 Serial.println("Pin 4 ausgeschaltet!");
 Pin4ON = false;
}
if(readString.indexOf("5=ON") > -1) {
 digitalWrite(Pin5, HIGH);
 Serial.println("Pin 5 eingeschaltet!");
 Pin5ON = true;
}
if(readString.indexOf("5=OFF") > -1){
 digitalWrite(Pin5, LOW);
 Serial.println("Pin 5 ausgeschaltet!");
 Pin5ON = false;
}
if(readString.indexOf("6=ON") > -1) {
 digitalWrite(Pin6, HIGH);
 Serial.println("Pin 6 eingeschaltet!");
 Pin6ON = true;
}
if(readString.indexOf("6=OFF") > -1){
 digitalWrite(Pin6, LOW);
 Serial.println("Pin 6 ausgeschaltet!");
 Pin6ON = false;
}

//----------------Button 1-st floor-------------------------------------
if(readString.indexOf("22=ON") > -1) {
 digitalWrite(Pin22, HIGH);
 Serial.println("Pin 22 eingeschaltet!");
 Pin22ON = true;
}
if(readString.indexOf("22=OFF") > -1){
 digitalWrite(Pin22, LOW);
 Serial.println("Pin 22 ausgeschaltet!");
 Pin22ON = false;
}
if(readString.indexOf("27=ON") > -1) {
 digitalWrite(Pin27, HIGH);
 Serial.println("Pin 27 eingeschaltet!");
 Pin27ON = true;
}
if(readString.indexOf("27=OFF") > -1){
 digitalWrite(Pin27, LOW);
 Serial.println("Pin 27 ausgeschaltet!");
 Pin27ON = false;
}
if(readString.indexOf("28=ON") > -1) {
 digitalWrite(Pin28, HIGH);
 Serial.println("Pin 28 eingeschaltet!");
 Pin28ON = true;
}
if(readString.indexOf("28=OFF") > -1){
 digitalWrite(Pin28, LOW);
 Serial.println("Pin 28 ausgeschaltet!");
 Pin28ON = false;
}
if(readString.indexOf("29=ON") > -1) {
 digitalWrite(Pin29, HIGH);
 Serial.println("Pin 29 eingeschaltet!");
 Pin29ON = true;
}
if(readString.indexOf("29=OFF") > -1){
 digitalWrite(Pin29, LOW);
 Serial.println("Pin 29 ausgeschaltet!");
 Pin29ON = false;
}

//----------------Button 2-d floor-------------------------------------
/*if(readString.indexOf("33=ON") > -1) {
 digitalWrite(Pin_33, HIGH);
 Serial.println("Pin 33 eingeschaltet!");
 Pin_33ON = true;
}
if(readString.indexOf("33=OFF") > -1){
 digitalWrite(Pin_33, LOW);
 Serial.println("Pin 33 ausgeschaltet!");
 Pin_33ON = false;
}
if(readString.indexOf("34=ON") > -1) {
 digitalWrite(Pin_34, HIGH);
 Serial.println("Pin 34 eingeschaltet!");
 Pin_34ON = true;
}
if(readString.indexOf("34=OFF") > -1){
 digitalWrite(Pin_34, LOW);
 Serial.println("Pin 34 ausgeschaltet!");
 Pin_34ON = false;
}
if(readString.indexOf("35=ON") > -1) {
 digitalWrite(Pin_35, HIGH);
 Serial.println("Pin 35 eingeschaltet!");
 Pin_35ON = true;
}
if(readString.indexOf("35=OFF") > -1){
 digitalWrite(Pin_35, LOW);
 Serial.println("Pin 35 ausgeschaltet!");
 Pin_35ON = false;
}
if(readString.indexOf("36=ON") > -1) {
 digitalWrite(Pin_36, HIGH);
 Serial.println("Pin 36 eingeschaltet!");
 Pin_36ON = true;
}
if(readString.indexOf("36=OFF") > -1){
 digitalWrite(Pin_36, LOW);
 Serial.println("Pin 36 ausgeschaltet!");
 Pin_36ON = false;
}
*/

//--------------------Button all--------------------------------------------
if(readString.indexOf("all=ALL+OFF") > -1){
 digitalWrite(Pin3, LOW);
 digitalWrite(Pin4, LOW);
 digitalWrite(Pin5, LOW);
 digitalWrite(Pin6, LOW);
 digitalWrite(Pin22, LOW);
 digitalWrite(Pin27, LOW);
 digitalWrite(Pin28, LOW);
 digitalWrite(Pin29, LOW);
// digitalWrite(Pin_33, LOW);
// digitalWrite(Pin_34, LOW);
// digitalWrite(Pin_35, LOW);
// digitalWrite(Pin_36, LOW); 
 Serial.println("Alles ausgeschaltet");
 Pin3ON = false;
 Pin4ON = false;
 Pin5ON = false;
 Pin6ON = false;
 Pin22ON = false;
 Pin27ON = false;
 Pin28ON = false;
 Pin29ON = false;
// Pin_33ON = false;
// Pin_34ON = false;
// Pin_35ON = false;
// Pin_36ON = false;
}
if(readString.indexOf("all1=ALL+ON") > -1){
 digitalWrite(Pin3, HIGH);
 digitalWrite(Pin4, HIGH);
 digitalWrite(Pin5, HIGH);
 digitalWrite(Pin6, HIGH);
 digitalWrite(Pin22, HIGH);
 digitalWrite(Pin27, HIGH);
 digitalWrite(Pin28, HIGH);
 digitalWrite(Pin29, HIGH);
// digitalWrite(Pin_33, HIGH);
// digitalWrite(Pin_34, HIGH);
// digitalWrite(Pin_35, HIGH);
// digitalWrite(Pin_36, HIGH);
 Serial.println("Alles eingeschaltet");
 Pin3ON = true;
 Pin4ON = true;
 Pin5ON = true;
 Pin6ON = true;
 Pin22ON = true;
 Pin27ON = true;
 Pin28ON = true;
 Pin29ON = true;
// Pin_33ON = true;
// Pin_34ON = true;
// Pin_35ON = true;
// Pin_36ON = true;
}

//--------------------------HTML------------------------

client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.print("<html><head>");
client.println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> ");
client.print("<title> Home Arduino Webserver</title>");
client.println("<meta http-equiv=\"refresh\" content=\"10\">");
client.println("</head>");
client.print("<body bgcolor='#444444'>");
//---Überschrift Start---
client.println("<br><hr />");
client.println("<div align='center'><font color='#2076CD'>Home Controller Webserver 1.0 </font color></div>");
client.println("<hr /><br>");
//---Überschrift End---

//-----Termom ------
client.println("<hl><div align='left'><font face='Verdana' color='#FFFFFF'>Температура:</font></div><hl");
client.print("<FONT color='#FFFFFF', size='4'>");
client.println("<TABLE BORDER=1 width=400>");
client.println("<TR>");
client.println("<TD align=center><bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='4'> Улица <br>"); client.println("</font></TD>");
client.println("<TD align=center><bgcolor='#222222'><font face='Verdana' color='red' size='4'>");client.print(sensors.getTempCByIndex(1)); client.println("</font></TD>");
client.println("<TD align=center><bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='4'> Зал <br>"); client.println ("</font></TD>");
client.println("<TD align=center><bgcolor='#222222'><font face='Verdana' color='red' size='4'>");client.print(sensors.getTempCByIndex(2)); client.println("</font></TD>");
client.println("</TR>");
client.println("<TD align=center><bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='4'> Спальня <br>"); client.println ("</font></TD>");
client.println("<TD align=center><bgcolor='#222222'><font face='Verdana' color='red' size='4'>");client.print(sensors.getTempCByIndex(0)); client.println("</font></TD>");
client.println("<TD align=center><bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='4'> Второй Этаж <br> "); client.println ("</font></TD>");
client.println("<TD align=center><bgcolor='#222222'><font face='Verdana' color='red' size='4'>");client.print("test"); client.println("</font></TD>");
client.println("<TD align=center><bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='4'> Гараж <br> "); client.println ("</font></TD>");
client.println("<TD align=center><bgcolor='#222222'><font face='Verdana' color='red' size='4'>");client.print("test"); client.println("</font></TD>");
client.println("</TR>");
client.println("</TABLE>"); 
client.println("<br>");
//----------------------Grelki---------------------------------------------------------------------
client.println("<TABLE align='center' BORDER=3 width=600>");
 if (Pin30ON)
   client.println("<td align='center'><font face='Arial Black' color='red' size='5'> ОБОГРЕВАТЕЛЬ ЗАЛ ");
 else
   client.println("<td align='center'><font face='Arial Black' color='#444444' size='5'> ОБОГРЕВАТЕЛЬ ЗАЛ ");
   
if (Pin31ON)
   client.println("<td align='center'><font face='Arial Black' color='red' size='5'> ОБОГРЕВАТЕЛЬ СПАЛЬНЯ ");
 else
   client.println("<td align='center'><font face='Arial Black' color='#444444' size='5'> ОБОГРЕВАТЕЛЬ СПАЛЬНЯ ");

if (Pin32ON)
   client.println("<td align='center'><font face='Arial Black' color='red' size='5'> ОБОГРЕВАТЕЛЬ КУХНЯ ");
 else
   client.println("<td align='center'><font face='Arial Black' color='#444444' size='5'> ОБОГРЕВАТЕЛЬ КУХНЯ ");   
client.println("<tr>");   
client.println("<TD align=center><bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'> min t = 22   max t = 30  <br>"); client.println ("</font></TD>");
client.println("<TD align=center><bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'> min t = 18   max t = 24  <br>"); client.println ("</font></TD>");
client.println("<TD align=center><bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'> min t = 16   max t = 26  <br>"); client.println ("</font></TD>");
client.println("</TABLE>"); 


//---Ausgänge schalten---
//client.println("<br>");
client.println("<hr /><br>");
client.println("<div align='left'><font face='Verdana' color='#FFFFFF'>Управление освещением:</font></div>");
client.println("<table border='1' width='600' cellpadding='4'>");
client.println("<tr bgColor='#222222'>");

//---первый блок управления start--------------------------------------------------------------

 client.println("<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>Стоянка<br></font></td>");
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=3 value='ON'></form></td>");
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=3 value='OFF'></form></td>");
 if (Pin3ON)
   client.println("<td align='center'><font color='green' size='5'>ON");
 else
   client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF");

//-------второй блок управления start-----------------------------------

 client.println("<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>Коридор<br></font></td>");
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=22 value='ON'></form></td>");
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=22 value='OFF'></form></td>");
 if (Pin22ON)
   client.println("<td align='center'><font color='green' size='5'>ON");
 else
   client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF");

//--------третий блок управления start---------------------------------

 client.println("<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>Второй этаж<br></font></td>");
// client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=33 value='ON'></form></td>");
// client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=33 value='OFF'></form></td>");
// if (Pin_33ON)
//   client.println("<td align='center'><font color='green' size='5'>ON");
// else
//   client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF");

//---------------первый блок управления start------------------------------

client.println("</tr>");
client.println("<tr bgColor='#222222'>");
 client.println("<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>Сад<br></font></td>");
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=4 value='ON'></form></td>");
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=4 value='OFF'></form></td>");
 if (Pin4ON)
   client.println("<td align='center'><font color='green' size='5'>ON");
 else
   client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF");

//-------------второй блок управления start-------------------------------

 client.println("<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>Кухня<br></font></td>");
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=27 value='ON'></form></td>");
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=27 value='OFF'></form></td>");
 if (Pin27ON)
   client.println("<td align='center'><font color='green' size='5'>ON");
 else
   client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF");

//----------третий блок управления start---------------------------

 client.println("<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>Второй этаж Спальня<br></font></td>");
// client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=34 value='ON'></form></td>");
// client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=34 value='OFF'></form></td>");
// if (Pin_34ON)
//   client.println("<td align='center'><font color='green' size='5'>ON");
// else
//   client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF");

client.println("</tr>");
client.println("<tr bgColor='#222222'>");

//------------первый блок управления start----------------------------------------

 client.println("<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>Септик<br></font></td>");
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=5 value='ON'></form></td>");
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=5 value='OFF'></form></td>");
 if (Pin5ON)
   client.println("<td align='center'><font color='green' size='5'>ON");
 else
   client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF");

//----------второй блок управления start-------------------------------------

 client.println("<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>Зал<br></font></td>");
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=28 value='ON'></form></td>");
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=28 value='OFF'></form></td>");
 if (Pin28ON)
   client.println("<td align='center'><font color='green' size='5'>ON");
 else
   client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF");

//-------третий блок управления start-----------------------------------

 client.println("<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>Второй этаж Кладовка<br></font></td>");
// client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=35 value='ON'></form></td>");
// client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=35 value='OFF'></form></td>");
// if (Pin_35ON)
//   client.println("<td align='center'><font color='green' size='5'>ON");
// else
//   client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF");

//-------------первый блок управления start-----------------------------------

client.println("</tr>");
client.println("<tr bgColor='#222222'>");
 client.println("<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>Улица<br></font></td>");
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=6 value='ON'></form></td>");
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=6 value='OFF'></form></td>");
 if (Pin6ON)
   client.println("<td align='center'><font color='green' size='5'>ON");
 else
   client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF");

//-------------второй блок управления start-------------------------------------

 client.println("<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>Спальня<br></font></td>");
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=29 value='ON'></form></td>");
 client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=29 value='OFF'></form></td>");
 if (Pin29ON)
   client.println("<td align='center'><font color='green' size='5'>ON");
 else
   client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF");

//----------третий блок управления start----------------------------

 client.println("<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>Гараж<br></font></td>");
// client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=36 value='ON'></form></td>");
// client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=36 value='OFF'></form></td>");
// if (Pin_36ON)
//   client.println("<td align='center'><font color='green' size='5'>ON");
// else
//   client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF");

//-------------------------блок все выключить-------------------------------------

client.println("</tr>");
client.println("</tr>");
client.println("</table>");
client.println("<br>");
client.println("<table border='1' width='500' cellpadding='5'>");
client.println("<form method=get><input type=submit name=all value='ALL OFF'></form>");
client.println("<form method=get><input type=submit name=all1 value='ALL ON'></form>");
//client.println("<form method=get><input type=submit name=all value=' '></form>");
//client.println("<form method=get><input type=submit name=all2 value='ALL OFF'></form>");
//client.println("<form method=get><input type=submit name=all12 value='ALL ON'></form>");
//client.println("<form method=get><input type=submit name=all value=' '></form>");
//client.println("<form method=get><input type=submit name=all3 value='ALL OFF'></form>");
//client.println("<form method=get><input type=submit name=all13 value='ALL ON'></form>");
client.println("</table>");
client.println("</table>");
client.println("<hr /><br>");

//---------------не обращаем внимания попытка сделать несколько страниц-------

//client.println("<br>");
//client.println("<table border='1' width='500' cellpadding='5'>");
//client.println("<form method=get><input type=submit name=page value='Main'></form>");
//client.println("<form method=get><input type=submit name=page1 value='1-t Floor'></form>");
//client.println("<form method=get><input type=submit name=page2 value='2-d Floor'></form>");
//client.println("<form method=get><input type=submit name=page3 value='Garage'></form>");
//client.println("</table>");
client.println("</body></html>");

//---Ausgänge schalten---

//clearing string for next read
readString="";

//stopping client
client.stop();
}}}}}

Буду признателен  за помощь.

Borland
Offline
Зарегистрирован: 17.05.2012

Сумбурности не увидел, увидел что расстановка скобок делает код совершенно нечитаемым

по проблеме - не верю, надо закоментиривать всю эту кучу строчек, чтобы сделать код работоспособным

влияет либо одна , либо блок находящикся рядом строчек.

попробуйте раскоменитровать последовательно и добейтесь появления ошибки

PS. Не вникая в код String readString = String(100); - Хватает ли длины стринга ?

pps: и тут сморозил, конечно хватает пока память есть))

 

smoker_vvo
Offline
Зарегистрирован: 14.02.2013

Спасибо, так и делал. Глюк начинается в районе "кнопок" номера строк: 441-447, 473-478, 506-511, 538-543. Но самое интерестное в другом.... пины для управление используются с совпадающими цифрами, например 3, 23 и 33, так вот, как только начинаешь управлять пином 33, срабатывают и 3 и 23..... Вот это меня вааще в тупик вогнало.... Такая же картина 4, 24 и 34......

стринги менял...... не помогает :))))

Andrey_Y_Ostanovsky
Offline
Зарегистрирован: 03.12.2012

smoker_vvo пишет:

Но самое интерестное в другом.... пины для управление используются с совпадающими цифрами, например 3, 23 и 33, так вот, как только начинаешь управлять пином 33, срабатывают и 3 и 23..... Вот это меня вааще в тупик вогнало.... Такая же картина 4, 24 и 34......

стринги менял...... не помогает :))))

Где-то два знака обрезаются до одного? Выводите в отладочные сообщения значения нажатых кнопок.

step962
Offline
Зарегистрирован: 23.05.2011

smoker_vvo пишет:

Спасибо, так и делал. Глюк начинается в районе "кнопок" номера строк: 441-447, 473-478, 506-511, 538-543.

Что-то мне подсказывает, что счастье наступает у вас гораздо раньше. ;)

Цитата:

Но самое интерестное в другом.... пины для управление используются с совпадающими цифрами, например 3, 23 и 33, так вот, как только начинаешь управлять пином 33, срабатывают и 3 и 23..... Вот это меня вааще в тупик вогнало.... Такая же картина 4, 24 и 34......

стринги менял...... не помогает :))))

Ну так обратите внимание, например, на блоки, начинающиеся в строках 170 и 254 в приведенной вами простыне. Как вы думаете, какой из этих блоков отреагирует истиной на строку - к примеру - "abracadabra 10050033=ON Quatsch"?

Первый или второй?

Или и первый, и второй?

Или ни один из них?

А если в строке изменить всего один символ - "abracadabra 10050023=ON Quatsch"? Какой блок отреагирует в этом случае?

И еще - если функция не умещается в 1-2 страницы, то это верный признак того, что ее пора разбивать на подфункции. Иначе рискуете потерять обзорность создаваемой программы и блудить (в смысле - блуждать) в трех соснах.

В вашем случае сам бог велел конструкции типа 

client.println("<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>Стоянка<br></font></td>");
client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=3 value='ON'></form></td>");
client.println("<td align='center' bgcolor='#222222'><form method=get><input type=submit name=3 value='OFF'></form></td>");
 if (Pin3ON)
client.println("<td align='center'><font color='green' size='5'>ON");
else
client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF");

записывать в виде функций типа 

void outblock(char *str, char *val, boolean PinON) {
  char strbuf[100];
  sprintf(strbuf,"<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>%s<br></font></td>",str);
  client.println(strbuf);
  sprintf(strbuf,"<td align='center' bgcolor='#222222'><form method=get><input type=submit name=%s value='ON'></form></td>",val); 
  client.println(strbuf);
  sprintf(strbuf,"<td align='center' bgcolor='#222222'><form method=get><input type=submit name=%s value='OFF'></form></td>",val);
  client.println(strbuf);
   if (PinON)
    client.println("<td align='center'><font color='green' size='5'>ON");
  else
    client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF");
}

И затем вместо строк 420-446 писать всего лишь:

outblock("Стоянка","3",Pin3ON);
outblock("Коридор","22",Pin22ON);
outblock("Второй этаж","33",Pin33ON);

 

Borland
Offline
Зарегистрирован: 17.05.2012

мда ))) step962 легко и просто

 

smoker_vvo
Offline
Зарегистрирован: 14.02.2013

Опаньки..... Преогрмнейшее спасибо за поучения. Займусь изучением и устранением :-))

smoker_vvo
Offline
Зарегистрирован: 14.02.2013

Уважаемый, step962.

Прошу подсказать заблудившемуся, какова должна бысть структура кода с Вашей подсказкой??

Короче, не могу понять куда воткнуть эту функцию и как объявить переменные.

Учусь на своих ошибках... :))

step962
Offline
Зарегистрирован: 23.05.2011

Посмотрите внимательно на блоки строк 420-426, 430-436, 440-446, 452-458, 462-468,472-478,485-491,495-501,505-511. Выделите в них те участки, которыми они отличаются друг от друга. Эти отличающиеся участки являются кандидатами на то, чтобы стать параметрами функции, которая одна сможет выполнить все эти девять участков.

Вместо каждого из названных блоков по семь строчек надо будет написать вызовы функции outblock:

outblock("Стоянка","3",Pin3ON); и т.д.

В результате вместо 63 длиннючих строк вы получете 7 коротеньких вызовов одной-единственной функции но с разными параметрами.

smoker_vvo
Offline
Зарегистрирован: 14.02.2013

Эт все понятно.

при компиляции вылазят ошибки с упоминанием что outblock не объявлен и соответственно все его переменные. void outblock  ставится в каком месте скетча, void setup, void loop или вообще в HTML?

Как я понимаю это должно стоять в void loop, но тогда как объявлять переменные:

char *str, char *val, boolean PinON

strbuf[100]

отладчик ругается

step962
Offline
Зарегистрирован: 23.05.2011

Вот я взял и обрезал вашу программу до безобразия.

И вставил определение функции.

И заменил прямое "рисование" строчек вызовами этой функции.

Получилось вот такое:

/*

Original Version by Poldi
modified by Katsu
the functions readString.append() and readString.contains() where replaced
*/
#include <SPI.h>  // insert by Katsu
//#include <WString.h> removed by Katsu yt не трогаем
#include <Ethernet.h>
//#include <OneWire.h>
//#include <DallasTemperature.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  // entspricht einer MAC von 84.85.88.16.0.36
byte ip[]  = { 192, 168, 0, 89 };                  // IP-Adresse
byte gateway[] = { 192, 168, 0, 1 };                // Gateway
byte subnet[]  = { 255, 255, 255, 0 };
// Датчик температуры DS18B20 подключен на 9 пин Arduino
#define ONE_WIRE_BUS 9
// Инициализация 1-ware
//OneWire oneWire(ONE_WIRE_BUS);
EthernetServer server(80);
//DallasTemperature sensors(&oneWire);
//----------Outdoor--------
int Pin3 = 3;
int Pin4 = 4;
int Pin32 = 32;
//
boolean Pin31ON = false;
boolean Pin32ON = false;
//----------2-d floor--------
boolean Pin3ON = false;
boolean Pin22ON = false;
boolean Pin33ON = false;
//boolean Pin_34ON = false;
//boolean Pin_35ON = false;
//boolean Pin_36ON = false;


void outblock(char *str, char *val, boolean PinON) {
  char strbuf[100];
  sprintf(strbuf,"<td bgcolor='#222222'><font face='Verdana' color='#CFCFCF' size='2'>%s<br></font></td>",str);
  client.println(strbuf);
  sprintf(strbuf,"<td align='center' bgcolor='#222222'><form method=get><input type=submit name=%s value='ON'></form></td>",val); 
  client.println(strbuf);
  sprintf(strbuf,"<td align='center' bgcolor='#222222'><form method=get><input type=submit name=%s value='OFF'></form></td>",val);
  client.println(strbuf);
   if (PinON)
    client.println("<td align='center'><font color='green' size='5'>ON");
  else
    client.println("<td align='center'><font color='#CFCFCF' size='5'>OFF");
}

void setup(){
// Инициализация the sensor library
//sensors.begin();
//Ethernet.begin(mac, ip, gateway, subnet);
//server.begin();
//----------Outdoor--------
pinMode(Pin3, OUTPUT);
//...
pinMode(Pin32,OUTPUT);

Serial.begin(9600); 
}

void loop(){
//--------------------------HTML------------------------

client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.print("<html><head>");
client.println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> ");
client.print("<title> Home Arduino Webserver</title>");
client.println("<meta http-equiv=\"refresh\" content=\"10\">");
client.println("</head>");
client.print("<body bgcolor='#444444'>");
//---Überschrift Start---
client.println("<br><hr />");
client.println("<div align='center'><font color='#2076CD'>Home Controller Webserver 1.0 </font color></div>");
client.println("<hr /><br>");
//---Überschrift End---

//---Ausgänge schalten---
//client.println("<br>");
client.println("<hr /><br>");
client.println("<div align='left'><font face='Verdana' color='#FFFFFF'>Управление освещением:</font></div>");
client.println("<table border='1' width='600' cellpadding='4'>");
client.println("<tr bgColor='#222222'>");

//---первый блок управления start--------------------------------------------------------------
  outblock("Стоянка", "3", Pin3ON);

//-------второй блок управления start-----------------------------------
  outblock("Коридор", "22", Pin22ON);

//--------третий блок управления start---------------------------------
  outblock("Второй этаж", "33", Pin33ON);


client.println("</tr>");

client.println("</table>");
client.println("<br>");
//---------------не обращаем внимания попытка сделать несколько страниц-------

//clearing string for next read
//readString="";

//stopping client
//client.stop();
}

Компилируется...

PS: В процессе ваяния этого примера вдруг заметил, что у вас нет закрывающего тега "</td>" в операторе формирования HTML-кода ячейки с состоянием кнопки (ON/OFF). Вот еще один довод в пользу структурирования программы - вместо того, чтобы рыть носом в 600 строках, выискивая и исправляя соответствующие пассажи, достаточно лишь подкорректировать строки 48 и 50 в объявлении функции outblock().

 

PPS: объясните мне, что за страшный ужас у вас в строке 582:

}}}}}

Это просто очепятка или вы действительно, не утруждая себя осмысленными (т.е. не для красоты, а для удобочитаемости) отступами, собрали в одну строчку все те закрывающие скобки, которые накопились на протяжении вашей полукилометровой простыни? Если верно второе, то очччччень рекомендую вам почитать о хорошем стиле программирования (для начала затвердив, как "отче наш", вот эти простые правила), иначе вы раз за разом при модификации своих же творений будете создавать проблемы - себе же.

smoker_vvo
Offline
Зарегистрирован: 14.02.2013

Подозреваю что это последствия компиляции, когда выскакивала ошибка об остутствии "}" соответственно добавлялось.  так что - это легкая непрежность старого человека :))

Теперь к коду, спасибо за ваш труд, но пока выдает ошибку :

sketch_feb24a.ino: In function 'void outblock(char*, char*, boolean)':
sketch_feb24a:42: error: 'client' was not declared in this scope
sketch_feb24a.ino: In function 'void loop()':
sketch_feb24a:69: error: 'client' was not declared in this scope

IDE 1.0.3

smoker_vvo
Offline
Зарегистрирован: 14.02.2013

так, интерестно, вставил перед  void outblock(char *str, char *val, boolean PinON), строчку EthernetClient client = server.available();

ошибкуи ушли, компилируется, заливается.... но по IP не доступен......

step962
Offline
Зарегистрирован: 23.05.2011

smoker_vvo пишет:

Подозреваю что это последствия компиляции, когда выскакивала ошибка об остутствии "}" соответственно добавлялось.  так что - это легкая непрежность старого человека :))

В-о-о-о-т!!! Как раз то, о чем я говорю: хороший стиль - наше ффффсЁ!

А может быть одна из этих закрывающих скобочек должна была стоять на 100500 строчек выше - там, где и должно было завершить блок инструкций, выполняющийся при наступлении определенного условия? А в результате ее установкт в конце функции выполняется не только этот блок, но и все, что стоит ниже него. А почему так получается? потому что нет нормальных отступов, которые здорово облегчают поиск правильного места для забытой скобки. Не говоря уж о выделении логически завершенных участков кода в отдельные функции, что снимает необходимость перескакивать с экрана на экран в поисках логических взаимосвязей. 

step962
Offline
Зарегистрирован: 23.05.2011

smoker_vvo пишет:

так, интерестно, вставил перед  void outblock(char *str, char *val, boolean PinON), строчку EthernetClient client = server.available();

Общее правило Си: объявление объекта (константы, переменной, функции...) должно предшествовать ее использованию.

Можно было функцию outblock() после loop() разместить, оставив перед setup() лишь строчку ее декларации.

Цитата:
ошибкуи ушли, компилируется, заливается.... но по IP не доступен......

Ушли ошибки синтаксиса. Ошибки в логике остались - привет от надцати закрывающих скобок в самом конце вашего скетча.

Опять же - вот эта строчка:

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  // entspricht einer MAC von 84.85.88.16.0.36

Не знаю, насколько критично задание MAC-адреса в используемой вами библиотеке, но:

0xDE соответствует не 84, а 222,
0xAD соответствует не 85, а 173,
0xBE соответствует не 88, а 190,
0xEF соответствует не 16, а 239,
0xFE соответствует не 0, а 254,
0xED соответствует не 36, а 237

smoker_vvo
Offline
Зарегистрирован: 14.02.2013

НЕ,с МАС все нормально, не убрал чужие коменты.  Так что с этим все нормально....

Рою дальше....

Кстати, просто для информации, продолжаю долбать и свою "простынь", так вот, сложилось такое впечатление что возникают какие то ограничения или что то еще, т.к. если пытаешься увиличить кол-во строк в таблице более 10 - то все зависает...... Компилится, загружается и ВСЕ - команда ping ip невидит.

step962
Offline
Зарегистрирован: 23.05.2011

smoker_vvo пишет:

Кстати, просто для информации, продолжаю долбать и свою "простынь", так вот, сложилось такое впечатление что возникают какие то ограничения или что то еще, т.к. если пытаешься увиличить кол-во строк в таблице более 10 - то все зависает...... Компилится, загружается и ВСЕ - команда ping ip невидит.

Ну а что вы хотите, если у вас теги не закрываются. Взгляните хотя бы на строки 423-426 исходного скетча: где там </td>? Ну и дальше та же ошибка добрую дюжину раз встречается...

ustas
Offline
Зарегистрирован: 12.03.2012

Если что-то добавляете (особенно строки) и в какой-то момент перестает работать то, что работало - уперлись в оперативку. Смотрите в сторону PROGMEM и т.п. способы оптимизации. Оперативка-то тут сильно не резиновая.

smoker_vvo
Offline
Зарегистрирован: 14.02.2013

Это я учел и все позакрывал.

Ладно, время есть, спешить не куда, буду прокачивать дальше.

Спасибо за помощь и советы.

 

smoker_vvo
Offline
Зарегистрирован: 14.02.2013

Все! Силы и знания закончились.

Неделю долбался с обрезанной версией, но все как то в отходы. ......

то ругается на то что :042  

042	  client.println(strbuf);

клиент не существует, то что функция void outblock не определена и еще чего то не хватает......

Саму функцию куда только не вставлял....... То нет иннициализации outblock, то другие ошибки.

Прошу расширенной помощи, т.е. надо рабочий вариант, не только что бы работало, но и для того что бы я САМ понял что и как.

Тк что, если не втягость.....

ЗЫ: Кстати и с множеством "}" - анализируя код пришел к такому результату - Они и в правду ВСЕ должны стоять в самом конце, хоть отформатированные, хоть скопом.....