Disturbi su Pin IN con resistenze Pull Down

Buongiorno , sapete indicarmi un link alla mia domanda o rispondermi direttamente ?. Ho vari ingressi di Arduino mega collegati come in foto a dei pulsanti e resistenze pull down da 10 khom . Ad ogni pulsante è collegata un uscita che pilota un relè ottico ( alimentato separatamente da Arduino usando JD Vcc) per accendere dei led a 24 V , mi ritrovo spesso che pur non avendo premuto il pulsante il relè si trovi ad uno stato chiuso e quindi accenda la luce . Avevo pensato di abbassare la resistenza per avere un maggiore scarico oppure di inserire un diodo (anche led non necessario che si accenda) tra la resistenza e l'ingresso , come da freccia in foto , per non avere ritorni di segnale magari da un altro ingresso , premetto che non vengono mai premuti due pulsanti contemporaneamente , altrimenti non mi spiego per quale motivo avvengano questi disturbi nei pin definiti Digital IN da sketch . Grazie a chi può aiutarmi.

Se usi i pulldown devi disabilitare i pullup interni da 50k altrimenti ti ritrovi con 0.8V, oppure diminuisci le PD a 1K

Quello che dice OP è impossibile
Anche Icio, 0,8V non sono HIGH nemmeno per CPU a 3V3... E non capisco perché dover taroccare i valori, il problema è altrove

Quindi OP spiega di nuovo il problema, ricontrolla schema e mostra programma

Grazie Icio , quindi devo cambiare le resistenza da 10Khom a 1kHom il che non è un problema ma mi richiede tempo per risaldare le schede millefori che ho usato , eventualmente come posso disabilitare i pull up interni da 50 K ? così imparo una cosa nuova ? grazie mille .

ok , ora ricontrollo schema ( ma ho già controllato più volte con tester il valore delle resistenze e collegamenti ) e vi mando il programma , in ogni caso a volte mi trovo con delle luci accese in modo casuale e ieri dopo il temporale le ho trovate praticamente tutte accese , premetto che sto usando due arduino mega , hanno entrambi il solito problema ma ho notato che uno ha di più di disturbi , gli Arduino sono alimentati separatamente ed hanno praticamente la solita struttura di sketch . Anche per me è impossibile che avvenga ciò , è per questo che mi sono rivolto al Forum .

scusami ma per inviare il programma faccio un copia incolla o esiste una strada più consona ? grazie mille

Fai copia/incolla e lo racchiudi (obbligatoriamente) tra i tag "code" ovvero ... dopo averlo copiato, selezioni la parte di codice e premi l'icona <code/> nella barra degli strumenti per contrassegnarla, appunto, come codice. Non solo, ma, al fine di rendere il codice più leggibile, assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac, sempre all'interno del IDE).

Guglielmo

Quanto sono lunghi i fili dei pulsanti e dove passano?

Quella bobina messa lì così sembra più che altro per produrre extratensioni... :slight_smile:
I diodi sono già presenti su ogni ingresso.

È che portare in giro direttamente i 5V della logica non è che sia tanto meglio, almeno qualche burst RF viene risparmiato.

per me prima bisogna vedere il sorgente del programma

e solo dopo discutere di eventuali problemi

io non ho mai sentito di problemi del gensere "senza" un problema al cablaggio e/o alla logica

non sarebbe male nemmeno una foto del cablaggio

per OP: considera fatta la richiesta della foto

// ZONA GIORNO ARDUINO MEGA COM 5
#include <LiquidCrystal_I2C.h>
#define LED_PIN 3

int SRTraviVeranda = 0;
int SRTraveEsternaVeranda = 0;
int SRPresaPilotataVeranda = 0;
int SRLuciAlte = 0;
int SRTavoloCucina = 0;
int SRMensolaSXCucina = 0;
int SRMensolaDXCucina = 0;
int SRTraviCucina = 0;
int SRIngressoTravi = 0;
int SRScala = 0;
int SRIngressoLampadario = 0;
int SRTraveSoppalco = 0;
int SRTraveDoppia = 0;
int SRTraveMedia = 0;
int SRPresaPilotataSala = 0;
// Veranda
#define  pTraviVeranda  39
#define TraviVeranda  22
#define pTraveEsternaVeranda  40
#define  TraveEsternaVeranda  23
#define pPresaPilotataVeranda  41
#define PresaPilotataVeranda  24
//Cucina
#define pLuciAlte 42
#define LuciAlte 25
#define pTavoloCucina 43
#define TavoloCucina 26
#define pMensolaSXCucina 44
#define MensolaSXCucina 27
#define pMensolaDXCucina 45
#define MensolaDXCucina 28
#define pTraviCucina 46
#define TraviCucina 29
//Ingresso
#define pIngressoTravi 47
#define IngressoTravi 30
#define pScala 48
#define Scala 31
#define pIngressoLampadario 49
#define IngressoLampadario 32
//Sala
#define pTraveSoppalco 50
#define TraveSoppalco 33
#define pTraveDoppia 51
#define TraveDoppia 34
#define pTraveMedia 52
#define TraveMedia 35
#define pPresaPilotataSala 53
#define PresaPilotataSala 36
// Allarme e spegni tutto
#define pSpegniTutto 37
#define pAllarme 38


