-
Notifications
You must be signed in to change notification settings - Fork 0
/
peakProg1
151 lines (84 loc) · 3.46 KB
/
peakProg1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <DFRobot_MAX30102.h>
DFRobot_MAX30102 particleSensor;
int Red;
int Redsafed = 1;
int redMax = 1;
int Redmaxtemp = 1;
float pulse;
float average;
float newValue;
float result;
const float strength = 0.97;
void setup() {
// put your setup code here, to run once:
//Init serial
Serial.begin(115200);
/*!
*@brief Init sensor
*@param pWire IIC bus pointer object and construction device, can both pass or not pass parameters (Wire in default)
*@param i2cAddr Chip IIC address (0x57 in default)
*@return true or false
*/
while (!particleSensor.begin()) {
Serial.println("MAX30102 was not found");
delay(1000);
}
/*!
*@brief Use macro definition to configure sensor
*@param ledBrightness LED brightness, default value: 0x1F(6.4mA), Range: 0~255(0=Off, 255=50mA)
*@param sampleAverage Average multiple samples then draw once, reduce data throughput, default 4 samples average
*@param ledMode LED mode, default to use red light and IR at the same time
*@param sampleRate Sampling rate, default 400 samples every second
*@param pulseWidth Pulse width: the longer the pulse width, the wider the detection range. Default to be Max range
*@param adcRange Measurement Range, default 4096 (nA), 15.63(pA) per LSB
*/
particleSensor.sensorConfiguration(/*ledBrightness=*/0x1F, /*sampleAverage=*/SAMPLEAVG_4, \
/*ledMode=*/MODE_MULTILED, /*sampleRate=*/SAMPLERATE_400, \
/*pulseWidth=*/PULSEWIDTH_411, /*adcRange=*/ADCRANGE_4096);
}
void loop() {
// put your main code here, to run repeatedly:
// DC Filter
float newValue = (float) particleSensor.getRed();
average = (strength * average) + ((1.0-strength) * newValue);
float result = newValue - average;
pulse = (float) particleSensor.getRed() - average;
newValue = (float) particleSensor.getRed();
average = (strength * average) + ((1.0-strength) * newValue);
result = newValue - average;
//Serial.println(result);
//DC Filter Ende
//Speichern von Peakmax//
Red = pulse; //gefilterter Rotwert
while (Red > 0);
//Wenn Red größer ist als Null startet ein Durchgang;
{
if (Red > Redsafed) //Wenn Red größer ist als der gespeicherte Rotwert, dann wird der Rotwert gespeichert und zu 0 zurückgekehrt
{
Redsafed = Red;
}
else
// Wenn der Red kleiner ist als der gespeicherte Rotwert, dann wird der Rotwert als Maxwert gesetzt, wenn er größer ist als der Redmaxtemp
{
if (Redsafed > Redmaxtemp)
{
Redmaxtemp = Redsafed;
}
else //Wenn der Red kleiner ist als der gespeicherte Rotwert, dann wird der Rotwert nicht als Maxwert gesetzt, wenn er kleiner ist als Redmaxtemp
{
if (Red > 0 ) //Wenn der Red kleiner ist als der gespeicherte Rotwert und der Red kleiner ist als 0; Dann ist der Durchlauf beendet und der Redmaxtemp ist der RedMax
//Redsafed wird auf 1 gesetzt, sowie der Redmaxtemp, für den nächsten Durchgang
{
redMax = Redmaxtemp;
Redsafed = 1;
Redmaxtemp = 1;
Serial.println(redMax);
}
else
{
}
}
}
}
}
//Speichern von Peakmax Ende//