Boolean Variable activated via Ethernet Web Server

Hello everybody.

I am new to the Arduino IDE programming.

I need some help writing code for activating a boolean (1 or 0 ON/OFF) from ethernet web server.

I can already do it with 16 outputs and I can read the status of 16 inputs.

I would like to be able to switch ON or OFF 8 or 16 boolean variables in my source code from ethernet web server interface same way as I can do with the outputs.

I am using the following lib
#include <ETH.h>
#include <WiFiUdp.h>
#include <WebServer_WT32_ETH01.h>

All works fine with the outputs but I would like to add boolean to use internally in the source code.

I hope someone have done this before and are able to guide me the right direction.
Tried Google without any luck :thinking:

You try Google...?

https://www.google.com/search?q=arduino+web+button+control

Thanks for you suggested link :slightly_smiling_face:

Already tried Google.
Looked at your recommended link.
Outputs are not a problem which I have already up running.

What I need is to use boolean variable in addition to output as I need the variables to be used in my source code as bypass to inputs or conditions etc. to be able to let my code turn on an output without directly forcing it but with the right conditions I have programed in my code.

Hope you understand what I am trying to achieve!

So you want a web page that sets a variable that you can use in your code?

There are lots of examples, including the one I posted.

Maybe this one is a little easier to understand...

Will try to play a bit around with the two links you send me.

Do you have any suggested link whey they explain how to use multiple switches on the server pagelike up to 8 or more (sw1, sw2,,,,,,,sw8)

I use following source code for output which works, but I want to replace by boolean.


// Used Library
#include "Arduino.h"
#include "PCF8574.h"
#include <ETH.h> 
#include <WiFiUdp.h> 
#include <WebServer_WT32_ETH01.h>

// Set i2c input address 
PCF8574 pcf8574_1(0x22,4,5);  // channel 1-8    address: 100010
PCF8574 pcf8574_2(0x21,4,5);  // channel 9-16   address: 100001

// Set i2c output address
PCF8574 pcf8574_3(0x24,4,5);  // channel 1-8
PCF8574 pcf8574_4(0x25,4,5);  // channel 9-16

String relaystate[16]={"relay1state","relay2state","relay3state","relay4state","relay5state","relay6state","relay7state","relay8state",
                       "relay9state","relay10state","relay11state","relay12state","relay13state","relay14state","relay15state","relay16state",};

                      
String relay1state = "off";// state of relay1
String relay2state = "off";// state of relay2
String relay3state = "off";// state of relay3
String relay4state = "off";// state of relay4
String relay5state = "off";// state of relay5
String relay6state = "off";// state of relay6
String relay7state = "off";// state of relay7
String relay8state = "off";// state of relay8

String relay9state = "off";// state of relay9
String relay10state = "off";// state of relay10
String relay11state = "off";// state of relay11
String relay12state = "off";// state of relay12
String relay13state = "off";// state of relay13
String relay14state = "off";// state of relay14
String relay15state = "off";// state of relay15
String relay16state = "off";// state of relay16

// Ethernet configuration
#define ETH_ADDR        0
#define ETH_POWER_PIN  -1
#define ETH_MDC_PIN    23
#define ETH_MDIO_PIN   18   
#define ETH_TYPE       ETH_PHY_LAN8720
#define ETH_CLK_MODE   ETH_CLOCK_GPIO17_OUT

WiFiUDP Udp;                      //Create UDP object
unsigned int localUdpPort = 4196; //local port

// Set it the IP address of the router
IPAddress local_ip(192, 168, 1, 80); 
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress dns(192, 168, 1, 1);

// WebServer Port 
#define DEBUG_ETHERNET_WEBSERVER_PORT       Serial

// Debug Level from 0 to 4
#define _ETHERNET_WEBSERVER_LOGLEVEL_       3

WiFiServer server(80);
// Current time
unsigned long currentTime = millis();
// Previous time
unsigned long previousTime = 0;
// Define timeout time in milliseconds (example: 2000ms = 2s)
const long timeoutTime = 2000;

int flag_read_di=0;

// Variable to store the HTTP request
String header;
TwoWire I2Cone = TwoWire(0);
TwoWire I2Ctwo = TwoWire(1);


// Varible
boolean status = 0;
boolean toggle = true;

unsigned long timeElapsed;