#define z = 1 // Variabile di intervallo fliccheraggio pulsanti
#define a = 1  //Variabile di intervallo per luci allarme
#define b = 1   //Variante di intervallo per spegni tutto
int uscitarele = 1000;
int pulsantepremuto = 0;
int uscita = 0;
int statoprecedente = 99;
String SERIALE = "";

LiquidCrystal_I2C lcd ( 0x27, 20, 4 );
String riga1 = "Benvenuti da Alberto";
String riga2 = "Lucia               ";
String riga3 = "Samuele             ";
String riga4 = "Tommaso             ";
String azione = "                    ";


void setup() {
   lcd.init();
   lcd.backlight();
   lcd.clear();
   pinMode ( LED_PIN, OUTPUT );
   analogWrite ( LED_PIN, 20 );
   lcd.setCursor ( 0, 0 );
   typewriting ( riga1 );
   lcd.setCursor ( 0, 1 );
   typewriting ( riga2 );
   lcd.setCursor ( 0, 2 );
   typewriting ( riga3 );
   lcd.setCursor ( 0, 3 );
   typewriting ( riga4 );
   delay ( 100 );
   analogWrite ( LED_PIN, 5 );


   //Veranda
   pinMode ( pTraviVeranda, INPUT ); // Travi Centrali 5V Ingresso 39
   digitalWrite ( pTraviVeranda, LOW );
   pinMode ( TraviVeranda, OUTPUT ); // Travi Centrali 24V
   digitalWrite ( TraviVeranda, LOW );
   pinMode ( pTraveEsternaVeranda, INPUT ); // Trave esterna 5V
   digitalWrite ( pTraveEsternaVeranda, LOW );
   pinMode ( TraveEsternaVeranda, OUTPUT ); // Trave esterna 24V
   digitalWrite ( TraveEsternaVeranda, LOW );
   pinMode ( pPresaPilotataVeranda, INPUT ); // Presa pilotata angolo 5V
   digitalWrite ( pPresaPilotataVeranda, LOW );
   pinMode ( PresaPilotataVeranda, OUTPUT ); // Presa pilotata angolo 24V
   digitalWrite ( PresaPilotataVeranda, LOW );
   //Cucina
   pinMode ( pLuciAlte, INPUT ); // Luci alte 5V
   digitalWrite ( pLuciAlte, LOW );
   pinMode ( LuciAlte, OUTPUT ); // Luci alte 220V
   digitalWrite ( LuciAlte, LOW );
   pinMode ( pTavoloCucina, INPUT ); // Tavolo 5V
   digitalWrite ( pTavoloCucina, LOW );
   pinMode ( TavoloCucina, OUTPUT ); // Tavolo 220V
   digitalWrite ( TavoloCucina, LOW );
   pinMode ( pMensolaSXCucina, INPUT ); // Mensola SX 5V
   digitalWrite ( pMensolaSXCucina, LOW );
   pinMode ( MensolaSXCucina, OUTPUT ); // Mensola SX 24V
   digitalWrite ( MensolaSXCucina, LOW );
   pinMode ( pMensolaDXCucina, INPUT ); // Mensola DX 5V
   digitalWrite ( pMensolaDXCucina, LOW );
   pinMode ( MensolaDXCucina, OUTPUT ); // Mensola DX 24V
   digitalWrite ( MensolaDXCucina, LOW );
   pinMode ( pTraviCucina, INPUT ); // Travi 5V
   digitalWrite ( pTraviCucina, LOW );
   pinMode ( TraviCucina, OUTPUT ); // Travi 24V
   digitalWrite ( TraviCucina, LOW );
   // SALA


   pinMode ( pTraveSoppalco, INPUT ); // Trave Soppalco 5V
   digitalWrite ( pTraveSoppalco, LOW );
   pinMode ( TraveSoppalco, OUTPUT ); // Trave Soppalco 24V
   digitalWrite ( TraveSoppalco, LOW );
   pinMode ( pTraveDoppia, INPUT ); // Trave Alta + Bassa 5V
   digitalWrite ( pTraveDoppia, LOW );
   pinMode ( TraveDoppia, OUTPUT ); // Trave Alta + Bassa 24V
   digitalWrite ( TraveDoppia, LOW );
   pinMode ( pTraveMedia, INPUT ); // Trave Media 5V
   digitalWrite ( pTraveMedia, LOW );
   pinMode ( TraveMedia, OUTPUT ); // Trave Media 24V
   digitalWrite ( TraveMedia, LOW );
   pinMode ( pPresaPilotataSala, INPUT ); // Presa Pilotata 5V
   digitalWrite ( pPresaPilotataSala, LOW );
   pinMode ( PresaPilotataSala, OUTPUT ); // Presa Pilotata 24V
   digitalWrite ( PresaPilotataSala, LOW );



   //Ingresso
   pinMode ( pIngressoTravi, INPUT ); // Travi 5V
   digitalWrite ( pIngressoTravi, LOW );
   pinMode ( IngressoTravi, OUTPUT ); // Travi 24V
   digitalWrite ( IngressoTravi, LOW );
   pinMode ( pScala, INPUT ); // Scala 5V
   digitalWrite ( pScala, LOW );
   pinMode ( Scala, OUTPUT ); // Scala 24V
   digitalWrite ( Scala, LOW );
   pinMode ( pIngressoLampadario, INPUT ); // Lampadario 5V
   digitalWrite ( pIngressoLampadario, LOW );
   pinMode ( IngressoLampadario, OUTPUT ); // Lampadario 24V
   digitalWrite ( IngressoLampadario, LOW );


   //Allarme sPEGNI TUTTO

   pinMode ( pAllarme, INPUT ); // Allarme
   digitalWrite ( pAllarme, LOW );
   pinMode ( pSpegniTutto, INPUT ); // Spegni tutto
   digitalWrite ( pSpegniTutto, LOW );









   Serial.begin ( 9600 );
   Serial.println();
   Serial.print ( "               Ok ripartiamo" ); Serial.println();

   Serial.println();
   Serial.print ( "Travi veranda stato iniziale          > " ); Serial.print ( SRTraviVeranda ); Serial.println();
   Serial.print ( "Travi veranda esterna stato iniziale  > " ); Serial.print ( SRTraveEsternaVeranda ); Serial.println();
   Serial.print ( "Presa Pilotata  stato iniziale        > " ); Serial.print ( SRPresaPilotataVeranda ); Serial.println();
   Serial.print ( "Cucina travi alte stato iniziale      > " ); Serial.print ( SRLuciAlte ); Serial.println();
   Serial.print ( "Cucina Tavolo  stato iniziale         > " ); Serial.print ( SRTavoloCucina ); Serial.println();
   Serial.print ( "Cucina Mensola SX stato iniziale      > " ); Serial.print ( SRMensolaSXCucina ); Serial.println();
   Serial.print ( "Cucina mensola DX stato iniziale      > " ); Serial.print ( SRMensolaDXCucina ); Serial.println();
   Serial.print ( "Cucina travi stato iniziale           > " ); Serial.print ( SRTraviCucina ); Serial.println();
   Serial.print ( "Ingresso Travi stato iniziale         > " ); Serial.print ( SRIngressoTravi ); Serial.println();
   Serial.print ( "Scala stato iniziale                  > " ); Serial.print ( SRScala ); Serial.println();
   Serial.print ( "Ingresso lampadario stato iniziale    > " ); Serial.print ( SRIngressoLampadario ); Serial.println();
   Serial.print ( "Sala trave soppalco stato iniziale    > " ); Serial.print ( SRTraveSoppalco ); Serial.println();
   Serial.print ( "Sala Trave doppia stato iniziale      > " ); Serial.print ( SRTraveDoppia ); Serial.println();
   Serial.print ( "Sala trave media stato iniziale       > " ); Serial.print ( SRTraveMedia ); Serial.println();
   Serial.print ( "sala Presa pilotata stato iniziale    > " ); Serial.print ( SRPresaPilotataSala ); Serial.println();
   Serial.print ( "#-------------------------------------------------#" ); Serial.println(); Serial.println();


   // Veranda
}

