temporisation

c'est bon ca marche par contre au dessus de 31s sa coince je passe en valeur negative (-3253) pour le temps travail et repos

le code

//definition bt3 et 4
  
            if (bt1==0){bt3=1;}     //secondes
            if (bt1==1){bt3=60;}    //minutes
            if (bt1==2){bt3=3600;}  //heures
            if (bt2==0){bt4=1;}     //secondes
            if (bt2==1){bt4=60;}    //minutes
            if (bt2==2){bt4=3600;}  //heures

tempsrepos=interremp*bt4*1000;//calcul temps entre deux recharges en ms
tempstravail=(dureeco2*bt3*1000)+(interremp*bt4*1000);//calcul temps repos+travail en ms

if (plageco2==1 && (time-departco2>tempsrepos)){duree1=1;} //temporisation repos en ms
if (duree1==1 && (time-departco2>tempstravail)){duree1=0;departco2=time;} // temporisation envoi co2 en ms

les declarations

// Co2
// heure de debut
int debut6;
// heure de fin
int fin6;

byte dureeco2;
byte interremp;
byte duree1;
byte duree2;
byte bt1;
byte bt2;
int bt3;
int bt4;
byte plageco2; ///plage envoi co2 
unsigned long departco2;
unsigned long tempstravail;
unsigned long tempsrepos;
int co2stat;
int departremp;
unsigned long time=millis();

je pense que le probleme vient du type de donne declare pour tempstravail et tempsrepos