void setup()
{
  Serial.begin(9600);
  Serial.println();
// Set PCF8574 pinMode to OUTPUT
  for(int i=0;i<=7;i++)
  {
     pcf8574_3.pinMode(i, OUTPUT);
     pcf8574_4.pinMode(i, OUTPUT);
  }
  pcf8574_3.begin();
  pcf8574_4.begin();
 
 
  for(int i=0;i<=7;i++)
  {
     pcf8574_1.pinMode(i, INPUT);
     pcf8574_2.pinMode(i, INPUT);
  }
  pcf8574_1.begin();
  pcf8574_2.begin();

  for(int i=0;i<=7;i++)
  {
     pcf8574_3.digitalWrite(i, HIGH);
     pcf8574_4.digitalWrite(i, HIGH);
  }

pcf8574_1.pinMode(P0, INPUT);
pcf8574_1.pinMode(P1, INPUT);
pcf8574_1.pinMode(P2, INPUT);
pcf8574_1.pinMode(P3, INPUT);
pcf8574_1.pinMode(P4, INPUT);
pcf8574_1.pinMode(P5, INPUT);
pcf8574_1.pinMode(P6, INPUT);
pcf8574_1.pinMode(P7, INPUT);

pcf8574_2.pinMode(P0, INPUT);
pcf8574_2.pinMode(P1, INPUT);
pcf8574_2.pinMode(P2, INPUT);
pcf8574_2.pinMode(P3, INPUT);
pcf8574_2.pinMode(P4, INPUT);
pcf8574_2.pinMode(P5, INPUT);
pcf8574_2.pinMode(P6, INPUT);
pcf8574_2.pinMode(P7, INPUT);

pcf8574_3.pinMode(P0, OUTPUT);
pcf8574_3.pinMode(P1, OUTPUT);
pcf8574_3.pinMode(P2, OUTPUT);
pcf8574_3.pinMode(P3, OUTPUT);
pcf8574_3.pinMode(P4, OUTPUT);
pcf8574_3.pinMode(P5, OUTPUT);
pcf8574_3.pinMode(P6, OUTPUT);
pcf8574_3.pinMode(P7, OUTPUT);

pcf8574_4.pinMode(P0, OUTPUT);
pcf8574_4.pinMode(P1, OUTPUT);
pcf8574_4.pinMode(P2, OUTPUT);
pcf8574_4.pinMode(P3, OUTPUT);
pcf8574_4.pinMode(P4, OUTPUT);
pcf8574_4.pinMode(P5, OUTPUT);
pcf8574_4.pinMode(P6, OUTPUT);
pcf8574_4.pinMode(P7, OUTPUT);

// write confirmation for pcf8574...
  Serial.print("Init pcf8574...");
  if (pcf8574_1.begin()){
    Serial.println("pcf8574_1_OK");
  }else{
    Serial.println("pcf8574_1_KO");
  }

  Serial.print("Init pcf8574...");
  if (pcf8574_2.begin()){
    Serial.println("pcf8574_2_OK");
  }else{
    Serial.println("pcf8574_2_KO");
  }

  Serial.print("Init pcf8574...");
  if (pcf8574_3.begin()){
    Serial.println("pcf8574_3_OK");
  }else{
    Serial.println("pcf8574_3_KO");
  }

  Serial.print("Init pcf8574...");
  if (pcf8574_4.begin()){
    Serial.println("pcf8574_4_OK");
  }else{
    Serial.println("pcf8574_4_KO");
  }

  ETH.begin(ETH_ADDR, ETH_POWER_PIN, ETH_MDC_PIN, ETH_MDIO_PIN, ETH_TYPE, ETH_CLK_MODE); //start with ETH

  // write confirmation for static IP, gateway,subnet,dns1,dns2
  if (ETH.config(local_ip, gateway, subnet, dns, dns) == false) {
    Serial.println("LAN8720 Configuration failed.");
  }else{Serial.println("LAN8720 Configuration success.");}
  
 /* while(!((uint32_t)ETH.localIP())) //wait for IP
  {

  }*/
  Serial.println("Connected");
  Serial.print("IP Address:");
  Serial.println(ETH.localIP());

  Udp.begin(localUdpPort); //begin UDP listener

// Connect to Wi-Fi network with SSID and password
// Serial.print("Connecting to ");
// Serial.println(ssid);
while (!Serial);

  // Using this if Serial debugging is not necessary or not using Serial port
  //while (!Serial && (millis() < 3000));

  Serial.print("\nStarting WebServer on " + String(ARDUINO_BOARD));
  Serial.println(" with " + String(SHIELD_TYPE));
  Serial.println(WEBSERVER_WT32_ETH01_VERSION);

  // To be called before ETH.begin()
  WT32_ETH01_onEvent();

  //bool begin(uint8_t phy_addr=ETH_PHY_ADDR, int power=ETH_PHY_POWER, int mdc=ETH_PHY_MDC, int mdio=ETH_PHY_MDIO,
  //           eth_phy_type_t type=ETH_PHY_TYPE, eth_clock_mode_t clk_mode=ETH_CLK_MODE);
  //ETH.begin(ETH_PHY_ADDR, ETH_PHY_POWER, ETH_PHY_MDC, ETH_PHY_MDIO, ETH_PHY_TYPE, ETH_CLK_MODE);
  ETH.begin(ETH_PHY_ADDR, ETH_PHY_POWER);

  // Static IP, leave without this line to get IP via DHCP
  //bool config(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dns1 = 0, IPAddress dns2 = 0);
// ETH.config(myIP, myGW, mySN, myDNS);
  //WT32_ETH01_waitForConnect();
  server.begin();
}

