Go Down

Topic: Pulsmesser (kontaktbehaftet) von Ergometer auslesen (Read 682 times) previous topic - next topic

wapjoe

Digital klappt wie erwartet ebenfalls, zumindest wenn man das Signal an den richtigen Pin anlegt... :D

Naja, mein Ruhepuls liegt meist bei 90-100, daher (Krankheitsbedingt) hab ich mir das Teil zugelegt, okay ich investiere mehr Zeit ins Basteln als ins Fahren, aber das hält den Kopf fit! ;)

Aber puseln() schau ich mir noch mal genauer an, habs grad nur überflogen, aber damit könnte ich auch in meiner Tachomessung etliche Zeilen Code einsparen.

Danke, für den 500. Karma bin ich verantwortlich ;)

michael_x

Quote
damit könnte ich auch in meiner Tachomessung etliche Zeilen Code einsparen.
Ist halt blockierend. Könntest also während einer Puls-Messung nicht gleichzeitig den Tacho bedienen.

Das ist generell der Unterschied zwischen 10 Zeilen Prinzip-Demo und einem Komplett-Sketch.

Aber Interrupts braucht es wohl auch nicht wirklich, außer zu Lern- und Übungszwecken.

SpaghettiCode

Hi,

ich habe gerade meinen Ruhepuls gemessen, 52 ???
Evtl. hilft Dir beim Tacho auch die Frequenz zu messen. Nur wenn es zu langsam ist, ist wohl pulseln() die bessere Variante.
Die Lib zum Frequenz messen habe ich im letzten Sketch mit verwurstet:
http://interface.khm.de/index.php/lab/interfaces-advanced/arduino-frequency-counter-library/

Gruß André

michael_x

@SpaghettiCode:

Sehe ich das richtig, dass die FreqCounter lib aus dem Link mit einem festen Pin arbeitet, und man damit also auch keine zwei Frequenzen (ErgometerSpeed / Puls) parallel erfassen kann?


SpaghettiCode

#19
Mar 19, 2019, 01:31 pm Last Edit: Mar 19, 2019, 01:40 pm by SpaghettiCode
@ michael, ja, der Takt wird an Pin D5 erwartet. Ist dann für diesen Zweck eher nicht das Gelbe vom Ei.

Nachtrag:   Für eine geplante HW hatte ich mir schon einen Umschalter mit einem 74HC00 zurechtgelegt,
damit ist zumindest ein ODER möglich, also entweder (F) / oder (H) via Select (S)



Gruß André

michael_x

Quote
Ist dann für diesen Zweck eher nicht das Gelbe vom Ei.
Sehe ich auch so :)

Und für das Signal S spendierst du einen Pin des Arduino?
Dann kann man den 74HC00 auch weg lassen und beide Signale parallel bearbeiten.

Wir haben hier Frequenzen im ca. 1..10 Hz Bereich.
Da könnte man eher fast überlegen, ob der Arduino nicht zwischendurch schlafen kann, bis wieder ein Signalwechsel kommt. :)

wapjoe

Ist halt blockierend. Könntest also während einer Puls-Messung nicht gleichzeitig den Tacho bedienen.
Hmm, blockierend ist nicht so doll, bringt mir dann doch nicht so viel, aber ich halte es mal im Hinterkopf - für andere Zwecke.

ich habe gerade meinen Ruhepuls gemessen, 52 ???
Evtl. hilft Dir beim Tacho auch die Frequenz zu messen. Nur wenn es zu langsam ist, ist wohl pulseln() die bessere Variante.
Die Lib zum Frequenz messen habe ich im letzten Sketch mit verwurstet:
http://interface.khm.de/index.php/lab/interfaces-advanced/arduino-frequency-counter-library/

Gruß André
52er Puls erscheint mir etwas niedrig, den haben Leistungssportler je nach Training. Aber 60-80 ist ein gesunder Puls, meiner ist definitiv zu hoch aber der Arzt checkt es regelmäßig! ;)

Meine Tachomessung ist soweit auch schon fertig, muss später nur mit den anderen Sketches kombiniert werden. Meine Trittfrequenz (UpM) ermittle ich damit ebenfalls und dadurch die theoretische Geschwindigkeit.

michael_x

#22
Mar 19, 2019, 03:16 pm Last Edit: Mar 19, 2019, 03:30 pm by michael_x Reason: Herzpsort-Stammtisch Diskussion ;)
So wie ich das sehe, ist kein wesentlicher Unterschied zwischen dem Pedal- und dem Herz-Signal.

Wenn deine Funktion Tachomessung ein paar Parameter hätte ( Pin - Nummer, Active und Time1 ), könntest du sie vermutlich zweimal verwenden.

Super-Tip : Funktionen können auch einen Rückgabe-Wert haben.  :)

Nur die Umrechnung und Anzeige als km/h bzw. BPM wäre geringfügig unterschiedlich.


