slave perde i dati

ciao a tutti, ho una connessione seriale con 2 nano, usando una seriale via software , che funziona senza problemi .
pero’ quando invio il comando, a volte lo prende correttamente a volte no. ho provato a leggere anche la seriale via pc ed il tasto viene letto correttamente .
cosa sto sbagliando?
codice master

#include <SoftwareSerial.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>

#define SOFTRX 16
#define SOFTTX 17
SoftwareSerial seriale2(SOFTRX, SOFTRX);


}
/*Ciclo per la funzione controllo LED1*/
void led() {
 int pulsante =digitalRead(12);
 if (pulsante == HIGH && oldbutP == HIGH) {// pressione del pulsante
 // pressione del pulsante
seriale2.println('a');
Serial.println('a');
delay(50);
}
oldbutP = pulsante;
[code]
slave
[code]
#include <SoftwareSerial.h>
#include <Wire.h>
#include <Adafruit_NeoPixel.h>
#include <FastLED.h> 
#include <OneWire.h>

int buttonPin = 7;    // momentary push button on pin 0
int oldButtonVal = 0;

#define SOFTRX 5
#define SOFTTX 6
SoftwareSerial seriale2(SOFTRX, SOFTRX);


int nPatterns = 16;
int lightPattern = 1;



char pulsante;

void setup() 
{
  
  // edit//
   FastLED.addLeds<WS2812B, PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
   LEDS.addLeds<LED_TYPE, PIN, COLOR_ORDER>(leds, NUM_LEDS);
   Serial.begin(9600);
 seriale2.begin(9600);
  strip.begin();
  strip.setBrightness(255);
  strip.show();
  pinMode(audioOutput, INPUT);
  pinMode(strobePin, OUTPUT);
  pinMode(resetPin, OUTPUT);
  analogReference(DEFAULT);
  
   digitalWrite(resetPin, LOW);
   digitalWrite(strobePin, HIGH);
   pinMode(buttonPin, INPUT);
   digitalWrite(buttonPin, HIGH);  // button pin is HIGH, so it drops to 0 if pressed
 
 


if (seriale2.available()>0){
   pulsante = seriale2.read();
  if 
    (pulsante == 'a'){
      lightPattern = lightPattern + 1;
      seriale2.println(lightPattern);
      Serial.println(lightPattern);
      }  }
 if (lightPattern > nPatterns) lightPattern = 1;




     
  }
}

e' normale che facendo una lettura della seriale via software che ho chiamato seriale 2
con questa stringa Serial.println(seriale2.read()); mi appare una riga di -1?

È giusto. -1 é il valore di errore ritornato da una funzione.
Usa
if (Serial.available()>0)
per sapere se ci sono dati nel buffer.

Ciao Uwe

poche semplici domande:

  1. ti sei accorto che hai sbagliato l'inizializzazione delle seriali?
  2. perchè non hai messo tutti e due i programmi completi e separati?
    sappi che io non mi ci metto a fare ordine nel tuo "spaghetti-code", se non sei capace di spiegare il tuo problema io non ho voglia di sforzarmi a capirlo
  3. Indenta quel codice

Allora, intanto guardati bene questa riga, cosa c'è che non va secondo te?

SoftwareSerial seriale2(SOFTRX, SOFTRX);

(della serie: evitare di dare a variabili e simboli nomi troppo simili...).

Poi modifica il tuo primo post, al termine del primo codice dopo "oldbutP = pulsante;" devi mettere il tag di chiusura [/code] invece lo hai di nuovo aperto ([code]).

Poi come ti ha detto pure Stadardoil, devi imparare ad indentare decentemente, quello che hai copiaincollato non si capisce e fai fatica tu a strutturare il programma e noi a capirlo.
Quindi per prima cosa carica i codici nell'IDE e premi Ctrl-T così te lo indenta lui.

Fatto questo, posta il codice da te rivisto e corretto (in DUE blocchi "code" separati) e dicci se ti funziona.