interruzione improvvisa arduino- help

Ciao a tutti,
sto realizzando un variometro per il mio radiomodello e, dopo varie difficolttà, sono riuscito a farlo funzionare.
Il problema è che improvvisamente il sistema si blocca (nessun dato via serial e nessun led lampeggiante sugli arduino), e non riesco a capire dove stia il problema. Che si raggiunga il limite di qualche memoria/buffer o che ne so? All'inizio sia la trasmittente che la ricevente erano collegati via USB al PC. Poi la ricevente l'ho collegata alla batteria da 9V per escludere il problema alimentazione (ne avevo solo una sigh) almeno da un lato.
Giusto per correttezza, ecco il listato della trasmittente

#include <SoftwareSerial.h>
#include <MS5611.h>
SoftwareSerial hc12(2, 3); //RX, TX

MS5611 baro;

long pressure=0;


void setup() {
  Serial.begin(9600);
  hc12.begin(9600);
  baro = MS5611();
  baro.begin();
  delay(50);
}

void loop() {
  pressure = baro.readPressure();
  hc12.print('#');
  hc12.print(pressure);
  hc12.print('*');
  Serial.println(pressure);
  delay(100);
}

e questo quello della ricevente

#include <SoftwareSerial.h>
SoftwareSerial hc12(2, 3); //RX, TX
int32_t pressure;
long value;
char rx;
float filtered = 0;
float toneFreq, toneFreqLowpass, lowpassFast, lowpassSlow ;
int ddsAcc;
int buzzer=8;


void setup() {
  Serial.begin(9600);
  hc12.begin(9600);
  delay(2);
  lowpassFast = lowpassSlow = filtered;
  
}

void loop() {
  if (hc12.available()) {
    rx = hc12.read();  
    if (rx == '#') {  // carattere letto....se e' un cancelletto
      pressure = 0;   //ricevuta è la variabile di appoggio dove faccio i calcoli
    }
    if (rx <= '9' && rx >= '0') {
        pressure = pressure * 10 + rx - '0';
       } 
    if (rx == '*') {      // fine trasmissione; aggiurno la variabile valore
      value = pressure;  //stabilisco il valore mandato originale
         }
  filtered = filtered + 0.1 *(value-filtered);
  lowpassFast = lowpassFast + (filtered - lowpassFast) * 0.1;
  lowpassSlow = lowpassSlow + (filtered - lowpassSlow) * 0.05;
  toneFreq = (lowpassSlow - lowpassFast) * 50;
  toneFreqLowpass = toneFreqLowpass + (toneFreq - toneFreqLowpass) * 0.1;
  toneFreq = constrain(toneFreqLowpass, -500, 500);
  ddsAcc += toneFreq * 100 + 2000;
  
  Serial.print(value);
  Serial.print(',');
  Serial.println(toneFreq);
  
  if (toneFreq > 8 && ddsAcc > 0){ 
    tone(buzzer, toneFreq + 510);  
  }
 else {
    noTone(buzzer);
    }
  }
}

so che nella ricevente il codice con il filtro e via dicendo dovrebbe stare dentro if (rx == '*'), ma così la trasmissione sembrava troppo lenta e non riuscivo a percepire le variazioni di altitudine.

Si è scaricata la batteria. :confused: