Forum: Mikrocontroller und Digitale Elektronik Arduino Datenlogger nur bei Tastendruck


von Peter (Gast)


Lesenswert?

Hi,

ich möchte einen Datenlogger mit einem Arduino Micro bauen und hätte 
folgende Frage:

Der Datenlogger soll nur Daten aufzeichnen, so lange ein Taster gedrückt 
ist.

Ich hab mir jetzt schon einige Tutorials durchgelesen, wollte aber euch 
fragen, was ihr für die elegantere Methode haltet:

- Interruptgesteuert
Problem dabei: Ich möchte die Daten in einem Intervall von 1s 
aufzeichnen. In sind meines Wissens jedoch die Funktionen delay() und 
millis() nicht verfügbar... Gibt es hier andere Möglichkeiten?

- Ständige Abfrage im void loop()
Ich würde durch eine Abfrage "if (state == HIGH)" immer Abfragen ob der 
Taster gerade gedrückt ist. (und natürlich wie der Status im vorigen 
Zeitschritt war).

Was haltet ihr davon? Gibt es bessere Ansätze?

Danke für eure Hilfe!

lg

von Joe F. (easylife)


Lesenswert?

programmiere einen timerinterrupt so, dass er 1x pro sekunde auslöst. in 
der ISR fragst du den taster ab. wenn ungedrückt, nichts machen. wenn 
gedrückt, messen und loggen.

von Peter (Gast)


Lesenswert?

Joe F. schrieb:
> programmiere einen timerinterrupt so, dass er 1x pro sekunde
> auslöst.
> dann fragst du den taster ab. wenn ungedrückt, nichts machen. wenn
> gedrückt, messen und loggen.

Danke, das finde ich sehr elegant!

von Joe F. (easylife)


Lesenswert?

du hast dann halt bis zu 1s verzögerung von tastendruck bis messung.
wenn das stört, programmierst du den timer isr z.b auf 100x pro sek.

in der isr zählst du einen counter hoch, aber nur wenn taster gedrückt. 
bei counter==1: messen & loggen.
wenn taster nicht gedrückt, oder counter==100: counter auf 0 setzen. das 
delay von tasterdruck zu 1. messung ist dann max. 1/100s

von Peter (Gast)


Lesenswert?

Wobei mir gerade einfällt:

delay() wird doch eigentlich durch den Timer des ATmega32U4 erzeugt. 
Also eigentlich ist ein "richtiger" Timerinterrupt doch gleichbedeutend 
wie wenn ich das Programm mit delay() pausiere, oder?

von Joe F. (easylife)


Lesenswert?

wenn die 1s nicht exakt 1s sein muss geht auch delay(). die zeit fürs 
messen und loggen macht den zyklus entsprechend länger.

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.