Quote
52er Puls erscheint mir etwas niedrig
Eine Frage der Bisoprolol-Dosierung.
Wenn die geschätzte Restlaufzeit des Herzens bei unter eine Milliarde Schläge liegt, verteilt man die gerne etwas länger. Und entwickelt ein Gefühl dafür, dass man im Training dafür nur noch bis 120 kommen sollte :)

wapjoe

So wie ich das sehe, ist kein wesentlicher Unterschied zwischen dem Pedal- und dem Herz-Signal.

Wenn deine Funktion Tachomessung ein paar Parameter hätte ( Pin - Nummer, Active und Time1 ), könntest du sie vermutlich zweimal verwenden.

Super-Tip : Funktionen können auch einen Rückgabe-Wert haben.  :)
Ja, auf den Sketch wollte ich es auch aufbauen, bzw. da es eh kombiniert werden soll, versuch ich das gleich zu integrieren. Muss ich mal schauen ob die Funktion multitaskingfähig mache, oder machen kann. Ich werde die Sketche erstmal kombinieren und dann mache ich das Finetuning.

Wie kann ich denn mehr als einen Wert von einer Funktion zurückgeben lassen? Die Werte müssen später noch an das Display übermittelt werden, daher sind die meisten Variablen global deklariert, um die einfach weiter zu bearbeiten.

michael_x

Quote
Muss ich mal schauen ob die Funktion multitaskingfähig mache, oder machen kann
Musst du eigentlich nicht. (In einer ISR ( der einzigen Möglichkeit für Überholvorgänge ) sollte man nur das nötigste machen) Deine Funktion wird also im Sketch-Kontext laufen und von keinem Betriebssystem gestört.


Quote
Wie kann ich denn mehr als einen Wert von einer Funktion zurückgeben lassen?
Kannst Parameter als Referenz definieren. ( z.B. dein Time1 und Active )
Time2 und Time3 sind nur lokal und temporär.

Zurückliefern würde ich die Periodendauer in ms oder die Pulse/Minute als Ganzzahl. Daraus kann man glatt genug eine km/h - Zahl erfinden.

z.B. sowas, wenn du dafür nicht gleich eine kleine class oder struct machen willst
Code: [Select]
/// Solange kein neuer Flankenwechsel LOW->HIGH erkannt wird,
///    liefert speed den vorigen Wert erneut zurück.
/// status zum erkennen eines Flankenwechsels
/// Bei Flankenwechsel LOW->HIGH werden auch die anderen Parameter aktualisiert
/// speed [bpm] = 60000 / Duration [ms] oder 0
unsigned int speed(byte pin, bool& status, unsigned int& lastDuration, unsigned long& lastTime);



wapjoe

Puuhh, da verlangst du von mir als Anfänger aber einiges ;)

Wenn ich zeit habe und das Sketch umbaue, werde ich mir das noch mal genau anschauen...

Jetzt muss ich mir erstmal die heute aus China eingetroffenen Stepups genauer anschauen. :D

wapjoe

z.B. sowas, wenn du dafür nicht gleich eine kleine class oder struct machen willst
Code: [Select]
/// Solange kein neuer Flankenwechsel LOW->HIGH erkannt wird,
///    liefert speed den vorigen Wert erneut zurück.
/// status zum erkennen eines Flankenwechsels
/// Bei Flankenwechsel LOW->HIGH werden auch die anderen Parameter aktualisiert
/// speed [bpm] = 60000 / Duration [ms] oder 0
unsigned int speed(byte pin, bool& status, unsigned int& lastDuration, unsigned long& lastTime);

Hi Michael,

ich hab mich jetzt ein bisschen eingelesen, aber vermutlich noch nicht genug, ich bin etwas verwirrt...
Du schreibst die Funktion mit Referenz z.B. so:
int referenz_swap(int& a, int& b)
Es gibt aber Leute die die Funktion z.B. so schreiben:
int referenz_swap(int &a, int &b)

Was ist der Unterschied? Ich blick da grad nicht mehr durch und mit Zeigern will ich grad nicht mal anfangen... ;)

Gruß
Jörg

Tommy56

Da ist kein Unterschied. Das ist Ansichtssache.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

postmaster-ino

Hi

Der Unterschied: Es gibt Keinen.
Die Leerzeichen fallen (für den Kompiler) raus - Dem ist Das wurscht, ob Du das & an die Variable, oder den Datentyp 'bäppst'.

MfG

PS: ... zu spät ... Mal wieder
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

wapjoe

Hi

Der Unterschied: Es gibt Keinen.
Die Leerzeichen fallen (für den Kompiler) raus - Dem ist Das wurscht, ob Du das & an die Variable, oder den Datentyp 'bäppst'.
Danke, das ist ne Info, mit der ich arbeiten kann! :)

Go Up