A simple example for analog input and EPD usage.
Dependencies: GDEP015OC1 acn_nrf52_saadc aconno_bsp
Fork of acd52832_Car_battery_ch by
Diff: main.cpp
- Revision:
- 10:8a9eb611624e
- Parent:
- 9:eef3ea422bfe
- Child:
- 11:6c6bebdfff06
--- a/main.cpp Fri Jul 07 11:50:24 2017 +0000
+++ b/main.cpp Fri Oct 06 14:33:57 2017 +0000
@@ -9,11 +9,12 @@
#include "acd52832_bsp.h"
#include "GDEP015OC1.h"
#include "pictures.h"
+#include "acd_nrf52_saadc.h"
-#define DEBUG (0)
-#define ADC_MAX_VALUE (4095)
-#define ADC_REF_VOLTAGE (3.6)
-#define VOLTAGE_DIVIDER_RATION (4.42)
+#define DEBUG (1)
+#define ADC_MAX_VALUE (8192)
+#define ADC_REF_VOLTAGE (3.3f)
+#define VOLTAGE_DIVIDER_RATION (7.0606)
#define VOLTAGE_LOSS (0.4)
#define CURRENT_FACTOR (36.0)
#define BATTERY_CHARGED_V (13)
@@ -23,7 +24,7 @@
#define QUICK_CURRENT (float)(0.8)
#define LOW_CURRENT (float)(0.4)
#define NO_CURRENT (float)(0.01)
-#define NUM_OF_MEASUREMENTS (20)
+#define NUM_OF_MEASUREMENTS (1)
#define NO_CURRENT_STATE (0)
#define LOW_CURRENT_STATE (1)
#define QUICK_CURRENT_STATE (2)
@@ -39,12 +40,12 @@
#define _BS_1 (1)
#define _BS_E (0)
-SPI spi(PIN_EPD_MOSI, NC, PIN_EPD_SCK, NC);
-GDEP015OC1 epd = GDEP015OC1(spi, PIN_EPD_CS, PIN_EPD_DC, PIN_EPD_RST, PIN_EPD_BUSY);
+#define ANALOG_PIN_P (4)
+#define ANALOG_PIN_N (5)
+#define NUM_OF_DIFF_ADCs (1)
-AnalogIn battery (p28);
-AnalogIn usb1 (p29);
-AnalogIn usb2 (p30);
+SPI spi(PIN_EPD_MOSI, NC, PIN_EPD_SCK, NC);
+GDEP015OC1 epd = GDEP015OC1(spi, PIN_EPD_CS, PIN_EPD_DC, PIN_EPD_RST, PIN_EPD_BUSY);
uint8_t get_battery_level(float battery_voltage){
if (battery_voltage > BATTERY_CHARGED_V * 4){
@@ -98,6 +99,14 @@
}
int main(){
+ NRF52_SAADC *diffADCs[NUM_OF_DIFF_ADCs];
+ /* Declare your ADCs here */
+ /* Change NUM_OF_DIFF_ADCs in the header */
+ diffADCs[0] = new NRF52_SAADC(ANALOG_PIN_P, ANALOG_PIN_N);
+
+ NRF52_SAADC usb1(7); // P29, AIN5
+ NRF52_SAADC usb2(6); // p30, AIN6
+
char low_string[25] = "LOW";
char quick_string[25] = "QUICK";
float adc1_mean=0, adc2_mean=0, adc3_mean=0;
@@ -116,17 +125,15 @@
float old_usb1_current = 0;
float old_usb2_current = 0;
#endif
-
- NRF_SAADC->RESOLUTION = 0x00000002; // Set 12b resolution
-
+
epd.empty();
epd.writeFull();
while(true){
- adc1_mean += battery.read_u16();
- adc2_mean += usb1.read_u16();
- adc3_mean += usb2.read_u16();
+ adc1_mean += diffADCs[0]->read();
+ adc2_mean += usb1.read();
+ adc3_mean += usb2.read();
count ++;
if (count == NUM_OF_MEASUREMENTS){
@@ -136,9 +143,12 @@
adc3_mean /= NUM_OF_MEASUREMENTS;
count = 0;
- battery_voltage = adc1_mean*(ADC_REF_VOLTAGE/ADC_MAX_VALUE)*VOLTAGE_DIVIDER_RATION + VOLTAGE_LOSS;
- usb1_current = (adc2_mean*(ADC_REF_VOLTAGE/ADC_MAX_VALUE)) * CURRENT_FACTOR;
- usb2_current = (adc3_mean*(ADC_REF_VOLTAGE/ADC_MAX_VALUE)) * CURRENT_FACTOR;
+ //voltage[i] = ((float)(diffADCs[i]->read()))*(3.3f/8192.0); // Convert raw data into voltage
+ //battery_voltage = ((float)(diffADCs[0]->read()*(3.3f/8192.0)*VOLTAGE_DIVIDER_RATION));
+ battery_voltage = ((float)(diffADCs[0]->read()*(3.3f/8192.0)));
+ //battery_voltage = adc1_mean*(ADC_REF_VOLTAGE/ADC_MAX_VALUE);
+ usb1_current = (adc2_mean*(ADC_REF_VOLTAGE/(ADC_MAX_VALUE*2))) * CURRENT_FACTOR;
+ usb2_current = (adc3_mean*(ADC_REF_VOLTAGE/(ADC_MAX_VALUE*2))) * CURRENT_FACTOR;
battery_level = get_battery_level(battery_voltage);
if(battery_level != old_battery_level || change_flag){
