Go Down

Topic: nodemcu- riaccende relè dopo spengimento (Read 52 times) previous topic - next topic

ATTILA666999

saluti a tutti, ho un problema che non riesco a venirne a capo, ho scritto uno scheck per NODEMCU che tramite vari pulsanti accende dei relè e funziona bene.
Però successivamente 'ho integrato con la gestione server/client e dal client invio un comando ( (request == "8") è evidenziato sul codice) che spenge tutti i relè insieme, il comando effettivamente li spenge ma poi li rimette nello stato in cui erano prima del comando, ho fatto varie prove (sono "remmate" nel codice) ma non ne funziona uno, riaccende sempre i relè che erano prima accesi, (ovviamente i pulsanti da val1~ val5 sono scollegati) potete cortesemente illuminarmi ? 
Code: [Select]

#include <SPI.h>
#include <ESP8266WiFi.h>

//1 pulsante
#define LED1 0                // LED collegato al pin digitale
#define BUTTON1 12              // pin di input dove è collegato il pulsante
byte val1 = 0;                  // si userà val per conservare lo stato del pin di input
byte vecchio_val1 = 0;          // si userà vecchio_val per conservare lo stato del pin di input al passo precedente
byte stato1 = 0;                // ricorda lo stato in cui si trova il led, stato = 0 led spento, stato = 1 led acceso

//2 pulsante
#define LED2 2                // LED collegato al pin digitale
#define BUTTON2 13              // pin di input dove è collegato il pulsante
byte val2 = 0;                  // si userà val per conservare lo stato del pin di input
byte vecchio_val2 = 0;          // si userà vecchio_val per conservare lo stato del pin di input al passo precedente
byte stato2 = 0;                // ricorda lo stato in cui si trova il led, stato = 0 led spento, stato = 1 led acceso

byte StatoRele1 = 0;
byte StatoRele2 = 0;
byte StatoRele3 = 0;
byte StatoRele4 = 0;
byte StatoRele5 = 0;

byte Change = 0;

char ssid[] = "xxxxxxxxxx";               // SSID of your home WiFi
char pass[] = "xxxxxxxxx";               // password of your home WiFi

WiFiServer server(80);

IPAddress ip(192, 168, 1, 11);            // IP address of the server
IPAddress gateway(192, 168, 1, 254);        // gateway of your network
IPAddress subnet(255, 255, 255, 0);       // subnet mask of your network

void setup() {
  Serial.begin(115200);                   // only for debug
  WiFi.config(ip, gateway, subnet);       // forces to use the fix IP
  WiFi.begin(ssid, pass);                 // connects to the WiFi router
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }
  Serial.print("Connessione avvenuta");
  server.begin();
  // Print the IP address
  Serial.print(WiFi.localIP());


  //1 pulsante
  pinMode(LED1, OUTPUT);       // imposta il pin digitale come output
  pinMode(BUTTON1, INPUT);     // imposta il pin digitale come input

  //2 pulsante
  pinMode(LED2, OUTPUT);       // imposta il pin digitale come output
  pinMode(BUTTON2, INPUT);     // imposta il pin digitale come input

 

  digitalWrite(LED1, HIGH);
  digitalWrite(LED2, HIGH);
  digitalWrite(LED3, HIGH);
  digitalWrite(LED4, HIGH);
  digitalWrite(LED5, HIGH);

}

void loop () {

  WiFiClient client = server.available();
  val1 = digitalRead(BUTTON1);  // legge il valore dell'input e lo conserva
  val2 = digitalRead(BUTTON2);  // legge il valore dell'input e lo conserva
  val3 = digitalRead(BUTTON3);  // legge il valore dell'input e lo conserva
  val4 = digitalRead(BUTTON4);  // legge il valore dell'input e lo conserva
  val5 = digitalRead(BUTTON5);  // legge il valore dell'input e lo conserva

  //comandi in entrata dal client---------------------------------------------------------------------------------------
  if (client) {
    if (client.connected()) {
      //Serial.println(".");
      // ricezione messaggio dal client
      String request = client.readStringUntil('\r');

      if (request == "0") {
        StatoRele1 = digitalRead(LED1);
        StatoRele2 = digitalRead(LED2);
        StatoRele3 = digitalRead(LED3);
        StatoRele4 = digitalRead(LED4);
        StatoRele5 = digitalRead(LED5);
        //Invio stato pulsanti
        client.print(String(StatoRele1) + String(StatoRele2) + String(StatoRele3) + String(StatoRele4) + String(StatoRele5));
        delay(100);
      }

      // comando da client per spengere tutti i relè------------------------------------------
      if (request == "8") {
// Prova 1
        if (digitalRead(LED1) == HIGH)  stato1  = 0;
        if (digitalRead(LED2) == HIGH)  stato2  = 0;
        if (digitalRead(LED3) == HIGH)  stato3  = 0;
        if (digitalRead(LED4) == HIGH)  stato4  = 0;
        if (digitalRead(LED5) == HIGH)  stato5  = 0;

// Prova 2
        /*if (digitalRead(LED1) == HIGH)  vecchio_val1 = 0;
          if (digitalRead(LED2) == HIGH)  vecchio_val2 = 0;
          if (digitalRead(LED3) == HIGH)  vecchio_val3 = 0;
          if (digitalRead(LED4) == HIGH)  vecchio_val4 = 0;
          if (digitalRead(LED5) == HIGH)  vecchio_val5 = 0;*/

//Prova 3
        /*digitalWrite(LED1, HIGH);
          digitalWrite(LED2, HIGH);
          digitalWrite(LED3, HIGH);
          digitalWrite(LED4, HIGH);
          digitalWrite(LED5, HIGH);*/

      }




      if (request == "1") {
        val1 = HIGH;
      }

      if (request == "2") {
        val2 = HIGH;
      }

      if (request == "3") {
        val3 = HIGH;
      }

      if (request == "4") {
        val4 = HIGH;
      }

      if (request == "5") {
        val5 = HIGH;
      }

    }
    client.flush();
    client.stop();
  }

  //comandi in entrata dal pulsante-------------------------------------------------------------------------------------

  // 1 pulsante--------------------------------------
  if ((val1 == HIGH) && (vecchio_val1 == LOW)) {
    stato1 = 1 - stato1;
    delay(15);                // attesa di 15 millisecondi
  }
  vecchio_val1 = val1;            // ricordiamo il valore precedente di val
  if (stato1 == 1) {
    delay(15);
    digitalWrite(LED1, LOW);   // accende il led
  }
  else {
    delay(15);
    digitalWrite(LED1, HIGH);    //spegne il led
  }


  // 2 pulsante-----------------------------------
  if ((val2 == HIGH) && (vecchio_val1 == LOW)) {
    stato2 = 1 - stato2;
    delay(15);                // attesa di 15 millisecondi
  }
  vecchio_val2 = val2;            // ricordiamo il valore precedente di val
  if (stato2 == 1) {
    delay(15);
    digitalWrite(LED2, LOW);   // accende il led
  }
  else {
    delay(15);
    digitalWrite(LED2, HIGH);    //spegne il led
  }



}


p.s. ho dovuto cancellare i pulsanti e relè dal n° 3 al 5 perchè il post era troppo lungo e non lo pubblicava, comunque non servono per l'analisi visto che si ripetono

ATTILA666999

#1
Apr 07, 2019, 05:56 pm Last Edit: Apr 07, 2019, 06:12 pm by ATTILA666999
..

Go Up