void loop()
{
uint8_t val1 = pcf8574_1.digitalRead(P0);  
uint8_t val2 = pcf8574_1.digitalRead(P1);
uint8_t val3 = pcf8574_1.digitalRead(P2);
uint8_t val4 = pcf8574_1.digitalRead(P3);
uint8_t val5 = pcf8574_1.digitalRead(P4);
uint8_t val6 = pcf8574_1.digitalRead(P5);
uint8_t val7 = pcf8574_1.digitalRead(P6);
uint8_t val8 = pcf8574_1.digitalRead(P7);

uint8_t val9  = pcf8574_2.digitalRead(P0);
uint8_t val10 = pcf8574_2.digitalRead(P1);
uint8_t val11 = pcf8574_2.digitalRead(P2);
uint8_t val12 = pcf8574_2.digitalRead(P3);
uint8_t val13 = pcf8574_2.digitalRead(P4);
uint8_t val14 = pcf8574_2.digitalRead(P5);
uint8_t val15 = pcf8574_2.digitalRead(P6);
uint8_t val16 = pcf8574_2.digitalRead(P7);

delay(300);


  int packetSize = Udp.parsePacket(); //get package size
  if (packetSize)                     //if have received data
  {
    char buf[packetSize];
    Udp.read(buf, packetSize); //read current data

    Serial.println();
    Serial.print("Received: ");
    Serial.println(buf);
    Serial.print("From IP: ");
    Serial.println(Udp.remoteIP());
    Serial.print("From Port: ");
    Serial.println(Udp.remotePort());

    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); //ready to send data
    Udp.print("Received: ");    
    Udp.write((const uint8_t*)buf, packetSize); //copy data to sender buffer
    Udp.endPacket();            //send data
  }

  WiFiClient client = server.available();   // Listen for incoming clients

  if (client) {                             // If a new client connects,
    Serial.println("New Client.");          // print a message out in the serial port
    String currentLine = "";                // make a String to hold incoming data from the client
    currentTime = millis();
    previousTime = currentTime;
    while (client.connected() && currentTime - previousTime <= timeoutTime) { // loop while the client's connected
      currentTime = millis();        
      if (client.available()) {             // if there's bytes to read from the client,
        char c = client.read();             // read a byte, then
        Serial.write(c);                    // print it out the serial monitor
        header += c;
        if (c == '\n') {                    // if the byte is a newline character
          // if the current line is blank, you got two newline characters in a row.
          // that's the end of the client HTTP request, so send a response:
          if (currentLine.length() == 0) {
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
            // and a content-type so the client knows what's coming, then a blank line:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();
            
           
            // turns 16 relays on and off
            if (header.indexOf("GET /1/on") >= 0) {relay1state = "on";pcf8574_3.digitalWrite(P0, LOW);}
            else if (header.indexOf("GET /1/off") >= 0) {relay1state = "off";pcf8574_3.digitalWrite(P0, HIGH);}
            else if (header.indexOf("GET /2/on") >= 0)  {relay2state = "on";pcf8574_3.digitalWrite(P1, LOW);}
            else if (header.indexOf("GET /2/off") >= 0) {relay2state = "off";pcf8574_3.digitalWrite(P1, HIGH);}
            else if (header.indexOf("GET /3/on") >= 0)  {relay3state = "on";pcf8574_3.digitalWrite(P2, LOW);}
            else if (header.indexOf("GET /3/off") >= 0) {relay3state = "off";pcf8574_3.digitalWrite(P2, HIGH);}        
            else if (header.indexOf("GET /4/on") >= 0)  {relay4state = "on";pcf8574_3.digitalWrite(P3, LOW);}
            else if (header.indexOf("GET /4/off") >= 0) {relay4state = "off";pcf8574_3.digitalWrite(P3, HIGH);}
            else if (header.indexOf("GET /5/on") >= 0)  {relay5state = "on";pcf8574_3.digitalWrite(P4, LOW);}
            else if (header.indexOf("GET /5/off") >= 0) {relay5state = "off";pcf8574_3.digitalWrite(P4, HIGH);}
            else if (header.indexOf("GET /6/on") >= 0)  {relay6state = "on";pcf8574_3.digitalWrite(P5, LOW);}
            else if (header.indexOf("GET /6/off") >= 0) {relay6state = "off";pcf8574_3.digitalWrite(P5, HIGH);}         
            else if (header.indexOf("GET /7/on") >= 0)  {relay7state = "on";pcf8574_3.digitalWrite(P6, LOW);}
            else if (header.indexOf("GET /7/off") >= 0) {relay7state = "off";pcf8574_3.digitalWrite(P6, HIGH);}
            else if (header.indexOf("GET /8/on") >= 0)  {relay8state = "on";pcf8574_3.digitalWrite(P7, LOW);}
            else if (header.indexOf("GET /8/off") >= 0) {relay8state = "off";pcf8574_3.digitalWrite(P7, HIGH);}
            else if (header.indexOf("GET /9/on") >= 0)  {relay9state = "on";pcf8574_4.digitalWrite(P0, LOW);}
            else if (header.indexOf("GET /9/off") >= 0) {relay9state = "off";pcf8574_4.digitalWrite(P0, HIGH);}        
            else if (header.indexOf("GET /10/on") >= 0)  {relay10state = "on";pcf8574_4.digitalWrite(P1, LOW);}
            else if (header.indexOf("GET /10/off") >= 0) {relay10state = "off";pcf8574_4.digitalWrite(P1, HIGH);}
            else if (header.indexOf("GET /11/on") >= 0)  {relay11state = "on";pcf8574_4.digitalWrite(P2, LOW);}
            else if (header.indexOf("GET /11/off") >= 0) {relay11state = "off";pcf8574_4.digitalWrite(P2, HIGH);}
            else if (header.indexOf("GET /12/on") >= 0)  {relay12state = "on";pcf8574_4.digitalWrite(P3, LOW);}
            else if (header.indexOf("GET /12/off") >= 0) {relay12state = "off";pcf8574_4.digitalWrite(P3, HIGH);}
            else if (header.indexOf("GET /13/on") >= 0)  {relay13state = "on";pcf8574_4.digitalWrite(P4, LOW);}
            else if (header.indexOf("GET /13/off") >= 0) {relay13state = "off";pcf8574_4.digitalWrite(P4, HIGH);}
            else if (header.indexOf("GET /14/on") >= 0)  {relay14state = "on";pcf8574_4.digitalWrite(P5, LOW);}
            else if (header.indexOf("GET /14/off") >= 0) {relay14state = "off";pcf8574_4.digitalWrite(P5, HIGH);}
            else if (header.indexOf("GET /15/on") >= 0)  {relay15state = "on";pcf8574_4.digitalWrite(P6, LOW);}
            else if (header.indexOf("GET /15/off") >= 0) {relay15state = "off";pcf8574_4.digitalWrite(P6, HIGH);}
            else if (header.indexOf("GET /16/on") >= 0)  {relay16state = "on";pcf8574_4.digitalWrite(P7, LOW);}
            else if (header.indexOf("GET /16/off") >= 0) {relay16state = "off";pcf8574_4.digitalWrite(P7, HIGH);}
      
            else if (header.indexOf("GET /read") >= 0) flag_read_di=1;
            else if (header.indexOf("GET /all/on") >= 0)
            {
              relay1state = "on";// state of relay1
              relay2state = "on";// state of relay2
              relay3state = "on";// state of relay3
              relay4state = "on";// state of relay4
              relay5state = "on";// state of relay5
              relay6state = "on";// state of relay6
              relay7state = "on";// state of relay7
              relay8state = "on";// state of relay8

              relay9state = "on";// state of relay9
              relay10state = "on";// state of relay10
              relay11state = "on";// state of relay11
              relay12state = "on";// state of relay12
              relay13state = "on";// state of relay13
              relay14state = "on";// state of relay14
              relay15state = "on";// state of relay15
              relay16state = "on";// state of relay16
              for(int i=0;i<=7;i++)
              {
                 pcf8574_3.digitalWrite(i, LOW);
                 pcf8574_4.digitalWrite(i, LOW);
              }
             
            }
            else if (header.indexOf("GET /all/off") >= 0)
            {
              relay1state = "off";// state of relay1
              relay2state = "off";// state of relay2
              relay3state = "off";// state of relay3
              relay4state = "off";// state of relay4
              relay5state = "off";// state of relay5
              relay6state = "off";// state of relay6
              relay7state = "off";// state of relay7
              relay8state = "off";// state of relay8

              relay9state = "off";// state of relay9
              relay10state = "off";// state of relay10
              relay11state = "off";// state of relay11
              relay12state = "off";// state of relay12
              relay13state = "off";// state of relay13
              relay14state = "off";// state of relay14
              relay15state = "off";// state of relay15
              relay16state = "off";// state of relay16


              for(int i=0;i<=7;i++)
              {
                 pcf8574_3.digitalWrite(i, HIGH);
                 pcf8574_4.digitalWrite(i, HIGH);
              }
              
            }
            // Display the HTML web page for Outputs
            client.println("<!DOCTYPE html><html>");
            client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
            client.println("<link rel=\"icon\" href=\"data:,\">");
            // CSS to style the on/off buttons
            // Feel free to change the background-color and font-size attributes to fit your preferences
            client.println("<style>html { font-family: Helvetica; display: inline-block; border: 3px solid green;margin: 0px 15px;text-align: center;font-size: 10px;}");
            client.println(".button { background-color: #195B00; border-radius: 10px;color: white; padding: 10px 40px;");
            client.println("text-decoration: none; font-size: 20px; margin: 2px;text-align: center; cursor: pointer;}");
            client.println(".button2 {background-color: #77878A;}</style></head>");
           
            if (flag_read_di==1)
            {
              client.println(" relay1:" + relay1state + " relay2:" + relay2state + " relay3:" + relay3state + " relay4:" + relay4state + " relay5:" + relay5state + " relay6:" + relay6state + " relay7:" + relay7state + " relay8:" + relay8state + " relay9:" + relay9state + " relay10:" + relay10state + " relay11:" + relay11state + " relay12:" + relay12state + " relay13:" + relay13state + " relay14:" + relay14state + " relay15:" + relay15state + " relay16:" + relay16state);
            }
            else
            {
            
            // Web Page Heading
            client.println("<body><h1>Web Server</h1>");

            // Display current state, and ON/OFF buttons for relay
            //client.println("<p>relay1 - State " + relay1state + "</p>");
            // If the relay is off, it displays the ON button     
            if (relay1state == "off") client.println("<a href=\"/1/on\"><button class=\"button\">01-OFF</button></a>"); else client.println("<a href=\"/1/off\"><button class=\"button\">01--ON </button></a>");
            if (relay2state == "off") client.println("<a href=\"/2/on\"><button class=\"button\">02-OFF</button></a>"); else client.println("<a href=\"/2/off\"><button class=\"button\">02--ON </button></a>");                                
            if (relay3state == "off") client.println("<a href=\"/3/on\"><button class=\"button\">03-OFF</button></a>"); else client.println("<a href=\"/3/off\"><button class=\"button\">03--ON </button></a>");
            if (relay4state == "off") client.println("<a href=\"/4/on\"><button class=\"button\">04-OFF</button></a>"); else client.println("<a href=\"/4/off\"><button class=\"button\">04--ON </button></a>");
            if (relay5state == "off") client.println("<a href=\"/5/on\"><button class=\"button\">05-OFF</button></a>"); else client.println("<a href=\"/5/off\"><button class=\"button\">05--ON </button></a>");
            if (relay6state == "off") client.println("<a href=\"/6/on\"><button class=\"button\">06-OFF</button></a>"); else client.println("<a href=\"/6/off\"><button class=\"button\">06--ON </button></a>");                                
            if (relay7state == "off") client.println("<a href=\"/7/on\"><button class=\"button\">07-OFF</button></a>"); else client.println("<a href=\"/7/off\"><button class=\"button\">07--ON </button></a>");
            if (relay8state == "off") client.println("<a href=\"/8/on\"><button class=\"button\">08-OFF</button></a>"); else client.println("<a href=\"/8/off\"><button class=\"button\">08--ON </button></a>");
            if (relay9state == "off") client.println("<a href=\"/9/on\"><button class=\"button\">09-OFF</button></a>"); else client.println("<a href=\"/9/off\"><button class=\"button\">09--ON </button></a>");
            if (relay10state == "off") client.println("<a href=\"/10/on\"><button class=\"button\">10-OFF</button></a>"); else client.println("<a href=\"/10/off\"><button class=\"button\">10--ON</button></a>");                                
            if (relay11state == "off") client.println("<a href=\"/11/on\"><button class=\"button\">11-OFF</button></a>"); else client.println("<a href=\"/11/off\"><button class=\"button\">11--ON</button></a>");
            if (relay12state == "off") client.println("<a href=\"/12/on\"><button class=\"button\">12-OFF</button></a>"); else client.println("<a href=\"/12/off\"><button class=\"button\">12--ON</button></a>");
            if (relay13state == "off") client.println("<a href=\"/13/on\"><button class=\"button\">13-OFF</button></a>"); else client.println("<a href=\"/13/off\"><button class=\"button\">13--ON</button></a>");
            if (relay14state == "off") client.println("<a href=\"/14/on\"><button class=\"button\">14-OFF</button></a>"); else client.println("<a href=\"/14/off\"><button class=\"button\">14--ON</button></a>");                                
            if (relay15state == "off") client.println("<a href=\"/15/on\"><button class=\"button\">15-OFF</button></a>"); else client.println("<a href=\"/15/off\"><button class=\"button\">15--ON</button></a>");
            if (relay16state == "off") client.println("<a href=\"/16/on\"><button class=\"button\">16-OFF</button></a>"); else client.println("<a href=\"/16/off\"><button class=\"button\">16--ON</button></a>");

              client.println("<a href=\"/all/on\"><button class=\"button\">All--ON</button></a>");
              client.println("<a href=\"/all/off\"><button class=\"button\">All-OFF</button></a>");
            } 

            client.println("</body></html>");
           
            // The HTTP response ends with another blank line
            client.println();
            // Break out of the while loop
            break;
          } else { // if you got a newline, then clear currentLine
            currentLine = "";
          }
        } else if (c != '\r') {  // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }
      }
    }
    // Clear the header variable
    header = "";
    // Close the connection
    client.stop();
    Serial.println("Client disconnected.");
    Serial.println("");
    flag_read_di=0;
  }


  ScanKey();            //scan key
}