void loop() {

   // Allarme 38 zona Notte
   //int ComunicazioneAllarme=37;
   //Spegni Tutto 37 Notte

   // Veranda trave centrale:
   if ( digitalRead ( pTraviVeranda ) == HIGH && SRTraviVeranda == 0 ) {
      digitalWrite ( TraviVeranda, HIGH );
      // "Benvenuti da Alberto";
      azione = "Veranda Travi CX OFF";
      statoprecedente = SRTraviVeranda;
      pulsantepremuto = pTraviVeranda;
      uscitarele = TraviVeranda;
      PRIMA();
      Scrivi_su_LCD();
      SRTraviVeranda = 1;
      DOPO();

   };

   if ( digitalRead ( pTraviVeranda ) == HIGH && SRTraviVeranda == 1 ) {
      digitalWrite ( TraviVeranda, LOW );
      // "--------------------";
      azione = "Veranda Travi CX  ON";
      statoprecedente = SRTraviVeranda;
      pulsantepremuto = pTraviVeranda;
      uscitarele = TraviVeranda;
      PRIMA();
      Scrivi_su_LCD();
      SRTraviVeranda = 0;
      DOPO();

   };

   // Veranda Trave Esterna:

   if ( digitalRead ( pTraveEsternaVeranda ) == HIGH && SRTraveEsternaVeranda == 0 ) {
      digitalWrite ( TraveEsternaVeranda, HIGH );
      // "Benvenuti da Alberto";
      azione = "Verand Trave EST OFF";
      statoprecedente = SRTraveEsternaVeranda;
      pulsantepremuto = pTraveEsternaVeranda;
      uscitarele = TraveEsternaVeranda;
      PRIMA();
      Scrivi_su_LCD();
      SRTraveEsternaVeranda = 1;
      DOPO();
   };

   if ( digitalRead ( pTraveEsternaVeranda ) == HIGH && SRTraveEsternaVeranda == 1 ) {
      digitalWrite ( TraveEsternaVeranda, LOW );
      // "Benvenuti da Alberto";
      azione = "Veranda Trave EST ON";
      statoprecedente = SRTraveEsternaVeranda;
      pulsantepremuto = pTraveEsternaVeranda;
      uscitarele = TraveEsternaVeranda;
      PRIMA ();
      Scrivi_su_LCD();
      SRTraveEsternaVeranda = 0;
      DOPO();
   };
   // Veranda presa Pilotata:
   if ( digitalRead ( pPresaPilotataVeranda ) == HIGH && SRPresaPilotataVeranda == 0 ) {
      digitalWrite ( PresaPilotataVeranda, HIGH );
      // "Benvenuti da Alberto";
      azione = "Ver Pres Pilotat OFF";
      statoprecedente = SRPresaPilotataVeranda;
      pulsantepremuto = pPresaPilotataVeranda;
      uscitarele = PresaPilotataVeranda;
      PRIMA();
      Scrivi_su_LCD();
      SRTraveEsternaVeranda = 1;
      DOPO();
   };
   if ( digitalRead ( pPresaPilotataVeranda ) == HIGH && SRPresaPilotataVeranda == 1 ) {
      digitalWrite ( PresaPilotataVeranda, LOW );
      // "Benvenuti da Alberto";
      azione = "Ver Pres Pilotata ON";
      statoprecedente = SRPresaPilotataVeranda;
      pulsantepremuto = pPresaPilotataVeranda;
      uscitarele = PresaPilotataVeranda;
      PRIMA();
      Scrivi_su_LCD();
      SRPresaPilotataVeranda = 0;
      DOPO();
   };

   // Cucina Luci Alte:
   if ( digitalRead ( pLuciAlte ) == HIGH && SRLuciAlte == 0 ) {
      digitalWrite ( LuciAlte, HIGH );
      // "Benvenuti da Alberto";
      azione = "Cucina Lampade   OFF";
      statoprecedente = SRLuciAlte;
      pulsantepremuto = pLuciAlte;
      uscitarele = LuciAlte;
      PRIMA();
      Scrivi_su_LCD();
      SRLuciAlte = 1;
      DOPO();
   };

   if ( digitalRead ( pLuciAlte ) == HIGH && SRLuciAlte == 1 ) {
      digitalWrite ( LuciAlte, LOW );
      // "Benvenuti da Alberto";
      azione = "Cucina lampade    ON";
      statoprecedente = SRLuciAlte;
      pulsantepremuto = pLuciAlte;
      uscitarele = LuciAlte;
      PRIMA();
      Scrivi_su_LCD();
      SRLuciAlte = 0;
      DOPO();
   };
   // Cucina Luci Tavolo:
   if ( digitalRead ( pTavoloCucina ) == HIGH && SRTavoloCucina == 0 ) {
      digitalWrite ( TavoloCucina, HIGH );
      // "Benvenuti da Alberto";
      azione = "Cucina Tavolo    OFF";
      statoprecedente = SRTavoloCucina;
      pulsantepremuto = pTavoloCucina;
      uscitarele = TavoloCucina;
      PRIMA();
      Scrivi_su_LCD();
      SRTavoloCucina = 1;
      DOPO();
   };

   if ( digitalRead ( pTavoloCucina ) == HIGH && SRTavoloCucina == 1 ) {
      digitalWrite ( TavoloCucina, LOW );
      // "Benvenuti da Alberto";
      azione = "Cucina Tavolo     ON";
      statoprecedente = SRTavoloCucina;
      pulsantepremuto = pTavoloCucina;
      uscitarele = TavoloCucina;
      PRIMA();
      Scrivi_su_LCD();
      SRTavoloCucina = 0;
      DOPO();
   };

   // Cucina mensola SX:
   if ( digitalRead ( pMensolaSXCucina ) == HIGH && SRMensolaSXCucina == 0 ) {
      digitalWrite ( MensolaSXCucina, HIGH );
      // "Benvenuti da Alberto";
      azione = "Cucina Mensol SX OFF";
      statoprecedente = SRMensolaSXCucina;
      pulsantepremuto = pMensolaSXCucina;
      uscitarele = MensolaSXCucina;
      PRIMA();
      Scrivi_su_LCD();
      SRMensolaSXCucina = 1;
      DOPO();
   };

   if ( digitalRead ( pMensolaSXCucina ) == HIGH && SRMensolaSXCucina == 1 ) {
      digitalWrite ( MensolaSXCucina, LOW );
      // "Benvenuti da Alberto";
      azione = "Cucina Mensola SX ON";
      statoprecedente = SRMensolaSXCucina;
      pulsantepremuto = pMensolaSXCucina;
      uscitarele = MensolaSXCucina;
      PRIMA();
      Scrivi_su_LCD();
      SRMensolaSXCucina = 0;
      DOPO();
   };

   // Cucina mensole DX:
   if ( digitalRead ( pMensolaDXCucina ) == HIGH && SRMensolaDXCucina == 0 ) {
      digitalWrite ( MensolaDXCucina, HIGH );
      // "Benvenuti da Alberto";
      azione = "Cucina Mensol DX OFF";
      statoprecedente = SRMensolaDXCucina;
      pulsantepremuto = pMensolaDXCucina;
      uscitarele = MensolaDXCucina;
      PRIMA();
      Scrivi_su_LCD();
      SRMensolaDXCucina = 1;
      DOPO();
   };

   if ( digitalRead ( pMensolaDXCucina ) == HIGH && SRMensolaDXCucina == 1 ) {
      digitalWrite ( MensolaDXCucina, LOW );
      // "Benvenuti da Alberto";
      azione = "Cucina Mensola DX ON";
      statoprecedente = SRMensolaDXCucina;
      pulsantepremuto = pMensolaDXCucina;
      uscitarele = MensolaDXCucina;
      PRIMA();
      Scrivi_su_LCD();
      SRMensolaDXCucina = 0;
      DOPO();
   };

   // Cucina Travi:
   if ( digitalRead ( pTraviCucina ) == HIGH && SRTraviCucina == 0 ) {
      digitalWrite ( TraviCucina, HIGH );
      // "Benvenuti da Alberto";
      azione = "Cucina Travi     OFF";
      statoprecedente = SRTraviCucina;
      pulsantepremuto = pTraviCucina;
      uscitarele = TraviCucina;
      PRIMA();
      Scrivi_su_LCD();
      SRTraviCucina = 1;
      DOPO();
   };

   if ( digitalRead ( pTraviCucina ) == HIGH && SRTraviCucina == 1 ) {
      digitalWrite ( TraviCucina, LOW );
      // "Benvenuti da Alberto";
      azione = "Cucina Travi      ON";
      statoprecedente = SRTraviCucina;
      pulsantepremuto = pTraviCucina;
      uscitarele = TraviCucina;
      PRIMA();
      Scrivi_su_LCD();
      SRTraviCucina = 0;
      DOPO();
   };


   //ingresso Travi:
   if ( digitalRead ( pIngressoTravi ) == HIGH && SRIngressoTravi == 0 ) {
      digitalWrite ( IngressoTravi, HIGH );
      // "Benvenuti da Alberto";
      azione = "Ingresso Travi   OFF";
      statoprecedente = SRIngressoTravi;
      pulsantepremuto = pIngressoTravi;
      uscitarele = IngressoTravi;
      PRIMA();
      Scrivi_su_LCD();
      SRIngressoTravi = 1;
      DOPO();
   };

   if ( digitalRead ( pIngressoTravi ) == HIGH && SRIngressoTravi == 1 ) {
      digitalWrite ( IngressoTravi, LOW );
      // "Benvenuti da Alberto";
      azione = "Ingresso Travi    ON";
      statoprecedente = SRIngressoTravi;
      pulsantepremuto = pIngressoTravi;
      uscitarele = IngressoTravi;
      PRIMA();
      Scrivi_su_LCD();
      SRIngressoTravi = 0;
      DOPO();
   };

   //ingresso scala rovere led :
   if ( digitalRead ( pScala ) == HIGH && SRScala == 0 ) {
      digitalWrite ( Scala, HIGH );
      // "Benvenuti da Alberto";
      azione = "Interrato Scala  OFF";
      statoprecedente = SRScala;
      pulsantepremuto = pScala;
      uscitarele = Scala;
      PRIMA();
      Scrivi_su_LCD();
      SRScala = 1;
      DOPO();
   };

   if ( digitalRead ( pScala ) == HIGH && SRScala == 1 ) {
      digitalWrite ( Scala, LOW );
      // "Benvenuti da Alberto";
      azione = "Interrato Scala   ON";
      statoprecedente = SRScala;
      pulsantepremuto = pScala;
      uscitarele = Scala;
      PRIMA();
      Scrivi_su_LCD();
      SRScala = 0;
      DOPO();
   };

   // ingresso Lampadario:
   if ( digitalRead ( pIngressoLampadario ) == HIGH && SRIngressoLampadario == 0 ) {
      digitalWrite ( IngressoLampadario, HIGH );
      // "Benvenuti da Alberto";
      azione = "Ingresso Lampada OFF";
      statoprecedente = SRIngressoLampadario;
      pulsantepremuto = pIngressoLampadario;
      uscitarele = IngressoLampadario;
      PRIMA();
      Scrivi_su_LCD();
      SRIngressoLampadario = 1;
      DOPO();
   };

   if ( digitalRead ( pIngressoLampadario ) == HIGH && SRIngressoLampadario == 1 ) {
      digitalWrite ( IngressoLampadario, LOW );
      // "Benvenuti da Alberto";
      azione = "Ingresso lampada  ON";
      statoprecedente = SRIngressoLampadario;
      pulsantepremuto = pIngressoLampadario;
      uscitarele = IngressoLampadario;
      PRIMA();
      Scrivi_su_LCD();
      SRIngressoLampadario = 0;
      DOPO();
   };

   //Sala Trave Soppalco:
   if ( digitalRead ( pTraveSoppalco ) == HIGH && SRTraveSoppalco == 0 ) {
      digitalWrite ( TraveSoppalco, HIGH );
      // "Benvenuti da Alberto";
      azione = "Sala Tr soppalco OFF";
      statoprecedente = SRTraveSoppalco;
      pulsantepremuto = pTraveSoppalco;
      uscitarele = TraveSoppalco;
      PRIMA();
      Scrivi_su_LCD();
      SRTraveSoppalco = 1;
      DOPO();
   };

   if ( digitalRead ( pTraveSoppalco ) == HIGH && SRTraveSoppalco == 1 ) {
      digitalWrite ( TraveSoppalco, LOW );
      // "Benvenuti da Alberto";
      azione = "Sala Tr soppalco  ON";
      statoprecedente = SRTraveSoppalco;
      pulsantepremuto = pTraveSoppalco;
      uscitarele = TraveSoppalco;
      PRIMA();
      Scrivi_su_LCD();
      SRTraveSoppalco = 0;
      DOPO();
   };

   // Sala Trave Doppia:
   if ( digitalRead ( pTraveDoppia ) == HIGH && SRTraveDoppia == 0 ) {
      digitalWrite ( TraveDoppia, HIGH );
      // "Benvenuti da Alberto";
      azione = "Sala Trave DoppiaOFF";
      statoprecedente = SRTraveDoppia;
      pulsantepremuto = pTraveDoppia;
      uscitarele = TraveDoppia;
      PRIMA();
      Scrivi_su_LCD();
      SRTraveDoppia = 1;
      DOPO();
   };

   if ( digitalRead ( pTraveDoppia ) == HIGH && SRTraveDoppia == 1 ) {
      digitalWrite ( TraveDoppia, LOW );
      // "Benvenuti da Alberto";
      azione = "Sala Trave Doppia ON";
      statoprecedente = SRTraveDoppia;
      pulsantepremuto = pTraveDoppia;
      uscitarele = TraveDoppia;
      PRIMA();
      Scrivi_su_LCD();
      SRTraveDoppia = 0;
      DOPO();
   };

   // Sala trave Media:
   if ( digitalRead ( pTraveMedia ) == HIGH && SRTraveMedia == 0 ) {
      digitalWrite ( TraveMedia, HIGH );
      // "Benvenuti da Alberto";
      azione = "Sala Trave Media OFF";
      statoprecedente = SRTraveMedia;
      pulsantepremuto = pTraveMedia;
      uscitarele = TraveMedia;
      PRIMA();
      Scrivi_su_LCD();
      SRTraveMedia = 1;
      DOPO();
   };

   if ( digitalRead ( pTraveMedia ) == HIGH && SRTraveMedia == 1 ) {
      digitalWrite ( TraveMedia, LOW );
      // "Benvenuti da Alberto";
      azione = "Sala Trave Media  ON";
      statoprecedente = SRTraveMedia;
      pulsantepremuto = pTraveMedia;
      uscitarele = TraveMedia;
      PRIMA();
      Scrivi_su_LCD();
      SRTraveMedia = 0;
      DOPO();
   };

   // Sala presa Pilotata SX:
   if ( digitalRead ( pPresaPilotataSala ) == HIGH && SRPresaPilotataSala == 0 ) {
      digitalWrite ( PresaPilotataSala, HIGH );
      // "Benvenuti da Alberto";
      azione = "Sala luce pilota OFF";
      statoprecedente = SRPresaPilotataSala;
      pulsantepremuto = pPresaPilotataSala;
      uscitarele = PresaPilotataSala;
      PRIMA();
      Scrivi_su_LCD();
      SRPresaPilotataSala = 1;
      DOPO();
   };
   if ( digitalRead ( pPresaPilotataSala ) == HIGH && SRPresaPilotataSala == 1 ) {
      digitalWrite ( PresaPilotataSala, LOW );
      // "Benvenuti da Alberto";
      azione = "Sala Luce pilota  ON";
      statoprecedente = SRPresaPilotataSala;
      pulsantepremuto = pPresaPilotataSala;
      uscitarele = PresaPilotataSala;
      PRIMA();
      Scrivi_su_LCD();
      SRPresaPilotataSala = 0;
      DOPO();
   };
   /*
      AllarmE:
      // Allarme
      //if(Serial.available() > 0){SERIALE=Serial.read();};

       //if (SERIALE=="allarme" && TraveSoppalco == LOW && TavoloCucina == LOW)
         if(digitalRead(38)==HIGH && TraveSoppalco == LOW && TavoloCucina == LOW)
           {
             digitalWrite(TraveSoppalco, HIGH);
               digitalWrite(TavoloCucina, HIGH);
                 delay(a);
               digitalWrite(TraveSoppalco, LOW);
             digitalWrite(TavoloCucina, LOW);
           delay(a);
             digitalWrite(TraveSoppalco, HIGH);
               digitalWrite(TavoloCucina, HIGH);
                 delay(a);
               digitalWrite(TraveSoppalco, LOW);
             digitalWrite(TavoloCucina, LOW);
           delay(a);
             digitalWrite(TraveSoppalco, HIGH);
               digitalWrite(TavoloCucina, HIGH);
                 delay(a);
               digitalWrite(TraveSoppalco, LOW);
             digitalWrite(TavoloCucina, LOW);
           delay(a);
             digitalWrite(TraveSoppalco, HIGH);
               digitalWrite(TavoloCucina, HIGH);
                 delay(a);
               digitalWrite(TraveSoppalco, LOW);
             digitalWrite(TavoloCucina, LOW);
           delay(a);
             digitalWrite(TraveSoppalco, HIGH);
               digitalWrite(TavoloCucina, HIGH);
                 delay(a);
               digitalWrite(TraveSoppalco, LOW);
             digitalWrite(TavoloCucina, LOW);
           delay(a);
           };

      // if (SERIALE=="allarme" && TraveSoppalco == LOW && TavoloCucina == HIGH)
         if(digitalRead(38)==HIGH && TraveSoppalco == LOW && TavoloCucina == HIGH)
           {
             digitalWrite(TraveSoppalco, HIGH);
               digitalWrite(TavoloCucina, LOW);
                 delay(a);
               digitalWrite(TraveSoppalco, LOW);
             digitalWrite(TavoloCucina, HIGH);
           delay(a);
             digitalWrite(TraveSoppalco, HIGH);
               digitalWrite(TavoloCucina, LOW);
                 delay(a);
               digitalWrite(TraveSoppalco, LOW);
             digitalWrite(TavoloCucina, HIGH);
           delay(a);
             digitalWrite(TraveSoppalco, HIGH);
               digitalWrite(TavoloCucina, LOW);
                 delay(a);
               digitalWrite(TraveSoppalco, LOW);
             digitalWrite(TavoloCucina, HIGH);
           delay(a);
             digitalWrite(TraveSoppalco, HIGH);
               digitalWrite(TavoloCucina, LOW);
                 delay(a);
               digitalWrite(TraveSoppalco, LOW);
             digitalWrite(TavoloCucina, HIGH);
           delay(a);
             digitalWrite(TraveSoppalco, HIGH);
               digitalWrite(TavoloCucina, LOW);
                 delay(a);
               digitalWrite(TraveSoppalco, LOW);
             digitalWrite(TavoloCucina, HIGH);
           delay(a);
           };
           // if (SERIALE=="allarme" && TraveSoppalco == HIGH && TavoloCucina == LOW)
         if(digitalRead(38) == HIGH && TraveSoppalco == HIGH && TavoloCucina == LOW)
           {
             digitalWrite(TraveSoppalco, LOW);
               digitalWrite(TavoloCucina, HIGH);
                 delay(a);
               digitalWrite(TraveSoppalco, HIGH);
             digitalWrite(TavoloCucina, LOW);
           delay(a);
             digitalWrite(TraveSoppalco, LOW);
               digitalWrite(TavoloCucina, HIGH);
                 delay(a);
               digitalWrite(TraveSoppalco, HIGH);
             digitalWrite(TavoloCucina, LOW);
           delay(a);
             digitalWrite(TraveSoppalco, LOW);
               digitalWrite(TavoloCucina, HIGH);
                 delay(a);
               digitalWrite(TraveSoppalco, HIGH);
             digitalWrite(TavoloCucina, LOW);
           delay(a);
             digitalWrite(TraveSoppalco, LOW);
               digitalWrite(TavoloCucina, HIGH);
                 delay(a);
               digitalWrite(TraveSoppalco, HIGH);
             digitalWrite(TavoloCucina, LOW);
           delay(a);
             digitalWrite(TraveSoppalco, LOW);
               digitalWrite(TavoloCucina, HIGH);
                 delay(a);
               digitalWrite(TraveSoppalco, HIGH);
             digitalWrite(TavoloCucina, LOW);
           delay(a);
           };

         // if(SERIALE=="allarme" && TraveSoppalco==HIGH && TavoloCucina==HIGH)
         if(digitalRead(38)==HIGH&& TraveSoppalco==HIGH && TavoloCucina==HIGH)
           {
             digitalWrite(TraveSoppalco, LOW);
               digitalWrite(TavoloCucina, LOW);
                 delay(a);
               digitalWrite(TraveSoppalco, HIGH);
             digitalWrite(TavoloCucina, HIGH);
           delay(a);
             digitalWrite(TraveSoppalco, LOW);
               digitalWrite(TavoloCucina, LOW);
                 delay(a);
               digitalWrite(TraveSoppalco, HIGH);
             digitalWrite(TavoloCucina, HIGH);
           delay(a);
             digitalWrite(TraveSoppalco, LOW);
               digitalWrite(TavoloCucina, LOW);
                 delay(a);
               digitalWrite(TraveSoppalco, HIGH);
             digitalWrite(TavoloCucina, HIGH);
           delay(a);
             digitalWrite(TraveSoppalco, LOW);
               digitalWrite(TavoloCucina, LOW);
                 delay(a);
               digitalWrite(TraveSoppalco, HIGH);
             digitalWrite(TavoloCucina, HIGH);
           delay(a);
             digitalWrite(TraveSoppalco, LOW);
               digitalWrite(TavoloCucina, LOW);
                 delay(a);
               digitalWrite(TraveSoppalco, HIGH);
             digitalWrite(TavoloCucina, HIGH);
           delay(a);
           };  //Fine dell'if Allarme

      //Spegni Tutto
      //if (SERIALE="spegni")
      if(digitalRead(37)==HIGH)
      {
      digitalWrite(TraviVeranda, LOW);SRTraviVeranda=0;
       digitalWrite(TraveEsternaVeranda, LOW);SRTraveEsternaVeranda=0;
         digitalWrite(LuciAlte, LOW);SRLuciAlte=0;
           digitalWrite(TavoloCucina, LOW);SRTavoloCucina=0;
             digitalWrite(MensolaSXCucina, LOW);SRMensolaSXCucina=0;
               digitalWrite(MensolaDXCucina, LOW);SRMensolaDXCucina=0;
                 digitalWrite(TraviCucina, LOW);SRTraviCucina=0;
                   digitalWrite(IngressoTravi, LOW);SRIngressoTravi=0;
                     digitalWrite(Scala, LOW);SRScala=0;
                       digitalWrite(IngressoLampadario, LOW);SRIngressoLampadario=0;
                         digitalWrite(TraveSoppalco, LOW);SRTraveSoppalco=0;
                           digitalWrite(TraveDoppia, LOW);SRTraveDoppia=0;
                             digitalWrite(TraveMedia, LOW);SRTraveMedia=0;
                               digitalWrite(TraviVeranda, LOW);SRTraviVeranda=0;
                                 digitalWrite(PresaPilotataSala, LOW);SRPresaPilotataSala=0;
                                  delay(a);

                         }  //Fine dell'if dello spegni tutto

      }
   */


} // Fine void loop
void PRIMA () {
   /*
      Serial.print("PRIMA >>>> ");
      Serial.print (azione);
      Serial.print("  - Stato precedente: ");
      if (statoprecedente==0){Serial.print (" Acceso = ");};
      if (statoprecedente==1){Serial.print (" Spento = ");};
      Serial.print(statoprecedente);
      Serial.println();

   */
}

