Two line STOPWATCH.

Hi there !

Please I need your help !

I would like to run a two timer ( TIME 1 and TIME 2) STOPWATCH on a single LCD (16/2) .

It should have a different sensor/button to stop one of the timer while the other continue to run .

I tried modifying the sketch I posted but till now I cannot stop separately each timer . When I give the input with a button , it stops both timers.

Any way to solve the problem .

Any advice is appreciated .

TIA

Franky

contasecondi_ARDUINO.ino (3.54 KB)

Can you inline your code, using code tags? That will be easier to read.

When you use 3 buttons, and 3 variables, the code should do this: When any button is pressed, the current time is copied into the associated variable. The first button will store the start time, the other buttons the stop times. The time elapsed is the difference between the individual stop and common start time.

Ok Sir,

This is the code …

#include <LiquidCrystal.h>               

int m,s,l;                               
int mu=0,md=0,su=0,sd=0,lu=0,ld=0,lc=0;
int button;
int before;
int after; 
long int time, beginning;


int ma,sa,la;                               
int mua=0,mda=0,sua=0,sda=0,lua=0,lda=0,lca=0;
int buttona;
int prima;
int dopo; 
long int timea, beginninga;


LiquidCrystal lcd (12, 11, 5, 4, 3, 2);    



void setup() {
  
   lcd.begin(16, 2);                     
  lcd.setCursor(3,0);
  lcd.print("Cronometro");                     
             
  lcd.setCursor(4, 1);                  
 
  lcd.print ("00:00:000");
  pinMode(6, INPUT);                     
  pinMode(7, INPUT);                     
  pinMode(8, INPUT);
  pinMode(10,OUTPUT);                  
  before=HIGH;                           
  after=HIGH;   
  
 
  prima=HIGH;
  dopo = HIGH;

}

void loop() {
  
 
 
     after = digitalRead(6);                 
  if(after ==HIGH &&  before == LOW){         
    analogWrite(10,100);                   
    lcd.clear();   
    beginning=millis();                     
    beginninga=millis();                    

    before = after ;     
    buttona = 0;
    button = 0;     
    delay(200);                          
    while (button == 0 && buttona == 0){                  
      time=millis()-beginning;            
      m=time/60000;                     
      mu=m%10;                            
      md=(m-mu)/10;                       
      s=(time/1000)-(m*60);            
      su=s%10;                           
      sd=(s-su)/10;                       
      l=time-(s*1000)-(m*60000);       
      lu=l%10;                           
      ld=((l-lu)/10)%10;                
      lc=(l-(ld*10)-lu)/100;             
      

          timea=millis()-beginning;            
      ma=timea/60000;                     
      mua=ma%10;                            
      mda=(ma-mua)/10;                      
      sa=(timea/1000)-(ma*60);            
      sua=sa%10;                          
      sda=(sa-sua)/10;                      
      la=timea-(sa*1000)-(ma*60000);       
      lua=la%10;                           
      lda=((la-lua)/10)%10;                 
      lca=(la-(lda*10)-lua)/100;              
      
      
            lcd.setCursor(4, 0);               
      lcd.print(md);                      
      lcd.print(mu);              
      lcd.print(":");
      lcd.print(sd);
      lcd.print(su);
      lcd.print(":");
      lcd.print(lc);
      lcd.print(ld);
      lcd.print(lu);
      
     
      
   
            lcd.setCursor(4, 1);              
      lcd.print(mda);                     
      lcd.print(mua);              
      lcd.print(":");
      lcd.print(sda);
      lcd.print(sua);
      lcd.print(":");
      lcd.print(lca);
      lcd.print(lda);
      lcd.print(lua);
      
      
          after = digitalRead(8);            
      analogWrite(10,0);                 
      if(after ==HIGH && before==LOW){     
        //el sensor
        analogWrite(10,100);              
                  
        buttona =1;                    
        delay(200);                      
        analogWrite(10,0);               
        
        delay(1000);
  
    lcd.clear ();
    lcd.setCursor(4, 1);                
        //Escribimos 00:00:000 (Ponemos el cronometro a 0)
    lcd.print(time);    
    lcd.setCursor(4, 0);                 
    lcd.print(timea);
    delay(200);                          
    analogWrite(10,0);  
   
    
// }
      
      }
 
   before = after ;                     
    }
  }
  before = after ;                          
}

I'd suggest that you format your code, then you'll better see the ranges of conditions and loops. It also might help you when you move the calculation and display code into subroutines, so that the control flow becomes more obvious in loop().

I suspect that you should add and use beforeA and afterA for the second button.

Have you read Doing multiple things at once?