Timer calcolo tempi morti per taglio laser lamiera

Salve a tutti! da neofita ho scritto alcune righe di codice per il mio primo progetto ovvero un timer collegato ad una macchina da taglio laser lamiera industriale che si attivi durante la lavorazione conteggiando i secondi di lavorazione e di fermo macchina per visualizzare l'andamento della produzione durante la giornata.
Il codice funziona... ma sul serial monitor ogni volta che avviene un cambiamento di stato da LOW a HIGH i secondi ripartono da zero, mentre vorrei che si sommassero ai precedenti.... potreste darmi un aiutino??
Grazie a tutti!!

const int laser = 40; // input proveniente dal plc della macchina
long start; //inizio macchina in lavorazione
long duratas; // durata macchina in lavorazione
long fermo; // inizio fermo macchina
long durataf; // durata fermo macchina

void setup()
{
pinMode(laser,INPUT);
Serial.begin(9600);
}
void loop()
{
if(digitalRead(laser == HIGH))
{
start = millis();
while(digitalRead(laser)== HIGH);
duratas = millis()-start;
delay(30); Serial.print ("Laser ON:");Serial.println(duratas/1000);
//
}
if(digitalRead(laser == LOW))
{
fermo = millis();
while(digitalRead(laser)== LOW);
durataf = millis()-fermo;
delay(30);Serial.print ("Laser OFF:");Serial.println(durataf/1000);
//
}
}

Prova così

const int laser = 40;  // input proveniente dal plc della macchina
long start;  //inizio macchina in lavorazione
long duratas; // durata macchina in lavorazione
long fermo;  // inizio fermo macchina
long durataf; // durata fermo macchina

void setup() {
 pinMode(laser,INPUT);
 Serial.begin(9600);
}

void loop() {
 if(digitalRead(laser == HIGH))
  {
  start = millis();
  while(digitalRead(laser)== HIGH);
  duratas += millis()-start;
  delay(30);
  Serial.print("Laser ON:");
  Serial.println(duratas/1000);
  }
 if(digitalRead(laser == LOW))
  {
  fermo = millis();
  while(digitalRead(laser)== LOW);
  durataf +=millis()-fermo;
  delay(30);
  Serial.print ("Laser OFF:");
  Serial.println(durataf/1000);
  //
  }
}

Grazie!!!! funziona!!! scusate l'entusiasmo ma è il mio primo progetto e non avendo alcuna nozione di elettronica ne di linguaggio di programmazione sono al settimo cielo! Ti adoro Arduino!
La notte scorsa... invece di prendere sonno... i miei pensieri erano offuscati da un dubbio...... nel serial monitor, ogni volta che è presente un cambiamento di stato, i valori del nuovo vengono scritti a capo, mi chiedevo se fosse possibile avere sempre due righe come ad esempio:

Laser OFF: (120)
Laser ON: (50)

i valori tra parentesi dovrebbero cambiare sempre nella stessa posizione, come se fosse ad esempio il valore di un imput analogico che varia nel tempo. Spero di essermi spiegato...
Grazie a tutti !!

Ricorda di sostituire i long con unsigned long altrimenti col tempo vai in overflow ed escono risultati sballati.

Alberto81:
La notte scorsa... invece di prendere sonno... i miei pensieri erano offuscati da un dubbio...... nel serial monitor, ogni volta che è presente un cambiamento di stato, i valori del nuovo vengono scritti a capo, mi chiedevo se fosse possibile avere sempre due righe come ad esempio:

Laser OFF: (120)
Laser ON: (50)

i valori tra parentesi dovrebbero cambiare sempre nella stessa posizione, come se fosse ad esempio il valore di un imput analogico che varia nel tempo. Spero di essermi spiegato...
Grazie a tutti !!

Intendi eliminare il ritorno a capo e sovrascrivere i dati a quelli vecchi?
Col serial monitor dell'IDE non puoi. Dovresti scrivere un programma che intercetta i dati e che te li visualizza in una modalità a te consona. Oppure usare un display Lcd e, con opportuno codice, puoi fare quello che dici