void DOPO () {
   /*
      Serial.print("DOPO  >>>>  ");
      Serial.print(azione);

      Serial.println();
      Serial.print("pulsante premuto = ");
       Serial.println (pulsantepremuto);
         Serial.print(" Canale uscita = ");
         Serial.println(uscitarele);
         Serial.print("  valore uscita  = ");
           Serial.print(digitalRead(uscitarele));
           if (digitalRead(uscitarele)==0){Serial.print (" Acceso ");};
             if (digitalRead(uscitarele)==1){Serial.print (" Spento ");};
             Serial.println();
               Serial.println("....................................................");
                 Serial.println();
   */
}

void Scrivi_su_LCD() {
   /*  Serial.println();
      Serial.print("riga1  = ");Serial.print(riga1);Serial.println();
      Serial.print("riga2  = ");Serial.print(riga2);Serial.println();
      Serial.print("riga3  = ");Serial.print(riga3);Serial.println();
      Serial.print("riga4  = ");Serial.print(riga4);Serial.println();
      Serial.print("azione = ");Serial.print(azione);Serial.println();
   */

   riga4 = riga3;
   riga3 = riga2;
   riga2 = riga1;
   riga1 = azione;


   analogWrite ( LED_PIN, 20 );
   lcd.setCursor ( 0, 0 );
   typewriting ( riga1 );
   lcd.setCursor ( 0, 1 );
   typewriting ( riga2 );
   lcd.setCursor ( 0, 2 );
   typewriting ( riga3 );
   lcd.setCursor ( 0, 3 );
   typewriting ( riga4 );
   // delay(10);analogWrite(LED_PIN,20);
   delay ( 10 ); analogWrite ( LED_PIN, 15 );
   delay ( 10 ); analogWrite ( LED_PIN, 10 );
   delay ( 10 ); analogWrite ( LED_PIN, 5 );

   /*
      Serial.println("----#----#----#----#----#----#----");
      Serial.print("riga1  = ");Serial.print(riga1);Serial.println();
       Serial.print("riga2  = ");Serial.print(riga2);Serial.println();
         Serial.print("riga3  = ");Serial.print(riga3);Serial.println();
           Serial.print("riga4  = ");Serial.print(riga4);Serial.println();
             Serial.println();
               Serial.print("---+---+---+---  FINE GIOCHI  ---+---+---+---");Serial.println();Serial.println();
   */

}

