#1 Re: Програмування Arduino » Управление реле через arduino, Ethernet Shield W5100 и кнопки » 2016-11-08 10:55:41

Добрый день, помогите люди добрые я уже неделю парюсь не как не пойму в чом дело, я взял Ваш код за основу и пытаюсь его переделать под 4 реле но всё встало на двух так как в момент переключение одной реле дергается вторая (когда включаешь второе реле моргает первая), никак не пойму в чом дело помогите пожалуйста.

#include <Ethernet.h>


// задаем константы
const int Relay1 = 8;       
const int Relay2 = 13;       
 
// переменные
boolean Relay1On = true;        // Текущее состояние реле
boolean Relay2On = true;        // Текущее состояние реле

String readString = String(30);


// объявляем переменную MY_IP со значением 10.36.1.52
#define MY_IP "192.168.3.222"
// указываем настройки сетевого интерфейса и порт веб-сервера
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 3, 222);
EthernetServer server(80);


void setup() {
  delay(500);
  
/*
 * без строки "digitalWrite(Relay1, HIGH);" перед "pinMode" при включении
 * ардуины будет происходить кратковременное переключение реле,
 * а значит кратковременно подастся питание, что нам категорически
 * не надо!
 */
  digitalWrite(Relay1, HIGH);
 // digitalWrite(Relay2, HIGH);
  
  // инициализируем пин, подключенный к реле, как выход
  pinMode(Relay1, OUTPUT);
  pinMode(Relay2, OUTPUT);


// стартуем сетевой интерфейс
Ethernet.begin(mac, ip);
server.begin();


Serial.begin(9600);
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}

/*
 * функция сглаживания дребезга
 * принимает в качестве аргумента предыдущее состояние кнопки
 * и выдаёт фактическое.
 */



void loop() {
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);

if (readString.length() < 30) {
readString.concat( c); }
Serial.print( c);
        
if (c == '\n' && currentLineIsBlank) {
if (c == '\n') {
//Проверяем включили ли реле и светодиод?
//Level=1 - включен
//Level=0 - выключен
if(readString.indexOf("Level=1") >=0) {
//Включаем реле
digitalWrite(Relay1, LOW);
Relay1On = false;

}else if(readString.indexOf("Level=0") >=0){
//Выключаем реле
digitalWrite(Relay1, HIGH);
Relay1On = true;
}
if(readString.indexOf("Level2=1") >=0) {
//Включаем реле
digitalWrite(Relay2, LOW);
Relay2On = false;

}else if(readString.indexOf("Level2=0") >=0){
//Выключаем реле
digitalWrite(Relay2, HIGH);
Relay2On = true;
}
 

client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");  // the connection will be closed after completion of the response
//client.println("Refresh: 5");  // refresh the page automatically every 5 sec
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' /> ");
//client.println("<head><meta http-equiv=\"refresh\" content=\"5;URL=http://"MY_IP"/\"></head>");
client.println(F("<body>"));
client.println(F("<center><head><title>Гараж</title></head>"));

if (Relay1On){
client.println("<form method=get name=LED><input type=radio name=Level value=1 CHECKED>Включить");
client.println("<input type=radio name=Level value=0>Выключить");
client.println("<input type=submit value=Применить></form>");
client.println("<font size=’5′>Состояние реле: ");
client.println("<font size=’5′>Выкл. 1");
client.println("<br></br>");
}else{
client.println("<form method=get name=LED><input type=radio name=Level value=1>Включить");
client.println("<input type=radio name=Level value=0 CHECKED>Выключить");
client.println("<input type=submit value=Применить></form>");
client.println("<font size=’5′>Состояние реле: ");
client.println("<font size=’5′>Вкл 1");
client.println("<br></br>");
}

if (Relay2On){
client.println("<font color=\"red\"><a href=\"/?Level2=1\"\">ВКЛ</a>");
client.println("<font size=’5′>Состояние реле: ");
client.println("<font size=’5′>Выкл. 2");
client.println("<br></br>");
}else{
client.println("<font color=\"green\"><a href=\"/?Level2=0\"\">ВЫКЛ</a>");
client.println("<font size=’5′>Состояние реле: ");
client.println("<font size=’5′>Вкл 2");
client.println("<br></br>");
}

readString="";
//останавливаем web-client
client.stop();
          }
        }
      }
    }

// часть кода для кнопки, реле и светодиода

{
  Relay1On = !Relay1On;
}
{
   Relay2On = !Relay2On;
}
digitalWrite(Relay1, Relay1On);                         // Изменить статус состояния реле
digitalWrite(Relay2, Relay2On); 

}
}

Підвал форуму