따라서 이 튜토리얼에서는 Adafruit nRF52 Feather Bluefruit 보드에 연결된 LiPo 배터리 전압을 측정하고 이를 직렬 콘솔에 표시하겠습니다. 먼저 Arduino IDE를 통해 이 코드를 보드에 업로드하세요.
#define VBAT_PIN (A7)
#define VBAT_MV_PER_LSB (0.73242188F)
#define VBAT_DIVIDER (0.71275837F)
#define VBAT_DIVIDER_COMP (1.403F)
int vbat_raw;
uint8_t vbat_per;
float vbat_mv,vbat_v;
void setup(void) {
Serial.begin(115200);
analogReference(AR_INTERNAL_3_0);
analogReadResolution(12); // Can be 8, 10, 12 or 14
delay(1);
}
void loop(void) {
vbat_raw = analogRead(VBAT_PIN);
vbat_per = mv_to_percent(vbat_raw * VBAT_MV_PER_LSB);
vbat_mv = (float)vbat_raw * VBAT_MV_PER_LSB * VBAT_DIVIDER_COMP;
vbat_v = vbat_mv/1000;
Serial.print("ADC = ");
Serial.print(vbat_raw * VBAT_MV_PER_LSB);
Serial.print(" mV (");
Serial.print(vbat_raw);
Serial.print(") ");
Serial.print("LIPO = ");
Serial.print(vbat_v);
Serial.print(" V (");
Serial.print(vbat_per);
Serial.println("%)");
delay(4000);
}
uint8_t mv_to_percent(float mvolts) {
uint8_t battery_level;
if (mvolts >= 3000) {
battery_level = 100;
} else if (mvolts > 2900) {
battery_level = 100 - ((3000 - mvolts) * 58) / 100;
} else if (mvolts > 2740) {
battery_level = 42 - ((2900 - mvolts) * 24) / 160;
} else if (mvolts > 2440) {
battery_level = 18 - ((2740 - mvolts) * 12) / 300;
} else if (mvolts > 2100) {
battery_level = 6 - ((2440 - mvolts) * 6) / 340;
} else {
battery_level = 0;
}
return battery_level;
}
다음으로 JST 커넥터가 있는 LiPo 배터리를 Adafruit nRF52 보드 커넥터에 연결합니다. 그런 다음 USB 케이블을 사용하여 보드를 충전합니다. 충전 중에는 노란색 'CHG' LED가 켜져 있는지 확인하세요. 이제 직렬 콘솔을 열어 배터리 충전 상태를 확인하세요. 노란색 'CHG' LED가 꺼지면 배터리 충전이 완료되었음을 의미합니다.