void typewriting ( String messaggio ) {
   int lunghezza = messaggio.length();
   for ( int i = 0; i < lunghezza; i++ ) {
      lcd.print ( messaggio[i] );
      delay ( 10 );
   }
}


questo è il cablaggio delle resistenze pull down .
il cavo che arriva dal pulsante è saldato con il cavo che va all'ingresso della scheda Arduino , quindi contatto continuo , il morsetto è connesso tramite saldatura ad una resistenza di 10 Khom la quale arriva al Gnd di Arduino.
ho usato la scheda con morsetti per facilitarmi le connessioni .


questo è il cablaggio , premetto che le schede relè sono alimentate separatamente dalle schede arduino mega tramite alimentatore posto tra i due LCD.

Aaagh!!!... :face_with_spiral_eyes:

premetto che alcune parti di programma sono in via di sviluppo e le parti che riguardano il monitor mi servono per controllare cosa effettivamente sta facendo la scheda , quindi inutili al fine del progetto.

Complimenti per il cablaggio

Ma il programma è illeggibile
Formattalo come dio comanda
E diverrà leggibile, forse

Ma anche così ho visto due criticità

String riga1 = "Benvenuti da Alberto";
 pinMode(pTraviVeranda, INPUT);   // Travi Centrali 5V Ingresso 39
    digitalWrite(pTraviVeranda,LOW); 

Se non metti a posto queste due (intendo anche comprendere "perché " sono criticità) è inutile proseguire

Buon lavoro

Emmm ... riguardo al codice del tuo post #14 ... e si che ti ho anche scritto di "indentarlo correttamente" usando l'apposita funzione dell'IDE ... è indentato in modo illegibile :crazy_face:

Guglielmo

ho provato a seguire le sue istruzioni ma non mi è riuscito , perdonate la mia non conoscenza , ci riprovo a seguire le sue istruzioni , grazie