Forum: Mikrocontroller und Digitale Elektronik Arduino, Neustart eines timers


von Carsten L. (carsten91)


Lesenswert?

Hallo,
ich möchte für ein Projekt folgendes Software technich am Arduino (nano) 
umsetzen.

Der Arduino soll eine Photodiode auslesen  und wenn der Wert eine 
gewisse schwelle unterschreitet einen Transistor durchschalten, der 
daraufhin ein Licht ansteuert.
Wenn länger als nach X Minuten der Grenzwert nicht unterschritten wird, 
soll dann der Transistor wieder zurück schalten.

soweit so gut.
Bisher sieht das ganze wie folgt aus:
1
int ledband = 2;
2
void setup(){
3
 pinMode(ledband, OUTPUT);
4
 digitalWrite(ledband, HIGH); 
5
 Serial.begin(9600); }
6
void loop(){
7
 int val = analogRead(7);
8
 Serial.println(val);
9
 if(val <500){
10
  digitalWrite(ledband,LOW);
11
  delay(30000);}
12
 else{
13
   digitalWrite(ledband,HIGH);}

Nun soweit ist das auch wunderbar. allerdings soll nun noch folgendes 
dazu kommen.
wärend dem Delay (welches hier nur aus testzwecken auf 30sek. steht) 
soll dauerhaft der Wert an A7 erfragt werden, wenn dieser erneut denn 
wert unterschreitet soll von diesem Punkt an das ganze von 0 anfangen.
Es geht sich um sehr kurze Helle lichtimpulse.

ergo.
Blitz.
Wert unter 500, Delay fängt an von 30sek runter zu zählen
nach bsp. 10 sekunden ein erneuter blitz,
und er soll dann eben ignorieren wo er war, und von vorne die 30sek 
runter zählen.

ICh find dazu leider auch nach googeln keine Funktion. Gibt es da was 
einfaches, was auch ich als Anfänger verstehe :D?
Danke im vorraus,
Gruß Carsten

von Codix (Gast)


Lesenswert?

Carsten L. schrieb:
> ICh find dazu leider auch nach googeln keine Funktion.

Da musst Du schon ein bisschen Deinen Grips anstrengen und selbst
eine Lösung finden. Nur irgendetwas stupide abzutippen und eigentlich 
nicht verstehen was das alles bewirkt bringt Dich nicht wirklich 
weiter.

Dein Threadtitel ist falsch, denn Du sprichst nur von delay.....


Als Tipp: Den/die wirklichen Timer nutzen. Bspw. den Timer1 (16 bit) im
Sekundentakt laufen lassen.......mehr verrate ich nicht.

von Max B. (theeye)


Lesenswert?

Ich war (ebenfalls) etwas verwirrt, da du im Titel schon von Timer 
sprichst, genau den benötigst aber lediglich einen delay nutzt. 
Allerdings wirst du im Wiki die gesuchte Unterstützung finden! Hier der 
übergeordnete Artikel: Timer und hier ein ein hervorragendes 
Tutorial: AVR-Tutorial: Timer

Viel Spaß!

Gruß Max

von Dieter S. (Gast)


Lesenswert?

Einen Tipp gebe ich dir. Nimm das delay raus und setze dafür millis 
(BlinkWithoutDelays) ein. Während eines delays macht der Controller nix 
außer warten.  Da kannst du auch keinen anderen Zähler laufen lassen.

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.