Frage zum Berechnen mit logarithmus und Kommastellen.

Hallo, für ein etwas aufwendiges Arduino Projekt ( Pulsoximeter: Darstsellung der Sauerstoffsättigung im atr. Blut) benötige ich Hilfe
bezugnehmend auf Rechenoperationen mit logarithmus.

Mittels zwei verschiedener Ampituden zweier Signale ( ROT LED und IR LED) muss ich ein dekadisch logarihmisches Verhältnis (Omega) bilden.
Diese Messvariable Omega wird benötigt um die Sauerstoffsättigung (SPO2) zu bestimmen.

R,IR,Omega sind floats.
Hier ein Auszug:

R = ((Quell/1023)R_MAX);// Konvertieren von ADC in Volt( 5v/1023)Amplitude
IR= ((Quell/1023)IR_MAX);// ""
Omega = log(R)/log(IR);
if(Omega<=1.2 && Omega<=0.4)
{ SpO2 = (110-(25
Omega));}

Bisher funktionierts ganz gut, soll halt nur etwas genauer werden.
Für R und IR mochte ich gerne mit 2 NachkommaKommastellen arbeiten .
Bisher bekomm ich bei Omega nur 2 Nachkommastellen raus.
Omega soll bei der 4. Kommastellen aufgerundet werden. Muss ich was bei Datentyp float verändern?
Für Eure Hilfe wäre ich sehr dankbar.

die_Diode:
Für R und IR mochte ich gerne mit 2 NachkommaKommastellen arbeiten .

Wenn Du Gleitkommazahlen haben möchtest, rechne mit Gleitkommazahlen!

Es reicht nicht, links vom Gleichheitszeichen auf eine Gleitkommazahl zuzuweisen, sondern Du mußt auch rechts vom Gleichheitszeichen mit Gleitkommazahlen rechnen, damit eine Gleitkommazahl bei der Rechnung als Ergebnis herauskommt.

Ein "Quell/1023" bedeutet immer eine Ganzzahl-Division wenn auch Quell eine Ganzzahl ist. Willst Du eine Gleitkommadivision mit Quell als Ganzzahl, dann rechne "Quell/1023.0", das ergibt dann eine Gleitkommazahl als Ergebnis.

brauchst du den briggschen Logarithmus oder den Lagarithmus naturales?

ardubu:
brauchst du den briggschen Logarithmus oder den Lagarithmus naturales?

ich ein dekadisch logarihmisches Verhältnis (Omega) bilden.

Ist das nicht schon klar?

Grüße Uwe

ich ein dekadisch logarihmisches Verhältnis (Omega) bilden.

eigentlich schon, aber das wiederspricht dem

Omega = log(R)/log(IR);

daher meine Frage.
ich habe deinen code mal entsprechend geändert

float R = ((Quell/1023.0)R_MAX);//  Konvertieren von ADC in Volt( 5v/1023)*Amplitude
float IR= ((Quell/1023.0)IR_MAX);//       ""
float Omega=(log10(R))/(log10(IR));  //-->bei briggschem logarithmus
if (Omega<=1.2&&Omega>=0.4)  //--> ich vermute mal du meinst >=0.4
{SpO2 = (110-(25*Omega));}

Danke,
log10 also... >=0.4 stimmt,macht Sinn. :slight_smile: