Arduino Polska Forum
Problem z resetem timera - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Programowanie w Arduino (https://forum.arduinopolska.pl/dzial-programowanie-w-arduino)
+--- Wątek: Problem z resetem timera (/watek-problem-z-resetem-timera)



Problem z resetem timera - arekzbyt@gmail.com - 20-03-2016

Witam,

Jestem początkujący w kwestii Arduino Leonardo i programowania.
Mój problem polega na tym, że nie potrafię zresetować czasu "delay"
Potrzebuje programu: 

Po wciśnięciu przycisku (pin 2) włącza się stan wysoki na pinie 5 i 6, gdy przycisk przyjmie stan "LOW" odlicza się czas i zmienia się stan LOW na pinach 5 i 6. Gdy w czasie odliczania czasu zostanie wciśnięty ponownie przycisk (pin 2) odliczany czas resetuje się i zaczyna odliczać gdy przycisk zmieni położenie "LOW".

Mój błędny program: 

Kod:
void setup() {

 
 pinMode(2, INPUT);
 pinMode(3, OUTPUT);
 pinMode(4, OUTPUT);
 pinMode(5, OUTPUT);
 pinMode(6, OUTPUT);
 // put your setup code here, to run once:

 digitalWrite(3, HIGH);
 digitalWrite(4, HIGH);

}

void loop() {
 
 
 if(digitalRead(2) == HIGH)
 {digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
    if(digitalRead(2) ==LOW)
     {delay(5*60*1000);
     
     digitalWrite(5, LOW);
     digitalWrite(6, LOW);
     digitalWrite(3, HIGH);
     digitalWrite(4, HIGH);
     }
     
 }
 // put your main code here, to run repeatedly:

}


Przepraszam jak wybrałem zły dział i jeśli zrobiłem jakieś błedy.


RE: Problem z resetem timera - JasQ - 23-03-2016

Nie do końca kojarzę o co ci chodzi spróbuj tego i powiedz co jest nie tak .

Kod:
long ms = 0;
long lms = 0;


void setup() {
  
  Serial.begin(9600);

pinMode(2, INPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);

digitalWrite(3, HIGH);
digitalWrite(4, HIGH);

}

void loop() {
  
  Serial.println((ms-lms)/1000);
  
  ms = millis();

if(digitalRead(2) == HIGH){
  
   if ( ms - lms > 6000 ){
  
  digitalWrite(5, HIGH);
  digitalWrite(6, HIGH);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
   }

}
  
if(digitalRead(2) == LOW){lms = ms ;}
    
     if ( ms - lms < 6000 ){
    
     digitalWrite(5, LOW);
     digitalWrite(6, LOW);
     digitalWrite(3, HIGH);
     digitalWrite(4, HIGH);
    
     }
}