void ScanKey()           
{
  for(int i=0;i<=7;i++)
  {
    if(pcf8574_1.digitalRead(i) == LOW)         //key pressed
      {
        delay(20);                       
        if(pcf8574_1.digitalRead(i) == LOW)       //key pressed again
        {
          pcf8574_3.digitalWrite(i,!pcf8574_3.digitalRead(i));    // toggle relay1 state    
          while(pcf8574_1.digitalRead(i) == LOW); //wait remove hand
          if (pcf8574_3.digitalRead(i) == LOW) relaystate[i+1]="on";else relaystate[i+1]="off";
        }
      }
  }



    for(int j=0;j<=7;j++)
  {
    if(pcf8574_2.digitalRead(j) == LOW)         //key pressed
      {
        delay(20);                      
        if(pcf8574_2.digitalRead(j) == LOW)       //key pressed again
        {
          pcf8574_4.digitalWrite(j,!pcf8574_4.digitalRead(j));    // toggle relay1 state    
          while(pcf8574_2.digitalRead(j) == LOW); //wait remove hand
          if (pcf8574_4.digitalRead(j) == LOW) relaystate[j+8]="on";else relaystate[j+8]="off";
       
        }
      }
  }

} 

Just get one working to start with.

In the example above the LED is on or off... that's effectively a boolean value... true or false.

Can Arduino sketch work with byte or word (16bit) as that would be an option to use to send the data to and from the web server page for status of the switches and use to set the variables.

Sorry again as I am new to Arduino IDE as I am used to PLC programming language.

As I understand Arduino normally use
int8_t
int16_t

Is that correct.?

Arduino can handle lots of different data types.

You could send a single byte to a webserver, and based on that byte you set 8 switches (one for each bit).

You could send variables for each switch via the URL. Like http://192.168.1.100/setswitches?sw1=on&sw2=off&sw3=on

There are lots way to do what you want. Start with setting a single boolean value via the website.

will do, thanks :+1: :slightly_smiling_face:

I got my challenge sorted out, thanks for your suggestions, they were helpfully to get me in the right direction. :hugs:

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.