You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/hardware/01.mkr/01.boards/mkr-wifi-1010/tutorials/mkr-battery-app-note/mkr-battery-app-note.md
+8-7Lines changed: 8 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -124,7 +124,7 @@ We will go through the lines needed to create a Sketch to read the battery value
124
124
**4.** We will now create a variable to store the maximum source voltage `max_Source_voltage` as well as the upper (`batteryFullVoltage`) and lower (`batteryEmptyVoltage`) values for the battery. We will also define the battery capacity as `batteryCapacity` so as to determine the charging current. Since we are using a 750 mAh battery in this example, we will set the value to `0.750`.
125
125
126
126
```arduino
127
-
int max_Source_voltage;
127
+
float max_Source_voltage;
128
128
129
129
float batteryFullVoltage = 4.2;
130
130
float batteryEmptyVoltage = 3.3;
@@ -185,12 +185,13 @@ void loop()
185
185
**13.** In order to convert `rawADC` into a voltage reading (`voltADC`) we will divide `rawADC` by 4095 and then multiply it by the analog reference voltage (3.3V).
186
186
187
187
```arduino
188
-
voltADC = rawADC * (3.3/4095.0);
188
+
voltADC = rawADC * 3.3 / 4096.0;
189
189
```
190
190
191
-
**14.** The `voltADC` variable gives us the voltage sensed directly on the PB09 pin. This voltage is passed through the voltage divider, so it is a fraction of the actual battery voltage. We can then calculate the equivilanet battery voltage as follows.
191
+
**14.** The `voltADC` variable gives us the voltage sensed directly on the PB09 pin. This voltage is passed through the voltage divider, so it is a fraction of the actual battery voltage. We can then calculate the equivalent battery voltage as follows.
192
+
192
193
```arduino
193
-
voltBat = voltADC * (max_Source_voltage/3.3);
194
+
voltBat = max_Source_voltage * rawADC / 4096.0;
194
195
```
195
196
196
197
**15.** We can approximate the battery voltage to be proportional to the capacity level. Since the `map()` function does not work with float variables, we will manually map the values.
@@ -266,7 +267,7 @@ float voltBat; //calculated voltage on battery
266
267
int R1 = 330000; // resistor between battery terminal and SAMD pin PB09
267
268
int R2 = 1000000; // resistor between SAMD pin PB09 and ground
268
269
269
-
int max_Source_voltage; // upper source voltage for the battery
270
+
float max_Source_voltage; // upper source voltage for the battery
270
271
271
272
// define voltage at which battery is full/empty
272
273
float batteryFullVoltage = 4.2; //upper voltage limit for battery
@@ -303,8 +304,8 @@ void loop()
303
304
{
304
305
305
306
rawADC = analogRead(ADC_BATTERY); //the value obtained directly at the PB09 input pin
306
-
voltADC = rawADC * (3.3/4095.0); //convert ADC value to the voltage read at the pin
307
-
voltBat = voltADC * (max_Source_voltage/3.3); //we cannot use map since it requires int inputs/outputs
307
+
voltADC = rawADC * 3.3 / 4096.0; //convert ADC value to the voltage read at the pin
308
+
voltBat = max_Source_voltage * rawADC / 4096.0; //we cannot use map since it requires int inputs/outputs
308
309
309
310
int new_batt = (voltBat - batteryEmptyVoltage) * (100) / (batteryFullVoltage - batteryEmptyVoltage); //custom float friendly map function
0 commit comments