Forum: Mikrocontroller und Digitale Elektronik Countdown millis() ersetzen


von Gundelputz (Gast)


Lesenswert?

Hallo zusammen,
habe gerade ein altes Projekt mit dem arduino one neu ins Leben gerufen.
Ich hatte eine Zeitanzeige für das Bogenschiessen vie LiteC geschrieben.
Da die immer einen PC oder ein Notebook benötigt habe ich jetzt das 
Bedürfnis dies mit einem arduino zu lösen.
Zur zeit habe ich ein vierstelliges 7-Segment Display für die 
Zeitanzeige, 3 LED für die Ampel und einen Piezo für das akustischen 
Signale zum laufen gebracht. Das ganze starte ich mit einer IR 
Fernbedienung. Die Funktion die den Countdown ausführt begint mit 
folgender Zeile:

if((millis()/1000) < start_num)

wobei start_num für die gewählte Zeit, in diesem Fall 120sec., steht.
mein problem ist jetzt das millis() die verstrichen Zeit seit dem Start 
des arduino bzw. seit dem reset ist und somit alles nach 120 sec. vorbei 
ist. es soll aber zusätzich eine Pausefunktion und einen Neustart geben.

gibt es eine ander Lösung für mein Problem?

von Gundelputz (Gast)


Lesenswert?

ein teil des Problems habe ich bereits gelöst:
1
if(ein == 1)
2
{
3
  if(aus ==0)
4
  {
5
    time2 = millis()+1000;
6
    aus = 1;
7
    peep2();
8
  }
9
    
10
11
 Hauptteil();
12
}
13
else
14
{
15
  peep1(); 
16
}
17
    
18
}
19
//ende loop
20
///////////////////////////////////////////
21
22
void Hauptteil()
23
{
24
//Haupschleife mit abwärtscounter
25
   if(((millis()- time2)/1000) < start_num)
jetzt fehl nur noch diei Stop- und Resetfunktion

: Bearbeitet durch User
von Gundelputz (Gast)


Lesenswert?

habe jetzt mal einen anderen ansatzt gewählt:

void Vorlaufzeit()
{
  peep1();
  for (int i=0; i<1000;i++)
  {
    displayNumber((1000-i)/100+1);
  }
}

leider begint der Count zwar bei 10 und zählt im sekundentakt runter 
endet dann aber nicht bei Null oder ein sondern begint nach der eins von 
Vorne.
Das ganze in eine abfrage zu verpacken bringt auch nicht es läuft und 
läuft und läuft immmer weiter

if(ein =1)
{
  Vorlaufzeit();
}

erbitte dringend hilfe

von chris_ (Gast)


Lesenswert?


von Gundelputz (Gast)


Lesenswert?

habe wie folgt gelöst
1
void Vorlaufzeit()
2
{
3
if(vorzeit > 0)//Startet die vorlaufzeit mit 10 sec.
4
{
5
  vorzeit = vorzeit - 1;
6
  displayNumber(vorzeit / 10);
7
8
      digitalWrite(LED_gruen, LOW);
9
      digitalWrite(LED_gelb, LOW);
10
      digitalWrite(LED_rot, HIGH);
11
12
}
13
else// wennvorlaufzeit abgelauen dann gehts weiter
14
{
15
  if(p2 > 1)
16
  {
17
    peep2();
18
  }
19
  else
20
  {
21
    if(start_num > 0)//zählt von 120 runter
22
    {
23
       start_num = start_num -1;
24
       displayNumber(start_num / 10);
25
    if((start_num/ 10) > 300)
26
    {
27
      digitalWrite(LED_gruen, HIGH);
28
      digitalWrite(LED_gelb, LOW);
29
      digitalWrite(LED_rot, LOW);
30
    }
31
    else
32
    {
33
      digitalWrite(LED_gruen, LOW);
34
      digitalWrite(LED_gelb, HIGH);
35
      digitalWrite(LED_rot, LOW);
36
    }
37
   }
38
   else
39
    {
40
      if(p4 > 1)
41
      {
42
        peep4();
43
        digitalWrite(LED_gruen, LOW);
44
        digitalWrite(LED_gelb, LOW);
45
        digitalWrite(LED_rot, HIGH);
46
      }
47
      else
48
      {
49
      digitalWrite(LED_gruen, LOW);
50
      digitalWrite(LED_gelb, LOW);
51
      digitalWrite(LED_rot, HIGH);
52
       displayNumber(0);
53
       //start_num = 2;
54
      }
55
    }
56
  }
57
 }
58
}
Danke

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.